mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-26 22:42:17 +00:00
Refine store copy and empty states
This commit is contained in:
parent
8b4715e945
commit
d9954c04e8
43 changed files with 616 additions and 315 deletions
|
|
@ -4,7 +4,7 @@ actual object AppFeaturePolicy {
|
|||
actual val pluginsEnabled: Boolean = true
|
||||
actual val supportersContributorsPageEnabled: Boolean = true
|
||||
actual val accountDeletionEnabled: Boolean = false
|
||||
actual val personalMediaAddonCopyEnabled: Boolean = false
|
||||
actual val storeNarrativeEnabled: Boolean = false
|
||||
actual val p2pEnabled: Boolean = true
|
||||
actual val trailerPlaybackMode: TrailerPlaybackMode = TrailerPlaybackMode.IN_APP
|
||||
actual val heroTrailerPlaybackSupported: Boolean = true
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ actual object AppFeaturePolicy {
|
|||
actual val pluginsEnabled: Boolean = false
|
||||
actual val supportersContributorsPageEnabled: Boolean = true
|
||||
actual val accountDeletionEnabled: Boolean = false
|
||||
actual val personalMediaAddonCopyEnabled: Boolean = false
|
||||
actual val storeNarrativeEnabled: Boolean = true
|
||||
actual val p2pEnabled: Boolean = true
|
||||
actual val trailerPlaybackMode: TrailerPlaybackMode = TrailerPlaybackMode.EXTERNAL
|
||||
actual val heroTrailerPlaybackSupported: Boolean = false
|
||||
|
|
|
|||
|
|
@ -433,7 +433,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Изтегли последна версия</string>
|
||||
<string name="compose_settings_root_check_updates_title">Провери за актуализации</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Управлявай добавки и източници за discovery.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Управлявайте добавките и изберете какво да се показва в Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Управлявай изтеглените филми и епизоди.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Управлявайте запазеното на това устройство.</string>
|
||||
<string name="compose_settings_root_downloads_title">Изтегляния</string>
|
||||
<string name="compose_settings_root_general_section">ОБЩИ</string>
|
||||
<string name="compose_settings_root_integrations_description">Управлявай наличните интеграции</string>
|
||||
|
|
@ -1845,11 +1847,13 @@
|
|||
<string name="player_error_torrent">Грешка в торента: %1$s</string>
|
||||
<!-- Current cmp-rewrite string additions -->
|
||||
<string name="action_switch">Превключи</string>
|
||||
<string name="addons_appstore_add_description">Свържете собствен медиен сървър, за да разглеждате и възпроизвеждате от личната си библиотека.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Добавете URL на сървър по-горе, когато искате Nuvio да показва вашата лична библиотека.</string>
|
||||
<string name="addons_appstore_empty_title">Няма свързани лични библиотеки.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL на сървър</string>
|
||||
<string name="addons_appstore_install_button">Добави</string>
|
||||
<string name="addons_appstore_add_description">Пренесете библиотеката си в Nuvio с добавките, които използвате.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Добавете добавка, за да започнете да изграждате библиотеката си.</string>
|
||||
<string name="addons_appstore_empty_title">Настройте Nuvio по свой начин.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL на добавка</string>
|
||||
<string name="addons_appstore_install_button">Добавяне на добавка</string>
|
||||
<string name="store_empty_unavailable_title">Все още няма нищо тук</string>
|
||||
<string name="store_empty_unavailable_message">Текущите ви добавки все още нямат какво да покажат тук.</string>
|
||||
<string name="community_donation_progress_title">Сървър и поддръжка за този месец</string>
|
||||
<string name="community_donation_progress_complete">Покрито. Допълнителната подкрепа вече отива за разработка.</string>
|
||||
<string name="community_donation_progress_remaining">След 100% допълнителната подкрепа отива за разработка.</string>
|
||||
|
|
@ -1861,7 +1865,7 @@
|
|||
<string name="details_actions_menu_label">Още действия</string>
|
||||
<string name="p2p_error_unknown">Неизвестна грешка в торента</string>
|
||||
<string name="settings_appearance_app_language_device">Език на устройството</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Свържете лични медийни източници и управлявайте достъпа до собствената си библиотека.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Добавяйте и управлявайте добавките, които използвате с Nuvio.</string>
|
||||
<string name="settings_playback_external_player_send_skip_segments">Изпращане на времеви маркери за интро и аутро</string>
|
||||
<string name="settings_playback_external_player_send_skip_segments_description">Предайте откритите времеви маркери за интро и аутро към външния плейър за автоматично прескачане. Работи само в плейъри, които го поддържат; останалите плейъри го игнорират.</string>
|
||||
<string name="settings_playback_touch_gestures">Жестове с докосване</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">Nedostupné</string>
|
||||
<string name="addons_configure">Konfigurovat doplněk</string>
|
||||
<string name="addons_delete">Smazat doplněk</string>
|
||||
<string name="addons_appstore_add_description">Připojte svůj vlastní mediální server a procházejte i přehrávejte ze své osobní knihovny.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Přidejte výše adresu URL serveru, pokud chcete, aby Nuvio zobrazovalo vaši soukromou knihovnu.</string>
|
||||
<string name="addons_appstore_empty_title">Nejsou připojeny žádné osobní knihovny.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL serveru</string>
|
||||
<string name="addons_appstore_install_button">Přidat</string>
|
||||
<string name="addons_appstore_add_description">Přeneste svou knihovnu do Nuvia pomocí doplňků, které používáte.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Přidejte doplněk a začněte vytvářet svou knihovnu.</string>
|
||||
<string name="addons_appstore_empty_title">Přizpůsobte si Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL doplňku</string>
|
||||
<string name="addons_appstore_install_button">Přidat doplněk</string>
|
||||
<string name="store_empty_unavailable_title">Zatím tu nic není</string>
|
||||
<string name="store_empty_unavailable_message">Vaše současné doplňky tu zatím nemají co zobrazit.</string>
|
||||
<string name="addons_empty_subtitle">Přidejte URL manifestu, abyste mohli do Nuvio začít načítat katalogy, metadata, streamy nebo titulky.</string>
|
||||
<string name="addons_empty_title">Zatím nejsou nainstalovány žádné doplňky.</string>
|
||||
<string name="addons_error_enter_url">Zadejte URL doplňku.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Stáhnout nejnovější verzi</string>
|
||||
<string name="compose_settings_root_check_updates_title">Zkontrolovat aktualizace</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Správa doplňků a zdrojů objevování.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Spravujte doplňky a vyberte, co se má v Nuviu zobrazovat.</string>
|
||||
<string name="compose_settings_root_downloads_description">Spravujte své stažené filmy a epizody.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Spravujte obsah uložený v tomto zařízení.</string>
|
||||
<string name="compose_settings_root_downloads_title">Stažené položky</string>
|
||||
<string name="compose_settings_root_general_section">OBECNÉ</string>
|
||||
<string name="compose_settings_root_integrations_description">Spravovat dostupné integrace</string>
|
||||
|
|
@ -638,7 +642,7 @@
|
|||
<string name="settings_content_discovery_section_home">DOMŮ</string>
|
||||
<string name="settings_content_discovery_section_sources">ZDROJE</string>
|
||||
<string name="settings_content_discovery_addons_description">Instalovat, odstraňovat, obnovovat a třídit vaše zdroje obsahu.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Připojit osobní mediální zdroje a spravovat přístup k vlastní knihovně.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Přidávejte a spravujte doplňky, které používáte s Nuviem.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instalovat repozitáře pro JavaScriptové scarpování a testovat poskytovatele interně.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Upravit rozvržení domovské obrazovky, viditelnost obsahu a chování plakátů.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Nastavení pro obrazovku detailu a epizody.</string>
|
||||
|
|
|
|||
|
|
@ -27,6 +27,13 @@
|
|||
<string name="addons_badge_unavailable">Nicht verfügbar</string>
|
||||
<string name="addons_configure">Addon konfigurieren</string>
|
||||
<string name="addons_delete">Addon löschen</string>
|
||||
<string name="addons_appstore_add_description">Bring deine Mediathek mit den Addons, die du nutzt, zu Nuvio.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Füge ein Addon hinzu, um deine Mediathek aufzubauen.</string>
|
||||
<string name="addons_appstore_empty_title">Richte Nuvio für dich ein.</string>
|
||||
<string name="addons_appstore_input_placeholder">Addon-URL</string>
|
||||
<string name="addons_appstore_install_button">Addon hinzufügen</string>
|
||||
<string name="store_empty_unavailable_title">Hier gibt es noch nichts</string>
|
||||
<string name="store_empty_unavailable_message">Deine aktuellen Addons zeigen hier noch nichts an.</string>
|
||||
<string name="addons_empty_subtitle">Füge eine Manifest-URL hinzu, um Kataloge, Metadaten, Streams oder Untertitel in Nuvio zu laden.</string>
|
||||
<string name="addons_empty_title">Noch keine Addons installiert.</string>
|
||||
<string name="addons_error_enter_url">Gib eine Addon-URL ein.</string>
|
||||
|
|
@ -383,7 +390,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Suche nach neuen Versionen der App.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Nach Updates suchen</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Verwalte Addons und Entdeckungsquellen.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Verwalte Addons und wähle aus, was in Nuvio angezeigt wird.</string>
|
||||
<string name="compose_settings_root_downloads_description">Verwalte deine heruntergeladenen Filme und Episoden.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Verwalte, was du auf diesem Gerät gespeichert hast.</string>
|
||||
<string name="compose_settings_root_downloads_title">Downloads</string>
|
||||
<string name="compose_settings_root_general_section">ALLGEMEIN</string>
|
||||
<string name="compose_settings_root_integrations_description">TMDB- und MDBList-Dienste verbinden.</string>
|
||||
|
|
@ -519,6 +528,7 @@
|
|||
<string name="settings_content_discovery_section_home">START</string>
|
||||
<string name="settings_content_discovery_section_sources">QUELLEN</string>
|
||||
<string name="settings_content_discovery_addons_description">Installiere, entferne, aktualisiere und sortiere deine Inhaltsquellen.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Füge die Addons hinzu, die du mit Nuvio nutzt, und verwalte sie.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Installiere JavaScript-Scraper-Repositories und teste Anbieter intern.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Lege fest, welche Kataloge auf der Startseite und in welcher Reihenfolge erscheinen.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Detail-Abschnitte deaktivieren und alles unterhalb des Hero neu anordnen.</string>
|
||||
|
|
|
|||
|
|
@ -233,7 +233,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Ελέγξτε για νέες εκδόσεις της εφαρμογής.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Έλεγχος για ενημερώσεις</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Διαχείριση πρόσθετων και πηγών ανακάλυψης.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Διαχειριστείτε τα πρόσθετα και επιλέξτε τι εμφανίζεται στο Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Διαχειριστείτε τις κατεβασμένες ταινίες και επεισόδιά σας.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Διαχειριστείτε όσα έχετε αποθηκεύσει σε αυτή τη συσκευή.</string>
|
||||
<string name="compose_settings_root_downloads_title">Λήψεις</string>
|
||||
<string name="compose_settings_root_general_section">ΓΕΝΙΚΑ</string>
|
||||
<string name="compose_settings_root_integrations_description">Σύνδεση υπηρεσιών TMDB και MDBList.</string>
|
||||
|
|
@ -1061,11 +1063,13 @@
|
|||
<string name="action_saving">Αποθήκευση…</string>
|
||||
<string name="action_switch">Εναλλαγή</string>
|
||||
<string name="action_validate">Επικύρωση</string>
|
||||
<string name="addons_appstore_add_description">Συνδέστε τον δικό σας διακομιστή μέσων για να περιηγηθείτε και να αναπαραγάγετε από τη δική σας προσωπική βιβλιοθήκη.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Προσθέστε μια διεύθυνση URL διακομιστή παραπάνω όταν θέλετε το Nuvio να εμφανίζει τη δική σας ιδιωτική βιβλιοθήκη.</string>
|
||||
<string name="addons_appstore_empty_title">Δεν υπάρχουν προσωπικές βιβλιοθήκες συνδεδεμένες.</string>
|
||||
<string name="addons_appstore_input_placeholder">Διεύθυνση URL διακομιστή</string>
|
||||
<string name="addons_appstore_install_button">Προσθήκη</string>
|
||||
<string name="addons_appstore_add_description">Φέρτε τη βιβλιοθήκη σας στο Nuvio με τα πρόσθετα που χρησιμοποιείτε.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Προσθέστε ένα πρόσθετο για να αρχίσετε να δημιουργείτε τη βιβλιοθήκη σας.</string>
|
||||
<string name="addons_appstore_empty_title">Κάντε το Nuvio δικό σας.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL πρόσθετου</string>
|
||||
<string name="addons_appstore_install_button">Προσθήκη πρόσθετου</string>
|
||||
<string name="store_empty_unavailable_title">Δεν υπάρχει τίποτα εδώ ακόμη</string>
|
||||
<string name="store_empty_unavailable_message">Τα πρόσθετα που χρησιμοποιείτε δεν έχουν ακόμη τίποτα να εμφανίσουν εδώ.</string>
|
||||
<string name="addons_badge_disabled">Απενεργοποιημένο</string>
|
||||
<string name="addons_manifest_missing_field">Το manifest είναι κενό "%1$s"</string>
|
||||
<string name="cloud_library_connect_action">Σύνδεση λογαριασμού</string>
|
||||
|
|
@ -1520,7 +1524,7 @@
|
|||
<string name="settings_appearance_app_language_device">Device Γλώσσα</string>
|
||||
<string name="settings_appearance_liquid_glass">Liquid Glass</string>
|
||||
<string name="settings_appearance_liquid_glass_description">Use the native iPhone tab bar on iOS 26 and later.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Connect personal media sources and manage access to your own Βιβλιοθήκη.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Προσθέστε και διαχειριστείτε τα πρόσθετα που χρησιμοποιείτε με το Nuvio.</string>
|
||||
<string name="settings_continue_watching_blur_next_up_description">Blur next episode thumbnails in Συνέχεια Watching to avoid spoilers.</string>
|
||||
<string name="settings_continue_watching_blur_next_up_title">Blur Unwatched in Συνέχεια Watching</string>
|
||||
<string name="settings_continue_watching_section_sort_order">Ταξινόμηση ORDER</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">No disponible</string>
|
||||
<string name="addons_configure">Configurar complemento</string>
|
||||
<string name="addons_delete">Eliminar complemento</string>
|
||||
<string name="addons_appstore_add_description">Conecte su propio servidor multimedia para navegar y reproducir desde su biblioteca personal.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Agregue una URL de servidor arriba cuando desee que Nuvio muestre su biblioteca privada.</string>
|
||||
<string name="addons_appstore_empty_title">No hay bibliotecas personales conectadas.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL del servidor</string>
|
||||
<string name="addons_appstore_install_button">Agregar</string>
|
||||
<string name="addons_appstore_add_description">Lleva tu biblioteca a Nuvio con los complementos que utilizas.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Agrega un complemento para empezar a crear tu biblioteca.</string>
|
||||
<string name="addons_appstore_empty_title">Haz tuyo Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL del complemento</string>
|
||||
<string name="addons_appstore_install_button">Agregar complemento</string>
|
||||
<string name="store_empty_unavailable_title">Aún no hay nada aquí</string>
|
||||
<string name="store_empty_unavailable_message">Tus complementos actuales aún no tienen nada que mostrar aquí.</string>
|
||||
<string name="addons_empty_subtitle">Agrega una URL de manifiesto para empezar a cargar catálogos, metadatos, streams o subtítulos en Nuvio.</string>
|
||||
<string name="addons_empty_title">Aún no hay complementos instalados.</string>
|
||||
<string name="addons_error_enter_url">Introduce una URL de complemento.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Buscar nuevas versiones de la app.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Buscar actualizaciones</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Administra complementos y fuentes de descubrimiento.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Administra tus complementos y elige qué aparece en Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Administra tus películas y episodios descargados.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Administra lo que has guardado en este dispositivo.</string>
|
||||
<string name="compose_settings_root_downloads_title">Descargas</string>
|
||||
<string name="compose_settings_root_general_section">GENERAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Conecta los servicios TMDB y MDBList.</string>
|
||||
|
|
@ -638,7 +642,7 @@
|
|||
<string name="settings_content_discovery_section_home">INICIO</string>
|
||||
<string name="settings_content_discovery_section_sources">FUENTES</string>
|
||||
<string name="settings_content_discovery_addons_description">Instala, elimina, actualiza y ordena tus fuentes de contenido.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Conecte fuentes de medios personales y administre el acceso a su propia biblioteca.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Agrega y administra los complementos que utilizas con Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instala repositorios de scrapers en JavaScript y prueba proveedores internamente.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Controla qué catálogos aparecen en Inicio y en qué orden.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Desactiva secciones de detalles y reordena todo debajo del Destacado.</string>
|
||||
|
|
|
|||
|
|
@ -33,11 +33,13 @@
|
|||
<string name="addons_badge_unavailable">Indisponible</string>
|
||||
<string name="addons_configure">Configurer l’addon</string>
|
||||
<string name="addons_delete">Supprimer l’addon</string>
|
||||
<string name="addons_appstore_add_description">Connectez votre propre serveur multimédia pour parcourir et lire depuis votre bibliothèque personnelle.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Ajoutez une URL de serveur ci-dessus pour que Nuvio affiche votre bibliothèque privée.</string>
|
||||
<string name="addons_appstore_empty_title">Aucune bibliothèque personnelle connectée.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL du serveur</string>
|
||||
<string name="addons_appstore_install_button">Ajouter</string>
|
||||
<string name="addons_appstore_add_description">Retrouvez votre bibliothèque dans Nuvio avec les addons que vous utilisez.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Ajoutez un addon pour commencer à créer votre bibliothèque.</string>
|
||||
<string name="addons_appstore_empty_title">Personnalisez Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL de l’addon</string>
|
||||
<string name="addons_appstore_install_button">Ajouter un addon</string>
|
||||
<string name="store_empty_unavailable_title">Rien à afficher pour le moment</string>
|
||||
<string name="store_empty_unavailable_message">Vos addons actuels n’ont encore rien à afficher ici.</string>
|
||||
<string name="addons_empty_subtitle">Ajoutez une URL de manifeste pour commencer à charger des catalogues, métadonnées, streams ou sous-titres dans Nuvio.</string>
|
||||
<string name="addons_empty_title">Aucun addon installé.</string>
|
||||
<string name="addons_error_enter_url">Saisissez une URL d’addon.</string>
|
||||
|
|
@ -434,7 +436,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Rechercher de nouvelles versions de l’application.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Vérifier les mises à jour</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Gérez les addons et sources de découverte.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Gérez vos addons et choisissez ce qui apparaît dans Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Gérez vos films et épisodes téléchargés.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Gérez ce que vous avez enregistré sur cet appareil.</string>
|
||||
<string name="compose_settings_root_downloads_title">Téléchargements</string>
|
||||
<string name="compose_settings_root_general_section">GÉNÉRAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Connectez les services TMDB et MDBList.</string>
|
||||
|
|
@ -648,7 +652,7 @@
|
|||
<string name="settings_content_discovery_section_home">ACCUEIL</string>
|
||||
<string name="settings_content_discovery_section_sources">SOURCES</string>
|
||||
<string name="settings_content_discovery_addons_description">Installez, supprimez, mettez à jour et ordonnez vos sources de contenu.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Connectez des sources multimédias personnelles et gérez l’accès à votre propre bibliothèque.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Ajoutez et gérez les addons que vous utilisez avec Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Installez des dépôts de scrapers JavaScript et testez des fournisseurs en interne.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Contrôle quels catalogues apparaissent à l’accueil et dans quel ordre.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Désactivez des sections de détails et réorganisez tout sous le Hero.</string>
|
||||
|
|
|
|||
|
|
@ -401,7 +401,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">A legújabb verzió letöltése</string>
|
||||
<string name="compose_settings_root_check_updates_title">Frissítések keresése</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Kiegészítők és tartalomforrások kezelése</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Kezeld a kiegészítőket, és válaszd ki, mi jelenjen meg a Nuvióban.</string>
|
||||
<string name="compose_settings_root_downloads_description">A letöltött filmek és epizódok kezelése</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Kezeld az eszközre mentett tartalmakat.</string>
|
||||
<string name="compose_settings_root_downloads_title">Letöltések</string>
|
||||
<string name="compose_settings_root_general_section">ÁLTALÁNOS</string>
|
||||
<string name="compose_settings_root_integrations_description">Elérhető integrációk kezelése</string>
|
||||
|
|
@ -1339,11 +1341,13 @@
|
|||
<string name="unit_bytes_gb">GB</string>
|
||||
<string name="action_switch">Váltás</string>
|
||||
<string name="addons_badge_disabled">Kikapcsolva</string>
|
||||
<string name="addons_appstore_add_description">Csatlakoztasd saját médiaszerveredet a személyes könyvtárad böngészéséhez és lejátszásához.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adj meg egy szerver URL-t fent, ha szeretnéd, hogy a Nuvio megjelenítse a privát könyvtáradat.</string>
|
||||
<string name="addons_appstore_empty_title">Nincsenek csatlakoztatott személyes könyvtárak.</string>
|
||||
<string name="addons_appstore_input_placeholder">Szerver URL</string>
|
||||
<string name="addons_appstore_install_button">Hozzáadás</string>
|
||||
<string name="addons_appstore_add_description">Hozd el a könyvtáradat a Nuvióba a használt kiegészítőkkel.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adj hozzá egy kiegészítőt a könyvtárad felépítéséhez.</string>
|
||||
<string name="addons_appstore_empty_title">Szabd személyre a Nuviót.</string>
|
||||
<string name="addons_appstore_input_placeholder">Kiegészítő URL-je</string>
|
||||
<string name="addons_appstore_install_button">Kiegészítő hozzáadása</string>
|
||||
<string name="store_empty_unavailable_title">Itt még nincs semmi</string>
|
||||
<string name="store_empty_unavailable_message">A jelenlegi kiegészítőid még nem jelenítenek meg itt semmit.</string>
|
||||
<string name="collections_editor_tmdb_genres_movie_placeholder">28,12</string>
|
||||
<string name="collections_editor_tmdb_genres_series_placeholder">18,35</string>
|
||||
<string name="collections_editor_tmdb_date_from_placeholder">2020-01-01</string>
|
||||
|
|
@ -1397,7 +1401,7 @@
|
|||
<string name="settings_show_secret">Érték megjelenítése</string>
|
||||
<string name="settings_continue_watching_style_card">Kártya</string>
|
||||
<string name="settings_continue_watching_style_card_description">TV-stílusú fekvő kártya</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Személyes médiaforrások csatlakoztatása és a saját könyvtáradhoz való hozzáférés kezelése.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Add hozzá és kezeld a Nuvióval használt kiegészítőket.</string>
|
||||
<string name="settings_debrid_cloud_library">Felhő könyvtár</string>
|
||||
<string name="settings_debrid_cloud_library_description">A csatlakoztatott fiókjaidban már meglévő fájlok böngészése és lejátszása.</string>
|
||||
<string name="settings_debrid_resolve_with">Feloldás ezzel</string>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@
|
|||
<string name="addons_badge_unavailable">Tidak Tersedia</string>
|
||||
<string name="addons_configure">Konfigurasi addon</string>
|
||||
<string name="addons_delete">Hapus addon</string>
|
||||
<string name="addons_appstore_add_description">Bawa pustaka Anda ke Nuvio dengan addon yang Anda gunakan.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Tambahkan addon untuk mulai membangun pustaka Anda.</string>
|
||||
<string name="addons_appstore_empty_title">Jadikan Nuvio milik Anda.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL Addon</string>
|
||||
<string name="addons_appstore_install_button">Tambah Addon</string>
|
||||
<string name="store_empty_unavailable_title">Belum ada apa pun di sini</string>
|
||||
<string name="store_empty_unavailable_message">Addon yang Anda gunakan belum memiliki apa pun untuk ditampilkan di sini.</string>
|
||||
<string name="addons_empty_subtitle">Tambahkan URL manifes untuk mulai memuat katalog, metadata, streaming, atau subtitle ke Nuvio.</string>
|
||||
<string name="addons_empty_title">Belum ada addon yang terpasang.</string>
|
||||
<string name="addons_error_enter_url">Masukkan URL addon.</string>
|
||||
|
|
@ -412,7 +419,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Unduh versi terbaru</string>
|
||||
<string name="compose_settings_root_check_updates_title">Periksa pembaruan</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Kelola addon dan sumber penemuan.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Kelola addon dan pilih apa yang tampil di Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Kelola film dan episode yang telah diunduh.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Kelola yang Anda simpan di perangkat ini.</string>
|
||||
<string name="compose_settings_root_downloads_title">Unduhan</string>
|
||||
<string name="compose_settings_root_general_section">UMUM</string>
|
||||
<string name="compose_settings_root_integrations_description">Kelola integrasi yang tersedia</string>
|
||||
|
|
@ -597,6 +606,7 @@
|
|||
<string name="settings_content_discovery_section_home">BERANDA</string>
|
||||
<string name="settings_content_discovery_section_sources">SUMBER</string>
|
||||
<string name="settings_content_discovery_addons_description">Pasang, hapus, perbarui, dan urutkan sumber konten Anda.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Tambahkan dan kelola addon yang Anda gunakan dengan Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Pasang repositori scraper JavaScript dan uji penyedia secara internal.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Sesuaikan tata letak beranda, visibilitas konten, dan poster</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Pengaturan untuk layar detail dan episode.</string>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@
|
|||
<string name="addons_badge_unavailable">Tidak Tersedia</string>
|
||||
<string name="addons_configure">Konfigurasi addon</string>
|
||||
<string name="addons_delete">Hapus addon</string>
|
||||
<string name="addons_appstore_add_description">Bawa pustaka Anda ke Nuvio dengan addon yang Anda gunakan.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Tambahkan addon untuk mulai membangun pustaka Anda.</string>
|
||||
<string name="addons_appstore_empty_title">Jadikan Nuvio milik Anda.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL Addon</string>
|
||||
<string name="addons_appstore_install_button">Tambah Addon</string>
|
||||
<string name="store_empty_unavailable_title">Belum ada apa pun di sini</string>
|
||||
<string name="store_empty_unavailable_message">Addon yang Anda gunakan belum memiliki apa pun untuk ditampilkan di sini.</string>
|
||||
<string name="addons_empty_subtitle">Tambahkan URL manifes untuk mulai memuat katalog, metadata, streaming, atau subtitle ke Nuvio.</string>
|
||||
<string name="addons_empty_title">Belum ada addon yang terpasang.</string>
|
||||
<string name="addons_error_enter_url">Masukkan URL addon.</string>
|
||||
|
|
@ -412,7 +419,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Unduh versi terbaru</string>
|
||||
<string name="compose_settings_root_check_updates_title">Periksa pembaruan</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Kelola addon dan sumber penemuan.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Kelola addon dan pilih apa yang tampil di Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Kelola film dan episode yang telah diunduh.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Kelola yang Anda simpan di perangkat ini.</string>
|
||||
<string name="compose_settings_root_downloads_title">Unduhan</string>
|
||||
<string name="compose_settings_root_general_section">UMUM</string>
|
||||
<string name="compose_settings_root_integrations_description">Kelola integrasi yang tersedia</string>
|
||||
|
|
@ -597,6 +606,7 @@
|
|||
<string name="settings_content_discovery_section_home">BERANDA</string>
|
||||
<string name="settings_content_discovery_section_sources">SUMBER</string>
|
||||
<string name="settings_content_discovery_addons_description">Pasang, hapus, perbarui, dan urutkan sumber konten Anda.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Tambahkan dan kelola addon yang Anda gunakan dengan Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Pasang repositori scraper JavaScript dan uji penyedia secara internal.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Sesuaikan tata letak beranda, visibilitas konten, dan poster</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Pengaturan untuk layar detail dan episode.</string>
|
||||
|
|
|
|||
|
|
@ -27,6 +27,13 @@
|
|||
<string name="addons_badge_unavailable">Non Disponibile</string>
|
||||
<string name="addons_configure">Configura addon</string>
|
||||
<string name="addons_delete">Cancella addon</string>
|
||||
<string name="addons_appstore_add_description">Porta la tua libreria su Nuvio con gli addon che usi.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Aggiungi un addon per iniziare a creare la tua libreria.</string>
|
||||
<string name="addons_appstore_empty_title">Fai tuo Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL addon</string>
|
||||
<string name="addons_appstore_install_button">Aggiungi addon</string>
|
||||
<string name="store_empty_unavailable_title">Non c’è ancora niente qui</string>
|
||||
<string name="store_empty_unavailable_message">Gli addon che usi non hanno ancora nulla da mostrare qui.</string>
|
||||
<string name="addons_empty_subtitle">Aggiungi un manifest URL per iniziare a caricare cataloghi , metadata, flussi o sottotitoli dentro Nuvio.</string>
|
||||
<string name="addons_empty_title">Nessun addon installato ancora.</string>
|
||||
<string name="addons_error_enter_url">Inserisci l'URL dell'addon.</string>
|
||||
|
|
@ -245,7 +252,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Controlla se ci sono nuove versioni dell'app.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Verifica aggiornamenti</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Gestisci gli addon e le sorgenti di scoperta.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Gestisci gli addon e scegli cosa mostrare in Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Gestisci i film e gli episodi scaricati.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Gestisci ciò che hai salvato su questo dispositivo.</string>
|
||||
<string name="compose_settings_root_downloads_title">Download</string>
|
||||
<string name="compose_settings_root_general_section">GENERALI</string>
|
||||
<string name="compose_settings_root_integrations_description">Collega i servizi TMDB e MDBList.</string>
|
||||
|
|
@ -382,6 +391,7 @@
|
|||
<string name="settings_content_discovery_section_home">HOME</string>
|
||||
<string name="settings_content_discovery_section_sources">SORGENTI</string>
|
||||
<string name="settings_content_discovery_addons_description">Installa, rimuovi, aggiorna e ordina le tue sorgenti di contenuto.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Aggiungi e gestisci gli addon che usi con Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Installa repository di scraper JavaScript e testa i provider internamente.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Controlla quali cataloghi appaiono in Home e in quale ordine.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Disabilita le sezioni dei dettagli e riordina tutto ciò che sta sotto l'elemento Hero.</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">利用不可</string>
|
||||
<string name="addons_configure">アドオンを設定</string>
|
||||
<string name="addons_delete">アドオンを削除</string>
|
||||
<string name="addons_appstore_add_description">独自のメディアサーバーを接続して、個人ライブラリを参照・再生します。</string>
|
||||
<string name="addons_appstore_empty_subtitle">Nuvioに個人ライブラリを表示させたい場合は、上にサーバーURLを追加してください。</string>
|
||||
<string name="addons_appstore_empty_title">接続された個人ライブラリはありません。</string>
|
||||
<string name="addons_appstore_input_placeholder">サーバーURL</string>
|
||||
<string name="addons_appstore_install_button">追加</string>
|
||||
<string name="addons_appstore_add_description">いつものアドオンで、ライブラリをNuvioにまとめましょう。</string>
|
||||
<string name="addons_appstore_empty_subtitle">アドオンを追加して、ライブラリを作り始めましょう。</string>
|
||||
<string name="addons_appstore_empty_title">Nuvioを自分好みに。</string>
|
||||
<string name="addons_appstore_input_placeholder">アドオンURL</string>
|
||||
<string name="addons_appstore_install_button">アドオンを追加</string>
|
||||
<string name="store_empty_unavailable_title">まだ何もありません</string>
|
||||
<string name="store_empty_unavailable_message">現在のアドオンには、ここに表示できるものがまだありません。</string>
|
||||
<string name="addons_empty_subtitle">マニフェストURLを追加して、カタログ・メタデータ・ストリーム・字幕をNuvioに読み込みましょう。</string>
|
||||
<string name="addons_empty_title">アドオンがありません</string>
|
||||
<string name="addons_error_enter_url">アドオンのURLを入力してください。</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">最新リリースをダウンロード</string>
|
||||
<string name="compose_settings_root_check_updates_title">アップデートを確認</string>
|
||||
<string name="compose_settings_root_content_discovery_description">アドオンと探索ソースを管理</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">アドオンを管理して、Nuvioに表示する内容を選べます。</string>
|
||||
<string name="compose_settings_root_downloads_description">ダウンロードした映画とエピソードを管理</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">このデバイスに保存した項目を管理します。</string>
|
||||
<string name="compose_settings_root_downloads_title">ダウンロード</string>
|
||||
<string name="compose_settings_root_general_section">一般</string>
|
||||
<string name="compose_settings_root_integrations_description">利用可能な連携を管理</string>
|
||||
|
|
@ -638,7 +642,7 @@
|
|||
<string name="settings_content_discovery_section_home">ホーム</string>
|
||||
<string name="settings_content_discovery_section_sources">ソース</string>
|
||||
<string name="settings_content_discovery_addons_description">コンテンツソースのインストール・削除・更新・並べ替え</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">個人メディアソースを接続し、自分専用ライブラリへのアクセスを管理します。</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Nuvioで使うアドオンを追加・管理します。</string>
|
||||
<string name="settings_content_discovery_plugins_description">JavaScriptスクレイパーリポジトリのインストールと内部テスト</string>
|
||||
<string name="settings_content_discovery_homescreen_description">ホームレイアウト・コンテンツ表示・ポスターの動作を調整</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">詳細画面とエピソード画面の設定</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,13 @@
|
|||
<string name="addons_badge_unavailable">Utilgjengelig</string>
|
||||
<string name="addons_configure">Konfigurer tillegg</string>
|
||||
<string name="addons_delete">Slett tillegg</string>
|
||||
<string name="addons_appstore_add_description">Ta med biblioteket ditt til Nuvio med tilleggene du bruker.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Legg til et tillegg for å begynne å bygge biblioteket ditt.</string>
|
||||
<string name="addons_appstore_empty_title">Gjør Nuvio til ditt.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL til tillegg</string>
|
||||
<string name="addons_appstore_install_button">Legg til tillegg</string>
|
||||
<string name="store_empty_unavailable_title">Det er ingenting her ennå</string>
|
||||
<string name="store_empty_unavailable_message">Tilleggene du bruker, har ingenting å vise her ennå.</string>
|
||||
<string name="addons_empty_subtitle">Legg til en manifest-URL for å starte lasting av kataloger, metadata, strømmer eller undertekster i Nuvio.</string>
|
||||
<string name="addons_empty_title">Ingen tillegg installert ennå.</string>
|
||||
<string name="addons_error_enter_url">Skriv inn en tilleggs-URL.</string>
|
||||
|
|
@ -400,7 +407,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Last ned nyeste versjon</string>
|
||||
<string name="compose_settings_root_check_updates_title">Se etter oppdateringer</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Administrer tillegg og oppdagelseskilder.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Administrer tillegg og velg hva som vises i Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Administrer nedlastede filmer og episoder.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Administrer det du har lagret på denne enheten.</string>
|
||||
<string name="compose_settings_root_downloads_title">Nedlastinger</string>
|
||||
<string name="compose_settings_root_general_section">GENERELT</string>
|
||||
<string name="compose_settings_root_integrations_description">Administrer tilgjengelige integrasjoner</string>
|
||||
|
|
@ -581,6 +590,7 @@
|
|||
<string name="settings_content_discovery_section_home">HJEM</string>
|
||||
<string name="settings_content_discovery_section_sources">KILDER</string>
|
||||
<string name="settings_content_discovery_addons_description">Installer, fjern, oppdater og sorter innholdskilder.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Legg til og administrer tilleggene du bruker med Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Installer JavaScript-scraper-repositories og test providere internt.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Juster hjemmeoppsett, synlighet og plakat-oppførsel.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Innstillinger for detalj- og episodeskjermer.</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">Niet beschikbaar</string>
|
||||
<string name="addons_configure">Addon configureren</string>
|
||||
<string name="addons_delete">Addon verwijderen</string>
|
||||
<string name="addons_appstore_add_description">Verbind je eigen mediaserver om je persoonlijke bibliotheek te bekijken en af te spelen.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Voeg hierboven een server-URL toe als je wilt dat Nuvio je privébibliotheek toont.</string>
|
||||
<string name="addons_appstore_empty_title">Geen persoonlijke bibliotheken verbonden.</string>
|
||||
<string name="addons_appstore_input_placeholder">Server-URL</string>
|
||||
<string name="addons_appstore_install_button">Toevoegen</string>
|
||||
<string name="addons_appstore_add_description">Breng je bibliotheek naar Nuvio met de add-ons die je gebruikt.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Voeg een add-on toe om je bibliotheek op te bouwen.</string>
|
||||
<string name="addons_appstore_empty_title">Maak Nuvio helemaal van jou.</string>
|
||||
<string name="addons_appstore_input_placeholder">Add-on-URL</string>
|
||||
<string name="addons_appstore_install_button">Add-on toevoegen</string>
|
||||
<string name="store_empty_unavailable_title">Hier is nog niets</string>
|
||||
<string name="store_empty_unavailable_message">Je huidige add-ons hebben hier nog niets om te tonen.</string>
|
||||
<string name="addons_empty_subtitle">Voeg een manifest-URL toe om catalogi, metadata, streams of ondertitels in Nuvio te laden.</string>
|
||||
<string name="addons_empty_title">Nog geen addons geïnstalleerd.</string>
|
||||
<string name="addons_error_enter_url">Voer een addon-URL in.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Download de laatste versie</string>
|
||||
<string name="compose_settings_root_check_updates_title">Controleren op updates</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Beheer addons en ontdekkingsbronnen.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Beheer add-ons en kies wat er in Nuvio verschijnt.</string>
|
||||
<string name="compose_settings_root_downloads_description">Beheer je gedownloade films en afleveringen.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Beheer wat je op dit apparaat hebt opgeslagen.</string>
|
||||
<string name="compose_settings_root_downloads_title">Downloads</string>
|
||||
<string name="compose_settings_root_general_section">ALGEMEEN</string>
|
||||
<string name="compose_settings_root_integrations_description">Beheer beschikbare integraties</string>
|
||||
|
|
@ -656,7 +660,7 @@
|
|||
<string name="settings_content_discovery_section_home">HOME</string>
|
||||
<string name="settings_content_discovery_section_sources">BRONNEN</string>
|
||||
<string name="settings_content_discovery_addons_description">Installeer, verwijder, vernieuw en sorteer je contentbronnen.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Verbind persoonlijke mediabronnen en beheer toegang tot je eigen bibliotheek.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Voeg de add-ons toe die je met Nuvio gebruikt en beheer ze.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Installeer JavaScript-scraperrepository's en test providers intern.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Pas startschermindeling, zichtbaarheid van inhoud en postergedrag aan</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Instellingen voor de detail- en afleveringsschermen.</string>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@
|
|||
<string name="addons_badge_unavailable">Niedostępny</string>
|
||||
<string name="addons_configure">Konfiguruj dodatek</string>
|
||||
<string name="addons_delete">Usuń dodatek</string>
|
||||
<string name="addons_appstore_add_description">Przenieś swoją bibliotekę do Nuvio za pomocą używanych dodatków.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Dodaj dodatek, aby zacząć tworzyć swoją bibliotekę.</string>
|
||||
<string name="addons_appstore_empty_title">Dostosuj Nuvio do siebie.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL dodatku</string>
|
||||
<string name="addons_appstore_install_button">Dodaj dodatek</string>
|
||||
<string name="store_empty_unavailable_title">Na razie nic tu nie ma</string>
|
||||
<string name="store_empty_unavailable_message">Używane dodatki nie mają jeszcze nic do wyświetlenia.</string>
|
||||
<string name="addons_empty_subtitle">Dodaj URL manifestu, aby zacząć ładować katalogi, metadane, strumienie lub napisy do Nuvio.</string>
|
||||
<string name="addons_empty_title">Brak zainstalowanych dodatków.</string>
|
||||
<string name="addons_error_enter_url">Wprowadź URL dodatku.</string>
|
||||
|
|
@ -412,7 +419,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Sprawdź dostępność nowych wersji aplikacji.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Sprawdź aktualizacje</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Zarządzaj dodatkami i źródłami odkrywania.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Zarządzaj dodatkami i wybierz, co ma być widoczne w Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Zarządzaj pobranymi filmami i odcinkami.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Zarządzaj zawartością zapisaną na tym urządzeniu.</string>
|
||||
<string name="compose_settings_root_downloads_title">Pobrane</string>
|
||||
<string name="compose_settings_root_general_section">OGÓLNE</string>
|
||||
<string name="compose_settings_root_integrations_description">Połącz usługi TMDB i MDBList.</string>
|
||||
|
|
@ -597,6 +606,7 @@
|
|||
<string name="settings_content_discovery_section_home">EKRAN GŁÓWNY</string>
|
||||
<string name="settings_content_discovery_section_sources">ŹRÓDŁA</string>
|
||||
<string name="settings_content_discovery_addons_description">Instaluj, usuwaj, odświeżaj i sortuj źródła treści.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Dodawaj używane w Nuvio dodatki i zarządzaj nimi.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instaluj repozytoria scraperów JavaScript i testuj dostawców wewnętrznie.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Kontroluj, które katalogi pojawiają się na ekranie głównym i w jakiej kolejności.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Wyłącz sekcje szczegółów i zmień kolejność wszystkiego poniżej Hero.</string>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,13 @@
|
|||
<string name="addons_badge_unavailable">Indisponível</string>
|
||||
<string name="addons_configure">Configurar addon</string>
|
||||
<string name="addons_delete">Excluir addon</string>
|
||||
<string name="addons_appstore_add_description">Leve sua biblioteca para o Nuvio com os addons que você usa.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adicione um addon para começar a montar sua biblioteca.</string>
|
||||
<string name="addons_appstore_empty_title">Deixe o Nuvio do seu jeito.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL do addon</string>
|
||||
<string name="addons_appstore_install_button">Adicionar addon</string>
|
||||
<string name="store_empty_unavailable_title">Ainda não há nada aqui</string>
|
||||
<string name="store_empty_unavailable_message">Os addons que você usa ainda não têm nada para mostrar aqui.</string>
|
||||
<string name="addons_empty_subtitle">Adicione uma URL de manifesto para começar a carregar catálogos, metadados, streams ou legendas no Nuvio.</string>
|
||||
<string name="addons_empty_title">Nenhum addon instalado ainda.</string>
|
||||
<string name="addons_error_enter_url">Insira uma URL de addon.</string>
|
||||
|
|
@ -401,7 +408,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Baixar a versão mais recente</string>
|
||||
<string name="compose_settings_root_check_updates_title">Verificar atualizações</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Gerenciar addons e fontes de descoberta.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Gerencie addons e escolha o que aparece no Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Gerencie seus filmes e episódios baixados.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Gerencie o que você salvou neste dispositivo.</string>
|
||||
<string name="compose_settings_root_downloads_title">Downloads</string>
|
||||
<string name="compose_settings_root_general_section">GERAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Gerenciar integrações disponíveis</string>
|
||||
|
|
@ -582,6 +591,7 @@
|
|||
<string name="settings_content_discovery_section_home">PÁGINA INICIAL</string>
|
||||
<string name="settings_content_discovery_section_sources">FONTES</string>
|
||||
<string name="settings_content_discovery_addons_description">Instale, remova, atualize e ordene suas fontes de conteúdo.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Adicione e gerencie os addons que você usa com o Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instale repositórios de scraper JavaScript e teste provedores internamente.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Ajuste layout da página inicial, visibilidade de conteúdo e comportamento de pôsteres</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Configurações para as telas de detalhes e episódios.</string>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@
|
|||
<string name="addons_badge_unavailable">Indisponível</string>
|
||||
<string name="addons_configure">Configurar addon</string>
|
||||
<string name="addons_delete">Eliminar addon</string>
|
||||
<string name="addons_appstore_add_description">Leva a tua biblioteca para o Nuvio com os addons que usas.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adiciona um addon para começares a criar a tua biblioteca.</string>
|
||||
<string name="addons_appstore_empty_title">Deixa o Nuvio à tua maneira.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL do addon</string>
|
||||
<string name="addons_appstore_install_button">Adicionar addon</string>
|
||||
<string name="store_empty_unavailable_title">Ainda não há nada aqui</string>
|
||||
<string name="store_empty_unavailable_message">Os addons que usas ainda não têm nada para mostrar aqui.</string>
|
||||
<string name="addons_empty_subtitle">Adiciona um URL de manifesto para começares a carregar catálogos, metadados, streams ou legendas no Nuvio.</string>
|
||||
<string name="addons_empty_title">Ainda não tens addons instalados.</string>
|
||||
<string name="addons_error_enter_url">Introduz o URL de um addon.</string>
|
||||
|
|
@ -432,7 +439,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Transferir a versão mais recente</string>
|
||||
<string name="compose_settings_root_check_updates_title">Procurar atualizações</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Gere addons e fontes de descoberta.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Gere os addons e escolhe o que aparece no Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Gere os teus filmes e episódios transferidos.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Gere o que guardaste neste dispositivo.</string>
|
||||
<string name="compose_settings_root_downloads_title">Transferências</string>
|
||||
<string name="compose_settings_root_general_section">GERAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Gere as integrações disponíveis</string>
|
||||
|
|
@ -627,6 +636,7 @@
|
|||
<string name="settings_content_discovery_section_home">PÁGINA INICIAL</string>
|
||||
<string name="settings_content_discovery_section_sources">FONTES</string>
|
||||
<string name="settings_content_discovery_addons_description">Instala, remove, atualiza e ordena as tuas fontes de conteúdo.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Adiciona e gere os addons que usas com o Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instala repositórios de scrapers JavaScript e testa fornecedores internamente.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Ajusta o esquema da página inicial, a visibilidade do conteúdo e o comportamento dos cartazes.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Definições para as páginas de detalhes e de episódios.</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">Indisponibil</string>
|
||||
<string name="addons_configure">Configurează extensia</string>
|
||||
<string name="addons_delete">Șterge extensia</string>
|
||||
<string name="addons_appstore_add_description">Conectează-ți propriul server media pentru a naviga și a reda din biblioteca personală.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adaugă un URL de server mai sus când vrei ca Nuvio să îți afișeze biblioteca privată.</string>
|
||||
<string name="addons_appstore_empty_title">Nicio bibliotecă personală conectată.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL Server</string>
|
||||
<string name="addons_appstore_install_button">Adaugă</string>
|
||||
<string name="addons_appstore_add_description">Folosește extensiile preferate pentru a-ți aduce biblioteca în Nuvio.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Adaugă o extensie pentru a începe să-ți construiești biblioteca.</string>
|
||||
<string name="addons_appstore_empty_title">Personalizează Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL extensie</string>
|
||||
<string name="addons_appstore_install_button">Adaugă extensie</string>
|
||||
<string name="store_empty_unavailable_title">Nu este nimic aici încă</string>
|
||||
<string name="store_empty_unavailable_message">Extensiile pe care le folosești nu au încă nimic de afișat aici.</string>
|
||||
<string name="addons_empty_subtitle">Adaugă un URL de manifest pentru a începe încărcarea de cataloage, metadate, fluxuri sau subtitrări în Nuvio.</string>
|
||||
<string name="addons_empty_title">Nu există extensii instalate încă.</string>
|
||||
<string name="addons_error_enter_url">Introdu un URL pentru extensie.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Descarcă cea mai recentă versiune</string>
|
||||
<string name="compose_settings_root_check_updates_title">Caută actualizări</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Gestionează extensiile și sursele de descoperire.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Gestionează extensiile și alege ce apare în Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Gestionează filmele și episoadele descărcate.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Gestionează ce ai salvat pe acest dispozitiv.</string>
|
||||
<string name="compose_settings_root_downloads_title">Descărcări</string>
|
||||
<string name="compose_settings_root_general_section">GENERAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Gestionează integrările disponibile</string>
|
||||
|
|
@ -656,7 +660,7 @@
|
|||
<string name="settings_content_discovery_section_home">ECRAN PRINCIPAL</string>
|
||||
<string name="settings_content_discovery_section_sources">SURSE</string>
|
||||
<string name="settings_content_discovery_addons_description">Instalează, elimină, reîmprospătează și sortează sursele de conținut.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Conectează surse media personale și gestionează accesul la propria bibliotecă.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Adaugă și gestionează extensiile pe care le folosești cu Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Instalează depozite de scraper JavaScript și testează furnizorii intern.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Ajustează aspectul ecranului principal, vizibilitatea conținutului și comportamentul posterului</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Setări pentru ecranele de detalii și de episoade.</string>
|
||||
|
|
@ -1932,4 +1936,4 @@
|
|||
<item quantity="one">%d titlu</item>
|
||||
<item quantity="other">%d titluri</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -434,7 +434,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Stiahnuť najnovšie vydanie</string>
|
||||
<string name="compose_settings_root_check_updates_title">Skontrolovať aktualizácie</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Spravovať doplnky a zdroje objavovania.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Spravujte doplnky a vyberte, čo sa má zobrazovať v Nuviu.</string>
|
||||
<string name="compose_settings_root_downloads_description">Spravovať stiahnuté filmy a epizódy.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Spravujte obsah uložený v tomto zariadení.</string>
|
||||
<string name="compose_settings_root_downloads_title">Stiahnuté</string>
|
||||
<string name="compose_settings_root_general_section">VŠEOBECNÉ</string>
|
||||
<string name="compose_settings_root_integrations_description">Spravovať dostupné integrácie</string>
|
||||
|
|
@ -1898,15 +1900,17 @@
|
|||
<string name="player_error_torrent">Chyba torrentu: %1$s</string>
|
||||
<!-- Current cmp-rewrite string additions -->
|
||||
<string name="action_switch">Prepnúť</string>
|
||||
<string name="addons_appstore_add_description">Pripojte vlastný mediálny server na prehliadanie a prehrávanie z vašej osobnej knižnice.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Pridajte URL servera vyššie, ak chcete, aby Nuvio zobrazovalo vašu súkromnú knižnicu.</string>
|
||||
<string name="addons_appstore_empty_title">Nie sú pripojené žiadne osobné knižnice.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL servera</string>
|
||||
<string name="addons_appstore_install_button">Pridať</string>
|
||||
<string name="addons_appstore_add_description">Preneste svoju knižnicu do Nuvia pomocou doplnkov, ktoré používate.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Pridajte doplnok a začnite si vytvárať knižnicu.</string>
|
||||
<string name="addons_appstore_empty_title">Prispôsobte si Nuvio.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL doplnku</string>
|
||||
<string name="addons_appstore_install_button">Pridať doplnok</string>
|
||||
<string name="store_empty_unavailable_title">Zatiaľ tu nič nie je</string>
|
||||
<string name="store_empty_unavailable_message">Doplnky, ktoré používate, tu zatiaľ nemajú čo zobraziť.</string>
|
||||
<string name="compose_auth_terms_prefix">Registráciou súhlasím s</string>
|
||||
<string name="compose_auth_terms_link">Podmienkami</string>
|
||||
<string name="settings_appearance_app_language_device">Jazyk zariadenia</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Pripojte osobné mediálne zdroje a spravujte prístup k vlastnej knižnici.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Pridávajte a spravujte doplnky, ktoré používate s Nuviom.</string>
|
||||
<string name="settings_playback_external_player_send_skip_segments">Odosielať časové značky intra a outra</string>
|
||||
<string name="settings_playback_external_player_send_skip_segments_description">Odovzdať vyriešené časové značky intra a outra externému prehrávaču na automatické preskakovanie. Funguje iba v prehrávačoch, ktoré to podporujú; ostatné prehrávače to ignorujú.</string>
|
||||
<string name="settings_playback_option_original">Pôvodný jazyk</string>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@
|
|||
<string name="addons_badge_unavailable">Kullanılamıyor</string>
|
||||
<string name="addons_configure">Eklentiyi ayarla</string>
|
||||
<string name="addons_delete">Eklentiyi sil</string>
|
||||
<string name="addons_appstore_add_description">Kullandığın eklentilerle kitaplığını Nuvio'ya taşı.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Kitaplığını oluşturmaya başlamak için bir eklenti ekle.</string>
|
||||
<string name="addons_appstore_empty_title">Nuvio'yu kendine göre ayarla.</string>
|
||||
<string name="addons_appstore_input_placeholder">Eklenti URL'si</string>
|
||||
<string name="addons_appstore_install_button">Eklenti ekle</string>
|
||||
<string name="store_empty_unavailable_title">Burada henüz bir şey yok</string>
|
||||
<string name="store_empty_unavailable_message">Kullandığın eklentilerin burada gösterecek bir şeyi yok.</string>
|
||||
<string name="addons_empty_subtitle">Nuvio'ya katalog, meta veri, yayın veya altyazı yüklemeye başlamak için bir manifest URL'si ekle.</string>
|
||||
<string name="addons_empty_title">Henüz eklenti kurulmamış.</string>
|
||||
<string name="addons_error_enter_url">Bir eklenti URL'si gir.</string>
|
||||
|
|
@ -402,7 +409,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Uygulamanın yeni sürümü var mı kontrol et.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Güncellemeleri kontrol et</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Eklentileri ve keşif kaynaklarını yönet.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Eklentileri yönet ve Nuvio’da nelerin görüneceğini seç.</string>
|
||||
<string name="compose_settings_root_downloads_description">İndirdiğin film ve bölümleri yönet.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Bu cihaza kaydettiklerini yönet.</string>
|
||||
<string name="compose_settings_root_downloads_title">İndirilenler</string>
|
||||
<string name="compose_settings_root_general_section">GENEL</string>
|
||||
<string name="compose_settings_root_integrations_description">TMDB ve MDBList servislerini bağla.</string>
|
||||
|
|
@ -587,6 +596,7 @@
|
|||
<string name="settings_content_discovery_section_home">ANA SAYFA</string>
|
||||
<string name="settings_content_discovery_section_sources">KAYNAKLAR</string>
|
||||
<string name="settings_content_discovery_addons_description">İçerik kaynaklarını kur, kaldır, yenile ve sırala.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Nuvio ile kullandığın eklentileri ekle ve yönet.</string>
|
||||
<string name="settings_content_discovery_plugins_description">JavaScript scraper depoları kur ve sağlayıcıları içeriden test et.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Ana sayfada hangi katalogların hangi sırayla görüneceğini kontrol et.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Detay bölümlerini kapat ve öne çıkanların altındaki her şeyi yeniden sırala.</string>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">Không khả dụng</string>
|
||||
<string name="addons_configure">Cấu hình addon</string>
|
||||
<string name="addons_delete">Xóa addon</string>
|
||||
<string name="addons_appstore_add_description">Kết nối máy chủ nội dung của bạn để duyệt và phát thư viện cá nhân.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Thêm URL máy chủ ở trên để Nuvio hiển thị thư viện riêng của bạn.</string>
|
||||
<string name="addons_appstore_empty_title">Chưa kết nối thư viện cá nhân.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL máy chủ</string>
|
||||
<string name="addons_appstore_install_button">Thêm</string>
|
||||
<string name="addons_appstore_add_description">Đưa thư viện của bạn vào Nuvio với các addon bạn sử dụng.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Thêm một addon để bắt đầu xây dựng thư viện của bạn.</string>
|
||||
<string name="addons_appstore_empty_title">Tùy chỉnh Nuvio theo cách của bạn.</string>
|
||||
<string name="addons_appstore_input_placeholder">URL addon</string>
|
||||
<string name="addons_appstore_install_button">Thêm addon</string>
|
||||
<string name="store_empty_unavailable_title">Chưa có nội dung nào ở đây</string>
|
||||
<string name="store_empty_unavailable_message">Các addon bạn đang dùng chưa có nội dung để hiển thị ở đây.</string>
|
||||
<string name="addons_empty_subtitle">Thêm URL manifest để tải danh mục, thông tin, nguồn phát hoặc phụ đề vào Nuvio.</string>
|
||||
<string name="addons_empty_title">Chưa cài addon nào.</string>
|
||||
<string name="addons_error_enter_url">Nhập URL addon.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Tải phiên bản mới nhất.</string>
|
||||
<string name="compose_settings_root_check_updates_title">Kiểm tra cập nhật</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Quản lý addon và các nguồn khám phá nội dung.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Quản lý addon và chọn nội dung hiển thị trong Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Quản lý phim và tập đã tải xuống.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Quản lý nội dung bạn đã lưu trên thiết bị này.</string>
|
||||
<string name="compose_settings_root_downloads_title">Tải xuống</string>
|
||||
<string name="compose_settings_root_general_section">CHUNG</string>
|
||||
<string name="compose_settings_root_integrations_description">Quản lý các dịch vụ tích hợp.</string>
|
||||
|
|
@ -641,7 +645,7 @@
|
|||
<string name="settings_content_discovery_section_home">TRANG CHỦ</string>
|
||||
<string name="settings_content_discovery_section_sources">NGUỒN</string>
|
||||
<string name="settings_content_discovery_addons_description">Cài đặt, xóa, làm mới và sắp xếp các nguồn nội dung.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Kết nối nguồn nội dung cá nhân và quản lý thư viện riêng của bạn.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Thêm và quản lý các addon bạn sử dụng với Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Cài đặt kho Plugin JavaScript và thử nghiệm các dịch vụ nội bộ.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Điều chỉnh bố cục Trang chủ, khả năng hiển thị nội dung và cách hiển thị poster.</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Thiết lập cho trang chi tiết và danh sách tập.</string>
|
||||
|
|
@ -1924,4 +1928,4 @@
|
|||
<string name="player_torrent_starting_engine">Đang khởi động Engine P2P…</string>
|
||||
<string name="player_error_failed_start_torrent">Không thể khởi động torrent: %1$s</string>
|
||||
<string name="player_error_torrent">Lỗi torrent: %1$s</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@
|
|||
<string name="addons_badge_unavailable">Unavailable</string>
|
||||
<string name="addons_configure">Configure addon</string>
|
||||
<string name="addons_delete">Delete addon</string>
|
||||
<string name="addons_appstore_add_description">Connect your own media server to browse and play from your personal library.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Add a server URL above when you want Nuvio to show your private library.</string>
|
||||
<string name="addons_appstore_empty_title">No personal libraries connected.</string>
|
||||
<string name="addons_appstore_input_placeholder">Server URL</string>
|
||||
<string name="addons_appstore_install_button">Add</string>
|
||||
<string name="addons_appstore_add_description">Bring your library into Nuvio with the addons you use.</string>
|
||||
<string name="addons_appstore_empty_subtitle">Add an addon to start building your library.</string>
|
||||
<string name="addons_appstore_empty_title">Make Nuvio yours.</string>
|
||||
<string name="addons_appstore_input_placeholder">Addon URL</string>
|
||||
<string name="addons_appstore_install_button">Add Addon</string>
|
||||
<string name="store_empty_unavailable_title">Nothing here yet</string>
|
||||
<string name="store_empty_unavailable_message">Your current addons don’t have anything to show here.</string>
|
||||
<string name="addons_empty_subtitle">Add a manifest URL to start loading catalogs, metadata, streams or subtitles into Nuvio.</string>
|
||||
<string name="addons_empty_title">No addons installed yet.</string>
|
||||
<string name="addons_error_enter_url">Enter an addon URL.</string>
|
||||
|
|
@ -442,7 +444,9 @@
|
|||
<string name="compose_settings_root_check_updates_description">Download latest release</string>
|
||||
<string name="compose_settings_root_check_updates_title">Check for updates</string>
|
||||
<string name="compose_settings_root_content_discovery_description">Manage addons and discovery sources.</string>
|
||||
<string name="compose_settings_root_content_discovery_description_appstore">Manage addons and choose what appears in Nuvio.</string>
|
||||
<string name="compose_settings_root_downloads_description">Manage your downloaded movies and episodes.</string>
|
||||
<string name="compose_settings_root_downloads_description_appstore">Manage what you’ve saved on this device.</string>
|
||||
<string name="compose_settings_root_downloads_title">Downloads</string>
|
||||
<string name="compose_settings_root_general_section">GENERAL</string>
|
||||
<string name="compose_settings_root_integrations_description">Manage available integrations</string>
|
||||
|
|
@ -687,7 +691,7 @@
|
|||
<string name="settings_content_discovery_section_home">HOME</string>
|
||||
<string name="settings_content_discovery_section_sources">SOURCES</string>
|
||||
<string name="settings_content_discovery_addons_description">Install, remove, refresh, and sort your content sources.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Connect personal media sources and manage access to your own library.</string>
|
||||
<string name="settings_content_discovery_addons_description_appstore">Add and manage the addons you use with Nuvio.</string>
|
||||
<string name="settings_content_discovery_plugins_description">Install JavaScript scraper repositories and test providers internally.</string>
|
||||
<string name="settings_content_discovery_homescreen_description">Adjust home layout, content visibility, and poster behavior</string>
|
||||
<string name="settings_content_discovery_meta_screen_description">Settings for the detail and episode screens.</string>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ expect object AppFeaturePolicy {
|
|||
val pluginsEnabled: Boolean
|
||||
val supportersContributorsPageEnabled: Boolean
|
||||
val accountDeletionEnabled: Boolean
|
||||
val personalMediaAddonCopyEnabled: Boolean
|
||||
val storeNarrativeEnabled: Boolean
|
||||
val p2pEnabled: Boolean
|
||||
val trailerPlaybackMode: TrailerPlaybackMode
|
||||
val heroTrailerPlaybackSupported: Boolean
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
package com.nuvio.app.core.ui
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.SearchOff
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
|
||||
@Composable
|
||||
fun NuvioEmptyState(
|
||||
title: String,
|
||||
message: String? = null,
|
||||
modifier: Modifier = Modifier,
|
||||
icon: ImageVector = Icons.Rounded.SearchOff,
|
||||
iconPainter: Painter? = null,
|
||||
actionLabel: String? = null,
|
||||
onActionClick: (() -> Unit)? = null,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.padding(32.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically),
|
||||
) {
|
||||
if (iconPainter != null) {
|
||||
Icon(
|
||||
painter = iconPainter,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(48.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f),
|
||||
)
|
||||
} else {
|
||||
Icon(
|
||||
imageVector = icon,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(48.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f),
|
||||
)
|
||||
}
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.bodyLarge.copy(
|
||||
fontSize = 16.sp,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
),
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
if (!message.isNullOrBlank()) {
|
||||
Text(
|
||||
text = message,
|
||||
style = MaterialTheme.typography.bodySmall.copy(fontSize = 14.sp),
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
}
|
||||
if (actionLabel != null && onActionClick != null) {
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
NuvioPrimaryButton(
|
||||
text = actionLabel,
|
||||
onClick = onActionClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Row
|
|||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
|
|
@ -47,6 +48,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import coil3.compose.AsyncImage
|
||||
import com.nuvio.app.core.ui.NuvioIconActionButton
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
import com.nuvio.app.core.ui.NuvioInfoBadge
|
||||
import com.nuvio.app.core.ui.NuvioInputField
|
||||
import com.nuvio.app.core.ui.NuvioPrimaryButton
|
||||
|
|
@ -94,7 +96,7 @@ internal fun AddonsSettingsPageContent(
|
|||
var formMessage by rememberSaveable { mutableStateOf<String?>(null) }
|
||||
var installModalState by remember { mutableStateOf<AddonInstallModalState?>(null) }
|
||||
val enterAddonUrlMessage = stringResource(Res.string.addons_error_enter_url)
|
||||
val usePersonalMediaCopy = AppFeaturePolicy.personalMediaAddonCopyEnabled
|
||||
val useStoreNarrative = AppFeaturePolicy.storeNarrativeEnabled
|
||||
|
||||
val overview = remember(uiState.addons) { uiState.addons.toOverview() }
|
||||
|
||||
|
|
@ -109,7 +111,7 @@ internal fun AddonsSettingsPageContent(
|
|||
AddAddonCard(
|
||||
addonUrl = addonUrl,
|
||||
formMessage = formMessage,
|
||||
usePersonalMediaCopy = usePersonalMediaCopy,
|
||||
useStoreNarrative = useStoreNarrative,
|
||||
onAddonUrlChange = {
|
||||
addonUrl = it
|
||||
formMessage = null
|
||||
|
|
@ -141,7 +143,7 @@ internal fun AddonsSettingsPageContent(
|
|||
|
||||
SectionHeader(stringResource(Res.string.addons_section_installed))
|
||||
if (uiState.addons.isEmpty()) {
|
||||
EmptyStateCard(usePersonalMediaCopy = usePersonalMediaCopy)
|
||||
EmptyStateCard(useStoreNarrative = useStoreNarrative)
|
||||
} else {
|
||||
val lastIndex = uiState.addons.lastIndex
|
||||
uiState.addons.forEachIndexed { index, addon ->
|
||||
|
|
@ -286,7 +288,7 @@ private fun VerticalSeparator() {
|
|||
private fun AddAddonCard(
|
||||
addonUrl: String,
|
||||
formMessage: String?,
|
||||
usePersonalMediaCopy: Boolean,
|
||||
useStoreNarrative: Boolean,
|
||||
onAddonUrlChange: (String) -> Unit,
|
||||
onAddClick: () -> Unit,
|
||||
) {
|
||||
|
|
@ -294,27 +296,15 @@ private fun AddAddonCard(
|
|||
NuvioInputField(
|
||||
value = addonUrl,
|
||||
onValueChange = onAddonUrlChange,
|
||||
placeholder = stringResource(
|
||||
if (usePersonalMediaCopy) {
|
||||
Res.string.addons_appstore_input_placeholder
|
||||
} else {
|
||||
Res.string.addons_input_placeholder
|
||||
},
|
||||
),
|
||||
placeholder = stringResource(Res.string.addons_input_placeholder),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(18.dp))
|
||||
NuvioPrimaryButton(
|
||||
text = stringResource(
|
||||
if (usePersonalMediaCopy) {
|
||||
Res.string.addons_appstore_install_button
|
||||
} else {
|
||||
Res.string.addons_install_button
|
||||
},
|
||||
),
|
||||
text = stringResource(Res.string.addons_install_button),
|
||||
enabled = addonUrl.isNotBlank(),
|
||||
onClick = onAddClick,
|
||||
)
|
||||
if (usePersonalMediaCopy) {
|
||||
if (useStoreNarrative) {
|
||||
Spacer(modifier = Modifier.height(14.dp))
|
||||
Text(
|
||||
text = stringResource(Res.string.addons_appstore_add_description),
|
||||
|
|
@ -355,33 +345,26 @@ private sealed interface AddonInstallModalState {
|
|||
|
||||
@Composable
|
||||
private fun EmptyStateCard(
|
||||
usePersonalMediaCopy: Boolean,
|
||||
useStoreNarrative: Boolean,
|
||||
) {
|
||||
NuvioSurfaceCard {
|
||||
Text(
|
||||
text = stringResource(
|
||||
if (usePersonalMediaCopy) {
|
||||
Res.string.addons_appstore_empty_title
|
||||
} else {
|
||||
Res.string.addons_empty_title
|
||||
},
|
||||
),
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
if (usePersonalMediaCopy) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.addons_empty_subtitle
|
||||
},
|
||||
),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = Modifier.heightIn(min = 220.dp),
|
||||
icon = Icons.Rounded.Extension,
|
||||
title = stringResource(
|
||||
if (useStoreNarrative) {
|
||||
Res.string.addons_appstore_empty_title
|
||||
} else {
|
||||
Res.string.addons_empty_title
|
||||
},
|
||||
),
|
||||
message = stringResource(
|
||||
if (useStoreNarrative) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.addons_empty_subtitle
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.compose.foundation.lazy.grid.items
|
|||
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import com.nuvio.app.core.ui.NuvioLoadingIndicator
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
|
@ -162,6 +163,7 @@ fun CatalogScreen(
|
|||
.background(MaterialTheme.colorScheme.background),
|
||||
) {
|
||||
val columns = remember(maxWidth) { catalogGridColumnsForWidth(maxWidth) }
|
||||
val viewportHeight = maxHeight
|
||||
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
LazyVerticalGrid(
|
||||
|
|
@ -184,6 +186,9 @@ fun CatalogScreen(
|
|||
} else if (uiState.items.isEmpty()) {
|
||||
item(span = { GridItemSpan(maxLineSpan) }) {
|
||||
CatalogEmptyState(
|
||||
modifier = Modifier.height(
|
||||
(viewportHeight - 120.dp).coerceAtLeast(280.dp),
|
||||
),
|
||||
errorMessage = uiState.errorMessage,
|
||||
networkCondition = networkStatusUiState.condition,
|
||||
onRetry = {
|
||||
|
|
@ -361,6 +366,7 @@ private fun CatalogEmptyState(
|
|||
errorMessage: String?,
|
||||
networkCondition: NetworkCondition,
|
||||
onRetry: (() -> Unit)? = null,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
if (networkCondition == NetworkCondition.NoInternet || networkCondition == NetworkCondition.ServersUnreachable) {
|
||||
NuvioNetworkOfflineCard(
|
||||
|
|
@ -370,24 +376,11 @@ private fun CatalogEmptyState(
|
|||
return
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(vertical = 48.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(10.dp),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(Res.string.catalog_empty_title),
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
Text(
|
||||
text = errorMessage ?: stringResource(Res.string.catalog_empty_message),
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = modifier,
|
||||
title = stringResource(Res.string.catalog_empty_title),
|
||||
message = errorMessage ?: stringResource(Res.string.catalog_empty_message),
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.nuvio.app.features.downloads
|
|||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
|
|
@ -14,7 +13,7 @@ import androidx.compose.foundation.lazy.LazyListScope
|
|||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Delete
|
||||
import androidx.compose.material.icons.rounded.Folder
|
||||
import androidx.compose.material.icons.rounded.Download
|
||||
import androidx.compose.material.icons.rounded.Pause
|
||||
import androidx.compose.material.icons.rounded.PlayArrow
|
||||
import androidx.compose.material.icons.rounded.Refresh
|
||||
|
|
@ -38,8 +37,8 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.nuvio.app.core.i18n.localizedByteUnit
|
||||
import com.nuvio.app.core.ui.NuvioScreen
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
import com.nuvio.app.core.ui.NuvioScreenHeader
|
||||
import com.nuvio.app.core.ui.NuvioToastController
|
||||
import nuvio.composeapp.generated.resources.*
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
|
||||
|
|
@ -57,8 +56,6 @@ fun DownloadsScreen(
|
|||
}.collectAsStateWithLifecycle()
|
||||
|
||||
var selectedShowId by rememberSaveable(initialShowId) { mutableStateOf(initialShowId) }
|
||||
val openDownloadsDirectoryFailedText = stringResource(Res.string.downloads_open_directory_failed)
|
||||
|
||||
val completedEpisodes = remember(uiState.items) {
|
||||
uiState.completedItems
|
||||
.filter { it.isEpisode }
|
||||
|
|
@ -86,20 +83,6 @@ fun DownloadsScreen(
|
|||
onBack()
|
||||
}
|
||||
},
|
||||
actions = {
|
||||
IconButton(
|
||||
onClick = {
|
||||
if (!DownloadsPlatformDownloader.openDownloadsDirectory()) {
|
||||
NuvioToastController.show(openDownloadsDirectoryFailedText)
|
||||
}
|
||||
},
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.Folder,
|
||||
contentDescription = stringResource(Res.string.downloads_open_directory),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -228,18 +211,11 @@ private fun LazyListScope.downloadsRootContent(
|
|||
|
||||
if (uiState.items.isEmpty()) {
|
||||
item {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 20.dp, vertical = 40.dp),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(Res.string.downloads_empty_title),
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = Modifier.fillParentMaxHeight(),
|
||||
icon = Icons.Rounded.Download,
|
||||
title = stringResource(Res.string.downloads_empty_title),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -264,18 +240,11 @@ private fun LazyListScope.downloadsShowContent(
|
|||
|
||||
if (seasons.isEmpty()) {
|
||||
item {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 20.dp, vertical = 40.dp),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(Res.string.downloads_empty_episodes),
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = Modifier.fillParentMaxHeight(),
|
||||
icon = Icons.Rounded.Download,
|
||||
title = stringResource(Res.string.downloads_empty_episodes),
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.nuvio.app.core.auth.AuthRepository
|
||||
import com.nuvio.app.core.auth.AuthState
|
||||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import com.nuvio.app.core.network.NetworkCondition
|
||||
import com.nuvio.app.core.network.NetworkStatusRepository
|
||||
import com.nuvio.app.core.ui.LocalNuvioBottomNavigationOverlayPadding
|
||||
|
|
@ -36,7 +37,6 @@ import com.nuvio.app.features.details.seriesPrimaryAction
|
|||
import com.nuvio.app.features.home.components.HomeCatalogRowSection
|
||||
import com.nuvio.app.features.home.components.HomeContinueWatchingSection
|
||||
import com.nuvio.app.features.home.components.HomeEmptyStateCard
|
||||
import com.nuvio.app.features.home.components.HomeHeroReservedSpace
|
||||
import com.nuvio.app.features.home.components.HomeHeroSection
|
||||
import com.nuvio.app.features.home.components.HomeSkeletonHero
|
||||
import com.nuvio.app.features.home.components.HomeSkeletonRow
|
||||
|
|
@ -107,7 +107,6 @@ fun HomeScreen(
|
|||
onFirstCatalogRendered: (() -> Unit)? = null,
|
||||
) {
|
||||
LaunchedEffect(Unit) {
|
||||
AddonRepository.initialize()
|
||||
CollectionRepository.initialize()
|
||||
ContinueWatchingPreferencesRepository.ensureLoaded()
|
||||
WatchedRepository.ensureLoaded()
|
||||
|
|
@ -118,7 +117,10 @@ fun HomeScreen(
|
|||
}
|
||||
}
|
||||
|
||||
val addonsUiState by AddonRepository.uiState.collectAsStateWithLifecycle()
|
||||
val addonsUiState by remember {
|
||||
AddonRepository.initialize()
|
||||
AddonRepository.uiState
|
||||
}.collectAsStateWithLifecycle()
|
||||
val homeUiState by HomeRepository.uiState.collectAsStateWithLifecycle()
|
||||
val homeSettingsUiState by remember {
|
||||
HomeCatalogSettingsRepository.snapshot()
|
||||
|
|
@ -440,7 +442,6 @@ fun HomeScreen(
|
|||
}
|
||||
|
||||
LaunchedEffect(catalogRefreshKey) {
|
||||
if (catalogRefreshKey.isEmpty()) return@LaunchedEffect
|
||||
HomeCatalogSettingsRepository.syncCatalogs(enabledAddons)
|
||||
HomeRepository.refresh(enabledAddons)
|
||||
}
|
||||
|
|
@ -655,11 +656,15 @@ fun HomeScreen(
|
|||
}
|
||||
|
||||
val hasActiveAddons = enabledAddons.any { it.manifest != null }
|
||||
val showHeroSlot = homeSettingsUiState.heroEnabled
|
||||
val hasCurrentHeroSource = enabledAddons.any { it.manifest != null || it.isRefreshing } ||
|
||||
collections.any { it.folders.isNotEmpty() }
|
||||
val isResolvingHeroSources = enabledAddons.any { it.isRefreshing } || homeUiState.isLoading
|
||||
val showHeroSkeleton = showHeroSlot &&
|
||||
val showHeroSkeleton = homeSettingsUiState.heroEnabled &&
|
||||
enabledAddons.isNotEmpty() &&
|
||||
homeUiState.heroItems.isEmpty() &&
|
||||
isResolvingHeroSources
|
||||
val showHeroSlot = homeSettingsUiState.heroEnabled && hasCurrentHeroSource &&
|
||||
(homeUiState.heroItems.isNotEmpty() || showHeroSkeleton)
|
||||
var firstCatalogReported by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(homeUiState.sections.firstOrNull()?.key, onFirstCatalogRendered) {
|
||||
|
|
@ -749,14 +754,14 @@ fun HomeScreen(
|
|||
) {
|
||||
if (showHeroSlot) {
|
||||
item {
|
||||
when {
|
||||
showHeroSkeleton -> HomeSkeletonHero(
|
||||
if (showHeroSkeleton) {
|
||||
HomeSkeletonHero(
|
||||
modifier = Modifier,
|
||||
viewportHeight = maxHeight,
|
||||
mobileBelowSectionHeightHint = mobileHeroBelowSectionHeightHint,
|
||||
)
|
||||
|
||||
homeUiState.heroItems.isNotEmpty() -> HomeHeroSection(
|
||||
} else {
|
||||
HomeHeroSection(
|
||||
items = homeUiState.heroItems,
|
||||
modifier = Modifier,
|
||||
viewportHeight = maxHeight,
|
||||
|
|
@ -764,12 +769,6 @@ fun HomeScreen(
|
|||
listState = homeListState,
|
||||
onItemClick = onPosterClick,
|
||||
)
|
||||
|
||||
else -> HomeHeroReservedSpace(
|
||||
modifier = Modifier,
|
||||
viewportHeight = maxHeight,
|
||||
mobileBelowSectionHeightHint = mobileHeroBelowSectionHeightHint,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -792,10 +791,31 @@ fun HomeScreen(
|
|||
}
|
||||
}
|
||||
item {
|
||||
val emptyStateModifier = if (
|
||||
continueWatchingPreferences.isVisible && continueWatchingItems.isNotEmpty()
|
||||
) {
|
||||
Modifier.padding(horizontal = 16.dp)
|
||||
} else {
|
||||
Modifier
|
||||
.fillParentMaxHeight()
|
||||
.padding(horizontal = 16.dp)
|
||||
}
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
title = stringResource(Res.string.compose_search_empty_no_active_addons_title),
|
||||
message = stringResource(Res.string.home_empty_no_active_addons_message),
|
||||
modifier = emptyStateModifier,
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_empty_title
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_active_addons_title
|
||||
},
|
||||
),
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.home_empty_no_active_addons_message
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -839,10 +859,22 @@ fun HomeScreen(
|
|||
)
|
||||
} else {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
title = stringResource(Res.string.home_empty_no_rows_title),
|
||||
message = homeUiState.errorMessage
|
||||
?: stringResource(Res.string.home_empty_no_rows_message),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight()
|
||||
.padding(horizontal = 16.dp),
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_title
|
||||
} else {
|
||||
Res.string.home_empty_no_rows_title
|
||||
},
|
||||
),
|
||||
message = if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
stringResource(Res.string.store_empty_unavailable_message)
|
||||
} else {
|
||||
homeUiState.errorMessage
|
||||
?: stringResource(Res.string.home_empty_no_rows_message)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,41 +1,25 @@
|
|||
package com.nuvio.app.features.home.components
|
||||
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.nuvio.app.core.ui.NuvioPrimaryButton
|
||||
import com.nuvio.app.core.ui.NuvioSurfaceCard
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
|
||||
@Composable
|
||||
fun HomeEmptyStateCard(
|
||||
title: String,
|
||||
message: String,
|
||||
modifier: Modifier = Modifier,
|
||||
iconPainter: Painter? = null,
|
||||
actionLabel: String? = null,
|
||||
onActionClick: (() -> Unit)? = null,
|
||||
) {
|
||||
NuvioSurfaceCard(modifier = modifier) {
|
||||
Text(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = message,
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
if (actionLabel != null && onActionClick != null) {
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
NuvioPrimaryButton(
|
||||
text = actionLabel,
|
||||
onClick = onActionClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = modifier,
|
||||
title = title,
|
||||
message = message,
|
||||
iconPainter = iconPainter,
|
||||
actionLabel = actionLabel,
|
||||
onActionClick = onActionClick,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ import kotlinx.coroutines.flow.Flow
|
|||
import kotlinx.coroutines.flow.emptyFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import nuvio.composeapp.generated.resources.*
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
|
||||
@Composable
|
||||
|
|
@ -268,7 +269,10 @@ fun LibraryScreen(
|
|||
)
|
||||
} else {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.55f)
|
||||
.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = if (isTraktSource) {
|
||||
stringResource(Res.string.library_trakt_load_failed)
|
||||
} else {
|
||||
|
|
@ -292,7 +296,10 @@ fun LibraryScreen(
|
|||
)
|
||||
} else {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.55f)
|
||||
.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = if (isTraktSource) {
|
||||
stringResource(Res.string.library_trakt_empty_title)
|
||||
} else {
|
||||
|
|
@ -345,7 +352,10 @@ private fun LazyListScope.cloudLibraryContent(
|
|||
!uiState.isEnabled -> {
|
||||
item {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.55f)
|
||||
.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = stringResource(Res.string.cloud_library_disabled_title),
|
||||
message = stringResource(Res.string.cloud_library_disabled_message),
|
||||
actionLabel = stringResource(Res.string.cloud_library_disabled_action),
|
||||
|
|
@ -357,7 +367,10 @@ private fun LazyListScope.cloudLibraryContent(
|
|||
!uiState.hasConnectedProvider -> {
|
||||
item {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.55f)
|
||||
.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = stringResource(Res.string.cloud_library_connect_title),
|
||||
message = stringResource(Res.string.cloud_library_connect_message),
|
||||
actionLabel = stringResource(Res.string.cloud_library_connect_action),
|
||||
|
|
@ -407,6 +420,7 @@ private fun LazyListScope.cloudLibraryContent(
|
|||
item(key = "cloud-error-${providerState.providerId}") {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = stringResource(Res.string.cloud_library_load_failed, providerState.providerName),
|
||||
message = providerState.errorMessage.orEmpty(),
|
||||
actionLabel = stringResource(Res.string.action_retry),
|
||||
|
|
@ -420,7 +434,10 @@ private fun LazyListScope.cloudLibraryContent(
|
|||
} else if (filteredItems.isEmpty()) {
|
||||
item {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.5f)
|
||||
.padding(horizontal = 16.dp),
|
||||
iconPainter = painterResource(Res.drawable.sidebar_library),
|
||||
title = stringResource(Res.string.cloud_library_empty_title),
|
||||
message = stringResource(Res.string.cloud_library_empty_message),
|
||||
actionLabel = stringResource(Res.string.action_retry),
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import coil3.compose.AsyncImage
|
||||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import com.nuvio.app.core.network.NetworkCondition
|
||||
import com.nuvio.app.core.format.formatReleaseDateForDisplay
|
||||
import com.nuvio.app.core.ui.NuvioDropdownChip
|
||||
|
|
@ -94,7 +95,9 @@ internal fun LazyListScope.discoverContent(
|
|||
items(2) {
|
||||
DiscoverSkeletonRow(
|
||||
columns = columns,
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight(0.72f)
|
||||
.padding(horizontal = 16.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -353,13 +356,37 @@ private fun DiscoverEmptyStateCard(
|
|||
|
||||
when (reason) {
|
||||
DiscoverEmptyStateReason.NoActiveAddons -> {
|
||||
title = stringResource(Res.string.compose_search_empty_no_active_addons_title)
|
||||
message = stringResource(Res.string.discover_empty_no_active_addons_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_empty_title
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_active_addons_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.discover_empty_no_active_addons_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
DiscoverEmptyStateReason.NoDiscoverCatalogs -> {
|
||||
title = stringResource(Res.string.discover_empty_no_catalogs_title)
|
||||
message = stringResource(Res.string.discover_empty_no_catalogs_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_title
|
||||
} else {
|
||||
Res.string.discover_empty_no_catalogs_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_message
|
||||
} else {
|
||||
Res.string.discover_empty_no_catalogs_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
DiscoverEmptyStateReason.RequestFailed -> {
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import androidx.compose.ui.text.font.FontWeight
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import com.nuvio.app.core.network.NetworkCondition
|
||||
import com.nuvio.app.core.network.NetworkStatusRepository
|
||||
import com.nuvio.app.core.ui.NuvioInputField
|
||||
|
|
@ -64,6 +65,8 @@ import kotlinx.coroutines.flow.emptyFlow
|
|||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.map
|
||||
import nuvio.composeapp.generated.resources.Res
|
||||
import nuvio.composeapp.generated.resources.addons_appstore_empty_subtitle
|
||||
import nuvio.composeapp.generated.resources.addons_empty_title
|
||||
import nuvio.composeapp.generated.resources.compose_nav_search
|
||||
import nuvio.composeapp.generated.resources.compose_search_clear
|
||||
import nuvio.composeapp.generated.resources.compose_search_discover_title
|
||||
|
|
@ -78,6 +81,8 @@ import nuvio.composeapp.generated.resources.compose_search_empty_no_search_catal
|
|||
import nuvio.composeapp.generated.resources.compose_search_placeholder
|
||||
import nuvio.composeapp.generated.resources.compose_search_recent_searches
|
||||
import nuvio.composeapp.generated.resources.compose_search_remove_recent_search
|
||||
import nuvio.composeapp.generated.resources.store_empty_unavailable_message
|
||||
import nuvio.composeapp.generated.resources.store_empty_unavailable_title
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
|
||||
@Composable
|
||||
|
|
@ -317,7 +322,9 @@ fun SearchScreen(
|
|||
isWaitingForSearch -> {
|
||||
items(2) {
|
||||
HomeSkeletonRow(
|
||||
modifier = Modifier.padding(horizontal = homeSectionPadding),
|
||||
modifier = Modifier
|
||||
.fillParentMaxHeight()
|
||||
.padding(horizontal = homeSectionPadding),
|
||||
showHeaderAccent = !homeCatalogSettingsUiState.hideCatalogUnderline,
|
||||
)
|
||||
}
|
||||
|
|
@ -413,13 +420,37 @@ private fun SearchEmptyStateCard(
|
|||
|
||||
when (reason) {
|
||||
SearchEmptyStateReason.NoActiveAddons -> {
|
||||
title = stringResource(Res.string.compose_search_empty_no_active_addons_title)
|
||||
message = stringResource(Res.string.compose_search_empty_no_active_addons_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_empty_title
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_active_addons_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_active_addons_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
SearchEmptyStateReason.NoSearchCatalogs -> {
|
||||
title = stringResource(Res.string.compose_search_empty_no_search_catalogs_title)
|
||||
message = stringResource(Res.string.compose_search_empty_no_search_catalogs_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_title
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_search_catalogs_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_message
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_search_catalogs_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
SearchEmptyStateReason.RequestFailed -> {
|
||||
|
|
|
|||
|
|
@ -19,14 +19,20 @@ internal fun LazyListScope.contentDiscoveryContent(
|
|||
) {
|
||||
item {
|
||||
SettingsSection(
|
||||
title = stringResource(Res.string.settings_content_discovery_section_sources),
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.compose_settings_page_addons
|
||||
} else {
|
||||
Res.string.settings_content_discovery_section_sources
|
||||
},
|
||||
),
|
||||
isTablet = isTablet,
|
||||
) {
|
||||
SettingsGroup(isTablet = isTablet) {
|
||||
SettingsNavigationRow(
|
||||
title = stringResource(Res.string.compose_settings_page_addons),
|
||||
description = stringResource(
|
||||
if (AppFeaturePolicy.personalMediaAddonCopyEnabled) {
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.settings_content_discovery_addons_description_appstore
|
||||
} else {
|
||||
Res.string.settings_content_discovery_addons_description
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import com.nuvio.app.core.ui.NuvioActionLabel
|
||||
import com.nuvio.app.core.ui.NuvioToastController
|
||||
import com.nuvio.app.features.home.HomeCatalogSettingsItem
|
||||
|
|
@ -58,6 +59,8 @@ import nuvio.composeapp.generated.resources.settings_homescreen_show_hero
|
|||
import nuvio.composeapp.generated.resources.settings_homescreen_show_hero_description
|
||||
import nuvio.composeapp.generated.resources.settings_homescreen_summary
|
||||
import nuvio.composeapp.generated.resources.settings_homescreen_summary_hint
|
||||
import nuvio.composeapp.generated.resources.store_empty_unavailable_message
|
||||
import nuvio.composeapp.generated.resources.store_empty_unavailable_title
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
import sh.calvin.reorderable.ReorderableCollectionItemScope
|
||||
import sh.calvin.reorderable.ReorderableItem
|
||||
|
|
@ -133,9 +136,23 @@ internal fun LazyListScope.homescreenSettingsContent(
|
|||
item {
|
||||
if (items.isEmpty()) {
|
||||
HomeEmptyStateCard(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
title = stringResource(Res.string.settings_homescreen_empty_title),
|
||||
message = stringResource(Res.string.settings_homescreen_empty_message),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.heightIn(min = 280.dp),
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_title
|
||||
} else {
|
||||
Res.string.settings_homescreen_empty_title
|
||||
},
|
||||
),
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_message
|
||||
} else {
|
||||
Res.string.settings_homescreen_empty_message
|
||||
},
|
||||
),
|
||||
)
|
||||
} else {
|
||||
val catalogCount = items.count { !it.isCollection }
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import androidx.compose.material3.Text
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.nuvio.app.core.build.AppFeaturePolicy
|
||||
import com.nuvio.app.core.build.AppVersionConfig
|
||||
import nuvio.composeapp.generated.resources.Res
|
||||
import nuvio.composeapp.generated.resources.compose_about_made_with
|
||||
|
|
@ -37,7 +38,9 @@ import nuvio.composeapp.generated.resources.compose_settings_root_appearance_des
|
|||
import nuvio.composeapp.generated.resources.compose_settings_root_check_updates_description
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_check_updates_title
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_content_discovery_description
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_content_discovery_description_appstore
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_downloads_description
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_downloads_description_appstore
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_downloads_title
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_general_section
|
||||
import nuvio.composeapp.generated.resources.compose_settings_root_integrations_description
|
||||
|
|
@ -130,7 +133,13 @@ internal fun LazyListScope.settingsRootContent(
|
|||
SettingsGroupDivider(isTablet = isTablet)
|
||||
SettingsNavigationRow(
|
||||
title = stringResource(Res.string.compose_settings_page_content_discovery),
|
||||
description = stringResource(Res.string.compose_settings_root_content_discovery_description),
|
||||
description = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.compose_settings_root_content_discovery_description_appstore
|
||||
} else {
|
||||
Res.string.compose_settings_root_content_discovery_description
|
||||
},
|
||||
),
|
||||
icon = Icons.Rounded.Extension,
|
||||
isTablet = isTablet,
|
||||
onClick = onContentDiscoveryClick,
|
||||
|
|
@ -138,7 +147,13 @@ internal fun LazyListScope.settingsRootContent(
|
|||
SettingsGroupDivider(isTablet = isTablet)
|
||||
SettingsNavigationRow(
|
||||
title = stringResource(Res.string.compose_settings_root_downloads_title),
|
||||
description = stringResource(Res.string.compose_settings_root_downloads_description),
|
||||
description = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.compose_settings_root_downloads_description_appstore
|
||||
} else {
|
||||
Res.string.compose_settings_root_downloads_description
|
||||
},
|
||||
),
|
||||
icon = Icons.Rounded.CloudDownload,
|
||||
isTablet = isTablet,
|
||||
onClick = onDownloadsClick,
|
||||
|
|
|
|||
|
|
@ -567,7 +567,7 @@ private fun MobileSettingsScreen(
|
|||
pluginsEnabled = AppFeaturePolicy.pluginsEnabled,
|
||||
supportersContributorsPageEnabled = AppFeaturePolicy.supportersContributorsPageEnabled,
|
||||
accountDeletionEnabled = AppFeaturePolicy.accountDeletionEnabled,
|
||||
personalMediaAddonCopyEnabled = AppFeaturePolicy.personalMediaAddonCopyEnabled,
|
||||
storeNarrativeEnabled = AppFeaturePolicy.storeNarrativeEnabled,
|
||||
liquidGlassNativeTabBarSupported = liquidGlassNativeTabBarSupported,
|
||||
switchProfileAvailable = onSwitchProfile != null,
|
||||
checkForUpdatesAvailable = onCheckForUpdatesClick != null,
|
||||
|
|
@ -955,7 +955,7 @@ private fun TabletSettingsScreen(
|
|||
pluginsEnabled = AppFeaturePolicy.pluginsEnabled,
|
||||
supportersContributorsPageEnabled = AppFeaturePolicy.supportersContributorsPageEnabled,
|
||||
accountDeletionEnabled = AppFeaturePolicy.accountDeletionEnabled,
|
||||
personalMediaAddonCopyEnabled = AppFeaturePolicy.personalMediaAddonCopyEnabled,
|
||||
storeNarrativeEnabled = AppFeaturePolicy.storeNarrativeEnabled,
|
||||
liquidGlassNativeTabBarSupported = liquidGlassNativeTabBarSupported,
|
||||
switchProfileAvailable = onSwitchProfile != null,
|
||||
checkForUpdatesAvailable = onCheckForUpdatesClick != null,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import androidx.compose.animation.fadeIn
|
|||
import androidx.compose.animation.slideInVertically
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.material.icons.Icons
|
||||
|
|
@ -43,6 +44,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
|||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.nuvio.app.core.ui.NuvioTokens
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
import com.nuvio.app.core.ui.nuvio
|
||||
import com.nuvio.app.isIos
|
||||
import nuvio.composeapp.generated.resources.*
|
||||
|
|
@ -81,7 +83,7 @@ internal fun settingsSearchEntries(
|
|||
pluginsEnabled: Boolean,
|
||||
supportersContributorsPageEnabled: Boolean,
|
||||
accountDeletionEnabled: Boolean,
|
||||
personalMediaAddonCopyEnabled: Boolean,
|
||||
storeNarrativeEnabled: Boolean,
|
||||
liquidGlassNativeTabBarSupported: Boolean,
|
||||
switchProfileAvailable: Boolean,
|
||||
checkForUpdatesAvailable: Boolean,
|
||||
|
|
@ -225,13 +227,25 @@ internal fun settingsSearchEntries(
|
|||
page = SettingsPage.ContentDiscovery,
|
||||
key = "content-discovery",
|
||||
title = contentDiscoveryPage,
|
||||
description = stringResource(Res.string.compose_settings_root_content_discovery_description),
|
||||
description = stringResource(
|
||||
if (storeNarrativeEnabled) {
|
||||
Res.string.compose_settings_root_content_discovery_description_appstore
|
||||
} else {
|
||||
Res.string.compose_settings_root_content_discovery_description
|
||||
},
|
||||
),
|
||||
icon = Icons.Rounded.Extension,
|
||||
)
|
||||
add(
|
||||
key = "downloads",
|
||||
title = downloadsPage,
|
||||
description = stringResource(Res.string.compose_settings_root_downloads_description),
|
||||
description = stringResource(
|
||||
if (storeNarrativeEnabled) {
|
||||
Res.string.compose_settings_root_downloads_description_appstore
|
||||
} else {
|
||||
Res.string.compose_settings_root_downloads_description
|
||||
},
|
||||
),
|
||||
category = generalCategory,
|
||||
icon = Icons.Rounded.CloudDownload,
|
||||
target = SettingsSearchTarget.Downloads,
|
||||
|
|
@ -448,7 +462,7 @@ internal fun settingsSearchEntries(
|
|||
key = "addons",
|
||||
title = addonsPage,
|
||||
description = stringResource(
|
||||
if (personalMediaAddonCopyEnabled) {
|
||||
if (storeNarrativeEnabled) {
|
||||
Res.string.settings_content_discovery_addons_description_appstore
|
||||
} else {
|
||||
Res.string.settings_content_discovery_addons_description
|
||||
|
|
@ -1106,25 +1120,14 @@ private fun SettingsSearchField(
|
|||
|
||||
@Composable
|
||||
private fun SettingsSearchEmptyState(isTablet: Boolean) {
|
||||
val tokens = MaterialTheme.nuvio
|
||||
SettingsSection(
|
||||
title = stringResource(Res.string.settings_search_results_section),
|
||||
isTablet = isTablet,
|
||||
) {
|
||||
SettingsGroup(isTablet = isTablet) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = if (isTablet) 20.dp else 16.dp, vertical = 18.dp),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(Res.string.settings_search_empty),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = tokens.colors.textPrimary,
|
||||
fontWeight = FontWeight.Medium,
|
||||
)
|
||||
}
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = Modifier.heightIn(min = 280.dp),
|
||||
title = stringResource(Res.string.settings_search_empty),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ import androidx.compose.material.icons.automirrored.rounded.OpenInNew
|
|||
import androidx.compose.material.icons.rounded.ContentCopy
|
||||
import androidx.compose.material.icons.rounded.Download
|
||||
import androidx.compose.material.icons.rounded.Refresh
|
||||
import androidx.compose.material.icons.rounded.SearchOff
|
||||
import com.nuvio.app.core.ui.NuvioLoadingIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
|
|
@ -75,6 +74,7 @@ import com.nuvio.app.core.build.AppFeaturePolicy
|
|||
import com.nuvio.app.core.ui.NuvioBackButton
|
||||
import com.nuvio.app.core.ui.NuvioBottomSheetActionRow
|
||||
import com.nuvio.app.core.ui.NuvioBottomSheetDivider
|
||||
import com.nuvio.app.core.ui.NuvioEmptyState
|
||||
import com.nuvio.app.core.ui.NuvioModalBottomSheet
|
||||
import com.nuvio.app.core.ui.NuvioToastController
|
||||
import com.nuvio.app.core.ui.dismissNuvioBottomSheet
|
||||
|
|
@ -892,7 +892,10 @@ internal fun StreamList(
|
|||
|
||||
!hasAnyStreams && !uiState.isAnyLoading -> {
|
||||
item {
|
||||
EmptyStateBlock(reason = uiState.emptyStateReason)
|
||||
EmptyStateBlock(
|
||||
reason = uiState.emptyStateReason,
|
||||
modifier = Modifier.fillParentMaxHeight(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1249,13 +1252,37 @@ private fun EmptyStateBlock(
|
|||
|
||||
when (reason) {
|
||||
StreamsEmptyStateReason.NoAddonsInstalled -> {
|
||||
title = stringResource(Res.string.compose_search_empty_no_active_addons_title)
|
||||
message = stringResource(Res.string.streams_empty_no_addons_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_empty_title
|
||||
} else {
|
||||
Res.string.compose_search_empty_no_active_addons_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.addons_appstore_empty_subtitle
|
||||
} else {
|
||||
Res.string.streams_empty_no_addons_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
StreamsEmptyStateReason.NoCompatibleAddons -> {
|
||||
title = stringResource(Res.string.streams_empty_no_stream_addon_title)
|
||||
message = stringResource(Res.string.streams_empty_no_stream_addon_message)
|
||||
title = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_title
|
||||
} else {
|
||||
Res.string.streams_empty_no_stream_addon_title
|
||||
},
|
||||
)
|
||||
message = stringResource(
|
||||
if (AppFeaturePolicy.storeNarrativeEnabled) {
|
||||
Res.string.store_empty_unavailable_message
|
||||
} else {
|
||||
Res.string.streams_empty_no_stream_addon_message
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
StreamsEmptyStateReason.StreamFetchFailed -> {
|
||||
|
|
@ -1269,35 +1296,11 @@ private fun EmptyStateBlock(
|
|||
}
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.padding(32.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.SearchOff,
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(48.dp),
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = title,
|
||||
style = MaterialTheme.typography.bodyLarge.copy(
|
||||
fontSize = 16.sp,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
),
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
Text(
|
||||
text = message,
|
||||
style = MaterialTheme.typography.bodySmall.copy(fontSize = 14.sp),
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
}
|
||||
NuvioEmptyState(
|
||||
modifier = modifier,
|
||||
title = title,
|
||||
message = message,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ actual object AppFeaturePolicy {
|
|||
actual val pluginsEnabled: Boolean = false
|
||||
actual val supportersContributorsPageEnabled: Boolean = true
|
||||
actual val accountDeletionEnabled: Boolean = false
|
||||
actual val personalMediaAddonCopyEnabled: Boolean = false
|
||||
actual val storeNarrativeEnabled: Boolean = false
|
||||
actual val p2pEnabled: Boolean = false
|
||||
actual val trailerPlaybackMode: TrailerPlaybackMode = TrailerPlaybackMode.EXTERNAL
|
||||
actual val heroTrailerPlaybackSupported: Boolean = false
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ actual object AppFeaturePolicy {
|
|||
actual val pluginsEnabled: Boolean = false
|
||||
actual val supportersContributorsPageEnabled: Boolean = false
|
||||
actual val accountDeletionEnabled: Boolean = true
|
||||
actual val personalMediaAddonCopyEnabled: Boolean = true
|
||||
actual val storeNarrativeEnabled: Boolean = true
|
||||
actual val p2pEnabled: Boolean = false
|
||||
actual val trailerPlaybackMode: TrailerPlaybackMode = TrailerPlaybackMode.EXTERNAL
|
||||
actual val heroTrailerPlaybackSupported: Boolean = false
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ actual object AppFeaturePolicy {
|
|||
actual val pluginsEnabled: Boolean = true
|
||||
actual val supportersContributorsPageEnabled: Boolean = true
|
||||
actual val accountDeletionEnabled: Boolean = false
|
||||
actual val personalMediaAddonCopyEnabled: Boolean = false
|
||||
actual val storeNarrativeEnabled: Boolean = false
|
||||
actual val p2pEnabled: Boolean = false
|
||||
actual val trailerPlaybackMode: TrailerPlaybackMode = TrailerPlaybackMode.IN_APP
|
||||
actual val heroTrailerPlaybackSupported: Boolean = false
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\nif [ -z \"$JAVA_HOME\" ] && [ -x \"/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/bin/java\" ]; then\n export JAVA_HOME=\"/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home\"\nfi\nif [ -n \"$JAVA_HOME\" ]; then\n export PATH=\"$JAVA_HOME/bin:/opt/homebrew/bin:$PATH\"\nelse\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\nif [ -z \"$GRADLE_OPTS\" ]; then\n export GRADLE_OPTS=\"-Xmx12288M -Dfile.encoding=UTF-8 -XX:MaxMetaspaceSize=2048m\"\nfi\nif [ -z \"$KOTLIN_DAEMON_JVMARGS\" ]; then\n export KOTLIN_DAEMON_JVMARGS=\"-Xmx8192M\"\nfi\ncd \"$SRCROOT/..\"\n./gradlew :composeApp:embedAndSignAppleFrameworkForXcode\n";
|
||||
shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\nexport JAVA_HOME=\"/Applications/Android Studio.app/Contents/jbr/Contents/Home\"\nexport PATH=\"$JAVA_HOME/bin:/opt/homebrew/bin:$PATH\"\nif [ -z \"$GRADLE_OPTS\" ]; then\n export GRADLE_OPTS=\"-Xmx12288M -Dfile.encoding=UTF-8 -XX:MaxMetaspaceSize=2048m\"\nfi\nif [ -z \"$KOTLIN_DAEMON_JVMARGS\" ]; then\n export KOTLIN_DAEMON_JVMARGS=\"-Xmx8192M\"\nfi\ncd \"$SRCROOT/..\"\n./gradlew :composeApp:embedAndSignAppleFrameworkForXcode\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue