From 1ef4032666a8d7a61b814a9455b524c6aa94f467 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sat, 6 Jun 2026 13:08:02 +0200 Subject: [PATCH] feat: add startup section setting close #1240 --- lib/i18n/bg.i18n.json | 2 + lib/i18n/da.i18n.json | 2 + lib/i18n/de.i18n.json | 2 + lib/i18n/en.i18n.json | 2 + lib/i18n/es.i18n.json | 2 + lib/i18n/fr.i18n.json | 2 + lib/i18n/it.i18n.json | 2 + lib/i18n/ja.i18n.json | 2 + lib/i18n/ko.i18n.json | 2 + lib/i18n/nb.i18n.json | 2 + lib/i18n/nl.i18n.json | 2 + lib/i18n/pl.i18n.json | 2 + lib/i18n/pt.i18n.json | 2 + lib/i18n/ru.i18n.json | 2 + lib/i18n/strings.g.dart | 2 +- lib/i18n/strings_bg.g.dart | 12 +++-- lib/i18n/strings_da.g.dart | 12 +++-- lib/i18n/strings_de.g.dart | 12 +++-- lib/i18n/strings_en.g.dart | 16 +++++-- lib/i18n/strings_es.g.dart | 12 +++-- lib/i18n/strings_fr.g.dart | 12 +++-- lib/i18n/strings_it.g.dart | 12 +++-- lib/i18n/strings_ja.g.dart | 12 +++-- lib/i18n/strings_ko.g.dart | 12 +++-- lib/i18n/strings_nb.g.dart | 12 +++-- lib/i18n/strings_nl.g.dart | 12 +++-- lib/i18n/strings_pl.g.dart | 12 +++-- lib/i18n/strings_pt.g.dart | 12 +++-- lib/i18n/strings_ru.g.dart | 12 +++-- lib/i18n/strings_sv.g.dart | 12 +++-- lib/i18n/strings_zh.g.dart | 12 +++-- lib/i18n/sv.i18n.json | 2 + lib/i18n/zh.i18n.json | 2 + lib/navigation/navigation_tabs.dart | 20 +++++++++ lib/screens/main_screen.dart | 34 ++++++++++---- .../settings/appearance_settings_screen.dart | 23 ++++++++++ lib/services/settings_service.dart | 7 +++ test/navigation/navigation_tabs_test.dart | 45 +++++++++++++++++++ 38 files changed, 286 insertions(+), 73 deletions(-) create mode 100644 test/navigation/navigation_tabs_test.dart diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index 2055bdbd..d40064b6 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Скривай постепенно оверлея за производителност заедно с контролите за възпроизвеждане", "showNavBarLabels": "Показвай етикети в навигационната лента", "showNavBarLabelsDescription": "Показвай текстови етикети под иконите в навигационната лента", + "startupSection": "Начален раздел", + "startupSectionDescription": "Изберете кой раздел да отваря Plezy при стартиране", "liveTvDefaultFavorites": "По подразбиране към любими канали", "liveTvDefaultFavoritesDescription": "Показвай само любими канали при отваряне на телевизия на живо", "display": "Дисплей", diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index cac9b303..e7b54db7 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Fade ydelses-overlayet med afspilningskontrollerne", "showNavBarLabels": "Vis navigationsbarlabels", "showNavBarLabelsDescription": "Vis tekstlabels under navigationsbarikoner", + "startupSection": "Startsektion", + "startupSectionDescription": "Vælg hvilken sektion Plezy åbner ved start", "liveTvDefaultFavorites": "Standard til favoritkanaler", "liveTvDefaultFavoritesDescription": "Vis kun favoritkanaler ved åbning af Live TV", "display": "Skærm", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index b04014f4..3a856269 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden", "showNavBarLabels": "Navigationsleisten-Beschriftungen anzeigen", "showNavBarLabelsDescription": "Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen", + "startupSection": "Startbereich", + "startupSectionDescription": "Legt fest, welchen Bereich Plezy beim Start öffnet", "liveTvDefaultFavorites": "Standardmäßig Favoritenkanäle", "liveTvDefaultFavoritesDescription": "Beim Öffnen von Live TV nur Favoritenkanäle anzeigen", "display": "Anzeige", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 2606d102..351eafb2 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Fade the performance overlay with the playback controls", "showNavBarLabels": "Show Navigation Bar Labels", "showNavBarLabelsDescription": "Display text labels under navigation bar icons", + "startupSection": "Startup Section", + "startupSectionDescription": "Choose which section Plezy opens to when it starts", "liveTvDefaultFavorites": "Default to Favorite Channels", "liveTvDefaultFavoritesDescription": "Show only favorite channels when opening Live TV", "display": "Display", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index daad7fe2..65d746b8 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Desvanecer la superposición de rendimiento con los controles de reproducción", "showNavBarLabels": "Mostrar etiquetas de la barra de navegación", "showNavBarLabelsDescription": "Mostrar etiquetas de texto bajo los iconos de la barra de navegación", + "startupSection": "Sección de inicio", + "startupSectionDescription": "Elige qué sección abre Plezy al iniciarse", "liveTvDefaultFavorites": "Canales favoritos por defecto", "liveTvDefaultFavoritesDescription": "Mostrar solo canales favoritos al abrir TV en vivo", "display": "Pantalla", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 8bb270b3..6f60da83 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Faire apparaître/disparaître la superposition avec les contrôles de lecture", "showNavBarLabels": "Afficher les libellés de la barre de navigation", "showNavBarLabelsDescription": "Afficher les libellés sous les icônes de la barre de navigation", + "startupSection": "Section de démarrage", + "startupSectionDescription": "Choisissez la section que Plezy ouvre au démarrage", "liveTvDefaultFavorites": "Chaînes favorites par défaut", "liveTvDefaultFavoritesDescription": "Afficher uniquement les chaînes favorites à l'ouverture de la TV en direct", "display": "Affichage", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 8d489bfb..ba48ddd5 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Dissolvi l'overlay prestazioni con i controlli di riproduzione", "showNavBarLabels": "Mostra etichette barra di navigazione", "showNavBarLabelsDescription": "Mostra le etichette sotto le icone della barra di navigazione", + "startupSection": "Sezione di avvio", + "startupSectionDescription": "Scegli quale sezione apre Plezy all'avvio", "liveTvDefaultFavorites": "Canali preferiti predefiniti", "liveTvDefaultFavoritesDescription": "Mostra solo i canali preferiti all'apertura della TV dal vivo", "display": "Schermo", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index 02cae8b4..47114313 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "再生コントロールと一緒にパフォーマンスオーバーレイをフェードする", "showNavBarLabels": "ナビゲーションバーラベルを表示", "showNavBarLabelsDescription": "ナビゲーションバーアイコンの下にテキストラベルを表示", + "startupSection": "起動時のセクション", + "startupSectionDescription": "起動時に Plezy が開くセクションを選択します", "liveTvDefaultFavorites": "お気に入りチャンネルをデフォルトに", "liveTvDefaultFavoritesDescription": "ライブTV を開いたときにお気に入りチャンネルのみ表示", "display": "ディスプレイ", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 419cbd87..b197b9a6 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "재생 컨트롤과 함께 성능 오버레이를 페이드 처리", "showNavBarLabels": "내비게이션 바 라벨 표시", "showNavBarLabelsDescription": "내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다", + "startupSection": "시작 섹션", + "startupSectionDescription": "Plezy 실행 시 열릴 섹션을 선택합니다", "liveTvDefaultFavorites": "즐겨찾기 채널 기본 설정", "liveTvDefaultFavoritesDescription": "라이브 TV를 열 때 즐겨찾기 채널만 표시", "display": "디스플레이", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 571a7b94..414c089d 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Fade ytelsesoverlegget med avspillingskontrollene", "showNavBarLabels": "Vis navigasjonsfeltlabeler", "showNavBarLabelsDescription": "Vis tekstlabeler under navigasjonsfeltikoner", + "startupSection": "Oppstartsseksjon", + "startupSectionDescription": "Velg hvilken seksjon Plezy åpner ved oppstart", "liveTvDefaultFavorites": "Standard til favorittkanaler", "liveTvDefaultFavoritesDescription": "Vis kun favorittkanaler når du åpner Live TV", "display": "Skjerm", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 3110a8d4..49829254 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Laat de prestatie-overlay meevervagen met de afspeelknoppen", "showNavBarLabels": "Navigatiebalk labels tonen", "showNavBarLabelsDescription": "Tekstlabels onder de pictogrammen van de navigatiebalk weergeven", + "startupSection": "Opstartsectie", + "startupSectionDescription": "Kies welke sectie Plezy opent bij het opstarten", "liveTvDefaultFavorites": "Standaard favoriete zenders", "liveTvDefaultFavoritesDescription": "Toon alleen favoriete zenders bij het openen van Live TV", "display": "Weergave", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index e0fffb59..719209b3 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania", "showNavBarLabels": "Pokaż etykiety paska nawigacji", "showNavBarLabelsDescription": "Wyświetl tekstowe etykiety pod ikonami paska nawigacji", + "startupSection": "Sekcja startowa", + "startupSectionDescription": "Wybierz, którą sekcję Plezy otwiera przy uruchomieniu", "liveTvDefaultFavorites": "Domyślnie ulubione kanały", "liveTvDefaultFavoritesDescription": "Pokaż tylko ulubione kanały po otwarciu telewizji na żywo", "display": "Ekran", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 2d072770..ee6002be 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Desvanecer o overlay de desempenho com os controles de reprodução", "showNavBarLabels": "Mostrar Rótulos da Barra de Navegação", "showNavBarLabelsDescription": "Exibir rótulos de texto sob os ícones da barra de navegação", + "startupSection": "Seção inicial", + "startupSectionDescription": "Escolha qual seção o Plezy abre ao iniciar", "liveTvDefaultFavorites": "Canais favoritos por padrão", "liveTvDefaultFavoritesDescription": "Mostrar apenas canais favoritos ao abrir TV ao vivo", "display": "Tela", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 180e37cd..ebad5a2a 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Скрывать оверлей производительности вместе с элементами управления воспроизведением", "showNavBarLabels": "Показывать подписи панели навигации", "showNavBarLabelsDescription": "Отображать текстовые подписи под иконками панели навигации", + "startupSection": "Начальный раздел", + "startupSectionDescription": "Выберите, какой раздел Plezy открывает при запуске", "liveTvDefaultFavorites": "Избранные каналы по умолчанию", "liveTvDefaultFavoritesDescription": "Показывать только избранные каналы при открытии ТВ", "display": "Экран", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 31f441e6..11fc8007 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 16 -/// Strings: 20288 (1268 per locale) +/// Strings: 20320 (1270 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart index 4f90b809..f31ad4c0 100644 --- a/lib/i18n/strings_bg.g.dart +++ b/lib/i18n/strings_bg.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Скривай постепенно оверлея за производителност заедно с контролите за възпроизвеждане'; @override String get showNavBarLabels => 'Показвай етикети в навигационната лента'; @override String get showNavBarLabelsDescription => 'Показвай текстови етикети под иконите в навигационната лента'; + @override String get startupSection => 'Начален раздел'; + @override String get startupSectionDescription => 'Изберете кой раздел да отваря Plezy при стартиране'; @override String get liveTvDefaultFavorites => 'По подразбиране към любими канали'; @override String get liveTvDefaultFavoritesDescription => 'Показвай само любими канали при отваряне на телевизия на живо'; @override String get display => 'Дисплей'; @@ -2183,6 +2185,8 @@ extension on TranslationsBg { 'settings.autoHidePerformanceOverlayDescription' => 'Скривай постепенно оверлея за производителност заедно с контролите за възпроизвеждане', 'settings.showNavBarLabels' => 'Показвай етикети в навигационната лента', 'settings.showNavBarLabelsDescription' => 'Показвай текстови етикети под иконите в навигационната лента', + 'settings.startupSection' => 'Начален раздел', + 'settings.startupSectionDescription' => 'Изберете кой раздел да отваря Plezy при стартиране', 'settings.liveTvDefaultFavorites' => 'По подразбиране към любими канали', 'settings.liveTvDefaultFavoritesDescription' => 'Показвай само любими канали при отваряне на телевизия на живо', 'settings.display' => 'Дисплей', @@ -2427,10 +2431,10 @@ extension on TranslationsBg { 'subtitlingStyling.textColor' => 'Цвят на текста', 'subtitlingStyling.borderSize' => 'Размер на рамката', 'subtitlingStyling.borderColor' => 'Цвят на рамката', - 'subtitlingStyling.backgroundOpacity' => 'Прозрачност на фона', - 'subtitlingStyling.backgroundColor' => 'Цвят на фона', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Прозрачност на фона', + 'subtitlingStyling.backgroundColor' => 'Цвят на фона', 'subtitlingStyling.position' => 'Позиция', 'subtitlingStyling.assOverride' => 'ASS презаписване', 'subtitlingStyling.bold' => 'Получер', @@ -2941,10 +2945,10 @@ extension on TranslationsBg { 'companionRemote.remote.tabSearch' => 'Търсене', 'companionRemote.remote.tabDownloads' => 'Изтегляния', 'companionRemote.remote.tabSettings' => 'Настройки', - 'companionRemote.remote.previous' => 'Предишен', - 'companionRemote.remote.playPause' => 'Пускане/пауза', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Предишен', + 'companionRemote.remote.playPause' => 'Пускане/пауза', 'companionRemote.remote.next' => 'Следващ', 'companionRemote.remote.seekBack' => 'Назад', 'companionRemote.remote.stop' => 'Стоп', diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 869e5fb3..73fa4f05 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Fade ydelses-overlayet med afspilningskontrollerne'; @override String get showNavBarLabels => 'Vis navigationsbarlabels'; @override String get showNavBarLabelsDescription => 'Vis tekstlabels under navigationsbarikoner'; + @override String get startupSection => 'Startsektion'; + @override String get startupSectionDescription => 'Vælg hvilken sektion Plezy åbner ved start'; @override String get liveTvDefaultFavorites => 'Standard til favoritkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Vis kun favoritkanaler ved åbning af Live TV'; @override String get display => 'Skærm'; @@ -2183,6 +2185,8 @@ extension on TranslationsDa { 'settings.autoHidePerformanceOverlayDescription' => 'Fade ydelses-overlayet med afspilningskontrollerne', 'settings.showNavBarLabels' => 'Vis navigationsbarlabels', 'settings.showNavBarLabelsDescription' => 'Vis tekstlabels under navigationsbarikoner', + 'settings.startupSection' => 'Startsektion', + 'settings.startupSectionDescription' => 'Vælg hvilken sektion Plezy åbner ved start', 'settings.liveTvDefaultFavorites' => 'Standard til favoritkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Vis kun favoritkanaler ved åbning af Live TV', 'settings.display' => 'Skærm', @@ -2427,10 +2431,10 @@ extension on TranslationsDa { 'subtitlingStyling.textColor' => 'Tekstfarve', 'subtitlingStyling.borderSize' => 'Kantstørrelse', 'subtitlingStyling.borderColor' => 'Kantfarve', - 'subtitlingStyling.backgroundOpacity' => 'Baggrundsgennemsigtighed', - 'subtitlingStyling.backgroundColor' => 'Baggrundsfarve', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Baggrundsgennemsigtighed', + 'subtitlingStyling.backgroundColor' => 'Baggrundsfarve', 'subtitlingStyling.position' => 'Position', 'subtitlingStyling.assOverride' => 'ASS-tilsidesættelse', 'subtitlingStyling.bold' => 'Fed', @@ -2941,10 +2945,10 @@ extension on TranslationsDa { 'companionRemote.remote.tabSearch' => 'Søg', 'companionRemote.remote.tabDownloads' => 'Downloads', 'companionRemote.remote.tabSettings' => 'Indstillinger', - 'companionRemote.remote.previous' => 'Forrige', - 'companionRemote.remote.playPause' => 'Afspil/Pause', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Forrige', + 'companionRemote.remote.playPause' => 'Afspil/Pause', 'companionRemote.remote.next' => 'Næste', 'companionRemote.remote.seekBack' => 'Spol tilbage', 'companionRemote.remote.stop' => 'Stop', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 64a10174..d901a2bc 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden'; @override String get showNavBarLabels => 'Navigationsleisten-Beschriftungen anzeigen'; @override String get showNavBarLabelsDescription => 'Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen'; + @override String get startupSection => 'Startbereich'; + @override String get startupSectionDescription => 'Legt fest, welchen Bereich Plezy beim Start öffnet'; @override String get liveTvDefaultFavorites => 'Standardmäßig Favoritenkanäle'; @override String get liveTvDefaultFavoritesDescription => 'Beim Öffnen von Live TV nur Favoritenkanäle anzeigen'; @override String get display => 'Anzeige'; @@ -2183,6 +2185,8 @@ extension on TranslationsDe { 'settings.autoHidePerformanceOverlayDescription' => 'Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden', 'settings.showNavBarLabels' => 'Navigationsleisten-Beschriftungen anzeigen', 'settings.showNavBarLabelsDescription' => 'Textbeschriftungen unter den Symbolen der Navigationsleiste anzeigen', + 'settings.startupSection' => 'Startbereich', + 'settings.startupSectionDescription' => 'Legt fest, welchen Bereich Plezy beim Start öffnet', 'settings.liveTvDefaultFavorites' => 'Standardmäßig Favoritenkanäle', 'settings.liveTvDefaultFavoritesDescription' => 'Beim Öffnen von Live TV nur Favoritenkanäle anzeigen', 'settings.display' => 'Anzeige', @@ -2427,10 +2431,10 @@ extension on TranslationsDe { 'subtitlingStyling.textColor' => 'Textfarbe', 'subtitlingStyling.borderSize' => 'Rahmengröße', 'subtitlingStyling.borderColor' => 'Rahmenfarbe', - 'subtitlingStyling.backgroundOpacity' => 'Hintergrunddeckkraft', - 'subtitlingStyling.backgroundColor' => 'Hintergrundfarbe', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Hintergrunddeckkraft', + 'subtitlingStyling.backgroundColor' => 'Hintergrundfarbe', 'subtitlingStyling.position' => 'Position', 'subtitlingStyling.assOverride' => 'ASS-Überschreibung', 'subtitlingStyling.bold' => 'Fett', @@ -2941,10 +2945,10 @@ extension on TranslationsDe { 'companionRemote.remote.tabSearch' => 'Suche', 'companionRemote.remote.tabDownloads' => 'Downloads', 'companionRemote.remote.tabSettings' => 'Einstellungen', - 'companionRemote.remote.previous' => 'Zurück', - 'companionRemote.remote.playPause' => 'Wiedergabe/Pause', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Zurück', + 'companionRemote.remote.playPause' => 'Wiedergabe/Pause', 'companionRemote.remote.next' => 'Weiter', 'companionRemote.remote.seekBack' => 'Zurückspulen', 'companionRemote.remote.stop' => 'Stopp', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index e9f47278..7b351214 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -939,6 +939,12 @@ class TranslationsSettingsEn { /// en: 'Display text labels under navigation bar icons' String get showNavBarLabelsDescription => 'Display text labels under navigation bar icons'; + /// en: 'Startup Section' + String get startupSection => 'Startup Section'; + + /// en: 'Choose which section Plezy opens to when it starts' + String get startupSectionDescription => 'Choose which section Plezy opens to when it starts'; + /// en: 'Default to Favorite Channels' String get liveTvDefaultFavorites => 'Default to Favorite Channels'; @@ -4725,6 +4731,8 @@ extension on Translations { 'settings.autoHidePerformanceOverlayDescription' => 'Fade the performance overlay with the playback controls', 'settings.showNavBarLabels' => 'Show Navigation Bar Labels', 'settings.showNavBarLabelsDescription' => 'Display text labels under navigation bar icons', + 'settings.startupSection' => 'Startup Section', + 'settings.startupSectionDescription' => 'Choose which section Plezy opens to when it starts', 'settings.liveTvDefaultFavorites' => 'Default to Favorite Channels', 'settings.liveTvDefaultFavoritesDescription' => 'Show only favorite channels when opening Live TV', 'settings.display' => 'Display', @@ -4969,10 +4977,10 @@ extension on Translations { 'subtitlingStyling.textColor' => 'Text Color', 'subtitlingStyling.borderSize' => 'Border Size', 'subtitlingStyling.borderColor' => 'Border Color', - 'subtitlingStyling.backgroundOpacity' => 'Background Opacity', - 'subtitlingStyling.backgroundColor' => 'Background Color', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Background Opacity', + 'subtitlingStyling.backgroundColor' => 'Background Color', 'subtitlingStyling.position' => 'Position', 'subtitlingStyling.assOverride' => 'ASS Override', 'subtitlingStyling.bold' => 'Bold', @@ -5483,10 +5491,10 @@ extension on Translations { 'companionRemote.remote.tabSearch' => 'Search', 'companionRemote.remote.tabDownloads' => 'Downloads', 'companionRemote.remote.tabSettings' => 'Settings', - 'companionRemote.remote.previous' => 'Previous', - 'companionRemote.remote.playPause' => 'Play/Pause', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Previous', + 'companionRemote.remote.playPause' => 'Play/Pause', 'companionRemote.remote.next' => 'Next', 'companionRemote.remote.seekBack' => 'Seek Back', 'companionRemote.remote.stop' => 'Stop', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 018a7ff5..53423ac4 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Desvanecer la superposición de rendimiento con los controles de reproducción'; @override String get showNavBarLabels => 'Mostrar etiquetas de la barra de navegación'; @override String get showNavBarLabelsDescription => 'Mostrar etiquetas de texto bajo los iconos de la barra de navegación'; + @override String get startupSection => 'Sección de inicio'; + @override String get startupSectionDescription => 'Elige qué sección abre Plezy al iniciarse'; @override String get liveTvDefaultFavorites => 'Canales favoritos por defecto'; @override String get liveTvDefaultFavoritesDescription => 'Mostrar solo canales favoritos al abrir TV en vivo'; @override String get display => 'Pantalla'; @@ -2183,6 +2185,8 @@ extension on TranslationsEs { 'settings.autoHidePerformanceOverlayDescription' => 'Desvanecer la superposición de rendimiento con los controles de reproducción', 'settings.showNavBarLabels' => 'Mostrar etiquetas de la barra de navegación', 'settings.showNavBarLabelsDescription' => 'Mostrar etiquetas de texto bajo los iconos de la barra de navegación', + 'settings.startupSection' => 'Sección de inicio', + 'settings.startupSectionDescription' => 'Elige qué sección abre Plezy al iniciarse', 'settings.liveTvDefaultFavorites' => 'Canales favoritos por defecto', 'settings.liveTvDefaultFavoritesDescription' => 'Mostrar solo canales favoritos al abrir TV en vivo', 'settings.display' => 'Pantalla', @@ -2427,10 +2431,10 @@ extension on TranslationsEs { 'subtitlingStyling.textColor' => 'Color de Texto', 'subtitlingStyling.borderSize' => 'Tamaño de Borde', 'subtitlingStyling.borderColor' => 'Color de Borde', - 'subtitlingStyling.backgroundOpacity' => 'Opacidad de Fondo', - 'subtitlingStyling.backgroundColor' => 'Color de Fondo', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Opacidad de Fondo', + 'subtitlingStyling.backgroundColor' => 'Color de Fondo', 'subtitlingStyling.position' => 'Posición', 'subtitlingStyling.assOverride' => 'Sobreescritura ASS', 'subtitlingStyling.bold' => 'Negrita', @@ -2941,10 +2945,10 @@ extension on TranslationsEs { 'companionRemote.remote.tabSearch' => 'Buscar', 'companionRemote.remote.tabDownloads' => 'Descargas', 'companionRemote.remote.tabSettings' => 'Configuración', - 'companionRemote.remote.previous' => 'Anterior', - 'companionRemote.remote.playPause' => 'Reproducir/Pausar', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Anterior', + 'companionRemote.remote.playPause' => 'Reproducir/Pausar', 'companionRemote.remote.next' => 'Siguiente', 'companionRemote.remote.seekBack' => 'Retroceder', 'companionRemote.remote.stop' => 'Detener', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 39388800..e657b0ed 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Faire apparaître/disparaître la superposition avec les contrôles de lecture'; @override String get showNavBarLabels => 'Afficher les libellés de la barre de navigation'; @override String get showNavBarLabelsDescription => 'Afficher les libellés sous les icônes de la barre de navigation'; + @override String get startupSection => 'Section de démarrage'; + @override String get startupSectionDescription => 'Choisissez la section que Plezy ouvre au démarrage'; @override String get liveTvDefaultFavorites => 'Chaînes favorites par défaut'; @override String get liveTvDefaultFavoritesDescription => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct'; @override String get display => 'Affichage'; @@ -2183,6 +2185,8 @@ extension on TranslationsFr { 'settings.autoHidePerformanceOverlayDescription' => 'Faire apparaître/disparaître la superposition avec les contrôles de lecture', 'settings.showNavBarLabels' => 'Afficher les libellés de la barre de navigation', 'settings.showNavBarLabelsDescription' => 'Afficher les libellés sous les icônes de la barre de navigation', + 'settings.startupSection' => 'Section de démarrage', + 'settings.startupSectionDescription' => 'Choisissez la section que Plezy ouvre au démarrage', 'settings.liveTvDefaultFavorites' => 'Chaînes favorites par défaut', 'settings.liveTvDefaultFavoritesDescription' => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct', 'settings.display' => 'Affichage', @@ -2427,10 +2431,10 @@ extension on TranslationsFr { 'subtitlingStyling.textColor' => 'Couleur du texte', 'subtitlingStyling.borderSize' => 'Taille de la bordure', 'subtitlingStyling.borderColor' => 'Couleur de la bordure', - 'subtitlingStyling.backgroundOpacity' => 'Opacité d\'arrière-plan', - 'subtitlingStyling.backgroundColor' => 'Couleur d\'arrière-plan', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Opacité d\'arrière-plan', + 'subtitlingStyling.backgroundColor' => 'Couleur d\'arrière-plan', 'subtitlingStyling.position' => 'Position', 'subtitlingStyling.assOverride' => 'Remplacement ASS', 'subtitlingStyling.bold' => 'Gras', @@ -2941,10 +2945,10 @@ extension on TranslationsFr { 'companionRemote.remote.tabSearch' => 'Rechercher', 'companionRemote.remote.tabDownloads' => 'Téléchargements', 'companionRemote.remote.tabSettings' => 'Paramètres', - 'companionRemote.remote.previous' => 'Précédent', - 'companionRemote.remote.playPause' => 'Lecture/Pause', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Précédent', + 'companionRemote.remote.playPause' => 'Lecture/Pause', 'companionRemote.remote.next' => 'Suivant', 'companionRemote.remote.seekBack' => 'Reculer', 'companionRemote.remote.stop' => 'Arrêter', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index e5068bb7..86455867 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Dissolvi l\'overlay prestazioni con i controlli di riproduzione'; @override String get showNavBarLabels => 'Mostra etichette barra di navigazione'; @override String get showNavBarLabelsDescription => 'Mostra le etichette sotto le icone della barra di navigazione'; + @override String get startupSection => 'Sezione di avvio'; + @override String get startupSectionDescription => 'Scegli quale sezione apre Plezy all\'avvio'; @override String get liveTvDefaultFavorites => 'Canali preferiti predefiniti'; @override String get liveTvDefaultFavoritesDescription => 'Mostra solo i canali preferiti all\'apertura della TV dal vivo'; @override String get display => 'Schermo'; @@ -2183,6 +2185,8 @@ extension on TranslationsIt { 'settings.autoHidePerformanceOverlayDescription' => 'Dissolvi l\'overlay prestazioni con i controlli di riproduzione', 'settings.showNavBarLabels' => 'Mostra etichette barra di navigazione', 'settings.showNavBarLabelsDescription' => 'Mostra le etichette sotto le icone della barra di navigazione', + 'settings.startupSection' => 'Sezione di avvio', + 'settings.startupSectionDescription' => 'Scegli quale sezione apre Plezy all\'avvio', 'settings.liveTvDefaultFavorites' => 'Canali preferiti predefiniti', 'settings.liveTvDefaultFavoritesDescription' => 'Mostra solo i canali preferiti all\'apertura della TV dal vivo', 'settings.display' => 'Schermo', @@ -2427,10 +2431,10 @@ extension on TranslationsIt { 'subtitlingStyling.textColor' => 'Colore testo', 'subtitlingStyling.borderSize' => 'Dimensione bordo', 'subtitlingStyling.borderColor' => 'Colore bordo', - 'subtitlingStyling.backgroundOpacity' => 'Opacità sfondo', - 'subtitlingStyling.backgroundColor' => 'Colore sfondo', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Opacità sfondo', + 'subtitlingStyling.backgroundColor' => 'Colore sfondo', 'subtitlingStyling.position' => 'Posizione', 'subtitlingStyling.assOverride' => 'Sovrascrittura ASS', 'subtitlingStyling.bold' => 'Grassetto', @@ -2941,10 +2945,10 @@ extension on TranslationsIt { 'companionRemote.remote.tabSearch' => 'Cerca', 'companionRemote.remote.tabDownloads' => 'Download', 'companionRemote.remote.tabSettings' => 'Impostazioni', - 'companionRemote.remote.previous' => 'Precedente', - 'companionRemote.remote.playPause' => 'Riproduci/Pausa', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Precedente', + 'companionRemote.remote.playPause' => 'Riproduci/Pausa', 'companionRemote.remote.next' => 'Successivo', 'companionRemote.remote.seekBack' => 'Riavvolgi', 'companionRemote.remote.stop' => 'Ferma', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 6c1b788b..72dfaf59 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => '再生コントロールと一緒にパフォーマンスオーバーレイをフェードする'; @override String get showNavBarLabels => 'ナビゲーションバーラベルを表示'; @override String get showNavBarLabelsDescription => 'ナビゲーションバーアイコンの下にテキストラベルを表示'; + @override String get startupSection => '起動時のセクション'; + @override String get startupSectionDescription => '起動時に Plezy が開くセクションを選択します'; @override String get liveTvDefaultFavorites => 'お気に入りチャンネルをデフォルトに'; @override String get liveTvDefaultFavoritesDescription => 'ライブTV を開いたときにお気に入りチャンネルのみ表示'; @override String get display => 'ディスプレイ'; @@ -2183,6 +2185,8 @@ extension on TranslationsJa { 'settings.autoHidePerformanceOverlayDescription' => '再生コントロールと一緒にパフォーマンスオーバーレイをフェードする', 'settings.showNavBarLabels' => 'ナビゲーションバーラベルを表示', 'settings.showNavBarLabelsDescription' => 'ナビゲーションバーアイコンの下にテキストラベルを表示', + 'settings.startupSection' => '起動時のセクション', + 'settings.startupSectionDescription' => '起動時に Plezy が開くセクションを選択します', 'settings.liveTvDefaultFavorites' => 'お気に入りチャンネルをデフォルトに', 'settings.liveTvDefaultFavoritesDescription' => 'ライブTV を開いたときにお気に入りチャンネルのみ表示', 'settings.display' => 'ディスプレイ', @@ -2427,10 +2431,10 @@ extension on TranslationsJa { 'subtitlingStyling.textColor' => 'テキストの色', 'subtitlingStyling.borderSize' => '枠線サイズ', 'subtitlingStyling.borderColor' => '枠線の色', - 'subtitlingStyling.backgroundOpacity' => '背景の不透明度', - 'subtitlingStyling.backgroundColor' => '背景色', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => '背景の不透明度', + 'subtitlingStyling.backgroundColor' => '背景色', 'subtitlingStyling.position' => '位置', 'subtitlingStyling.assOverride' => 'ASSオーバーライド', 'subtitlingStyling.bold' => '太字', @@ -2941,10 +2945,10 @@ extension on TranslationsJa { 'companionRemote.remote.tabSearch' => '検索', 'companionRemote.remote.tabDownloads' => 'ダウンロード', 'companionRemote.remote.tabSettings' => '設定', - 'companionRemote.remote.previous' => '前へ', - 'companionRemote.remote.playPause' => '再生/一時停止', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => '前へ', + 'companionRemote.remote.playPause' => '再生/一時停止', 'companionRemote.remote.next' => '次へ', 'companionRemote.remote.seekBack' => '巻き戻し', 'companionRemote.remote.stop' => '停止', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index a827e965..0ddad951 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => '재생 컨트롤과 함께 성능 오버레이를 페이드 처리'; @override String get showNavBarLabels => '내비게이션 바 라벨 표시'; @override String get showNavBarLabelsDescription => '내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다'; + @override String get startupSection => '시작 섹션'; + @override String get startupSectionDescription => 'Plezy 실행 시 열릴 섹션을 선택합니다'; @override String get liveTvDefaultFavorites => '즐겨찾기 채널 기본 설정'; @override String get liveTvDefaultFavoritesDescription => '라이브 TV를 열 때 즐겨찾기 채널만 표시'; @override String get display => '디스플레이'; @@ -2183,6 +2185,8 @@ extension on TranslationsKo { 'settings.autoHidePerformanceOverlayDescription' => '재생 컨트롤과 함께 성능 오버레이를 페이드 처리', 'settings.showNavBarLabels' => '내비게이션 바 라벨 표시', 'settings.showNavBarLabelsDescription' => '내비게이션 바 아이콘 아래에 텍스트 라벨을 표시합니다', + 'settings.startupSection' => '시작 섹션', + 'settings.startupSectionDescription' => 'Plezy 실행 시 열릴 섹션을 선택합니다', 'settings.liveTvDefaultFavorites' => '즐겨찾기 채널 기본 설정', 'settings.liveTvDefaultFavoritesDescription' => '라이브 TV를 열 때 즐겨찾기 채널만 표시', 'settings.display' => '디스플레이', @@ -2427,10 +2431,10 @@ extension on TranslationsKo { 'subtitlingStyling.textColor' => '텍스트 색상', 'subtitlingStyling.borderSize' => '테두리 크기', 'subtitlingStyling.borderColor' => '테두리 색상', - 'subtitlingStyling.backgroundOpacity' => '배경 불투명도', - 'subtitlingStyling.backgroundColor' => '배경색', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => '배경 불투명도', + 'subtitlingStyling.backgroundColor' => '배경색', 'subtitlingStyling.position' => '위치', 'subtitlingStyling.assOverride' => 'ASS 오버라이드', 'subtitlingStyling.bold' => '굵게', @@ -2941,10 +2945,10 @@ extension on TranslationsKo { 'companionRemote.remote.tabSearch' => '검색', 'companionRemote.remote.tabDownloads' => '다운로드', 'companionRemote.remote.tabSettings' => '설정', - 'companionRemote.remote.previous' => '이전', - 'companionRemote.remote.playPause' => '재생/일시정지', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => '이전', + 'companionRemote.remote.playPause' => '재생/일시정지', 'companionRemote.remote.next' => '다음', 'companionRemote.remote.seekBack' => '되감기', 'companionRemote.remote.stop' => '정지', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index d9262faf..6dc141e9 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Fade ytelsesoverlegget med avspillingskontrollene'; @override String get showNavBarLabels => 'Vis navigasjonsfeltlabeler'; @override String get showNavBarLabelsDescription => 'Vis tekstlabeler under navigasjonsfeltikoner'; + @override String get startupSection => 'Oppstartsseksjon'; + @override String get startupSectionDescription => 'Velg hvilken seksjon Plezy åpner ved oppstart'; @override String get liveTvDefaultFavorites => 'Standard til favorittkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Vis kun favorittkanaler når du åpner Live TV'; @override String get display => 'Skjerm'; @@ -2183,6 +2185,8 @@ extension on TranslationsNb { 'settings.autoHidePerformanceOverlayDescription' => 'Fade ytelsesoverlegget med avspillingskontrollene', 'settings.showNavBarLabels' => 'Vis navigasjonsfeltlabeler', 'settings.showNavBarLabelsDescription' => 'Vis tekstlabeler under navigasjonsfeltikoner', + 'settings.startupSection' => 'Oppstartsseksjon', + 'settings.startupSectionDescription' => 'Velg hvilken seksjon Plezy åpner ved oppstart', 'settings.liveTvDefaultFavorites' => 'Standard til favorittkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Vis kun favorittkanaler når du åpner Live TV', 'settings.display' => 'Skjerm', @@ -2427,10 +2431,10 @@ extension on TranslationsNb { 'subtitlingStyling.textColor' => 'Tekstfarge', 'subtitlingStyling.borderSize' => 'Kantstørrelse', 'subtitlingStyling.borderColor' => 'Kantfarge', - 'subtitlingStyling.backgroundOpacity' => 'Bakgrunnsopasitet', - 'subtitlingStyling.backgroundColor' => 'Bakgrunnsfarge', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Bakgrunnsopasitet', + 'subtitlingStyling.backgroundColor' => 'Bakgrunnsfarge', 'subtitlingStyling.position' => 'Posisjon', 'subtitlingStyling.assOverride' => 'ASS-overstyring', 'subtitlingStyling.bold' => 'Fet', @@ -2941,10 +2945,10 @@ extension on TranslationsNb { 'companionRemote.remote.tabSearch' => 'Søk', 'companionRemote.remote.tabDownloads' => 'Nedlastinger', 'companionRemote.remote.tabSettings' => 'Innstillinger', - 'companionRemote.remote.previous' => 'Forrige', - 'companionRemote.remote.playPause' => 'Spill av/Pause', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Forrige', + 'companionRemote.remote.playPause' => 'Spill av/Pause', 'companionRemote.remote.next' => 'Neste', 'companionRemote.remote.seekBack' => 'Spol tilbake', 'companionRemote.remote.stop' => 'Stopp', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 3dab0586..3d08b65a 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Laat de prestatie-overlay meevervagen met de afspeelknoppen'; @override String get showNavBarLabels => 'Navigatiebalk labels tonen'; @override String get showNavBarLabelsDescription => 'Tekstlabels onder de pictogrammen van de navigatiebalk weergeven'; + @override String get startupSection => 'Opstartsectie'; + @override String get startupSectionDescription => 'Kies welke sectie Plezy opent bij het opstarten'; @override String get liveTvDefaultFavorites => 'Standaard favoriete zenders'; @override String get liveTvDefaultFavoritesDescription => 'Toon alleen favoriete zenders bij het openen van Live TV'; @override String get display => 'Weergave'; @@ -2183,6 +2185,8 @@ extension on TranslationsNl { 'settings.autoHidePerformanceOverlayDescription' => 'Laat de prestatie-overlay meevervagen met de afspeelknoppen', 'settings.showNavBarLabels' => 'Navigatiebalk labels tonen', 'settings.showNavBarLabelsDescription' => 'Tekstlabels onder de pictogrammen van de navigatiebalk weergeven', + 'settings.startupSection' => 'Opstartsectie', + 'settings.startupSectionDescription' => 'Kies welke sectie Plezy opent bij het opstarten', 'settings.liveTvDefaultFavorites' => 'Standaard favoriete zenders', 'settings.liveTvDefaultFavoritesDescription' => 'Toon alleen favoriete zenders bij het openen van Live TV', 'settings.display' => 'Weergave', @@ -2427,10 +2431,10 @@ extension on TranslationsNl { 'subtitlingStyling.textColor' => 'Tekstkleur', 'subtitlingStyling.borderSize' => 'Rand grootte', 'subtitlingStyling.borderColor' => 'Randkleur', - 'subtitlingStyling.backgroundOpacity' => 'Achtergrond transparantie', - 'subtitlingStyling.backgroundColor' => 'Achtergrondkleur', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Achtergrond transparantie', + 'subtitlingStyling.backgroundColor' => 'Achtergrondkleur', 'subtitlingStyling.position' => 'Positie', 'subtitlingStyling.assOverride' => 'ASS-overschrijving', 'subtitlingStyling.bold' => 'Vet', @@ -2941,10 +2945,10 @@ extension on TranslationsNl { 'companionRemote.remote.tabSearch' => 'Zoeken', 'companionRemote.remote.tabDownloads' => 'Downloads', 'companionRemote.remote.tabSettings' => 'Instellingen', - 'companionRemote.remote.previous' => 'Vorige', - 'companionRemote.remote.playPause' => 'Afspelen/Pauzeren', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Vorige', + 'companionRemote.remote.playPause' => 'Afspelen/Pauzeren', 'companionRemote.remote.next' => 'Volgende', 'companionRemote.remote.seekBack' => 'Terugspoelen', 'companionRemote.remote.stop' => 'Stoppen', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 70547888..d94d5e95 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania'; @override String get showNavBarLabels => 'Pokaż etykiety paska nawigacji'; @override String get showNavBarLabelsDescription => 'Wyświetl tekstowe etykiety pod ikonami paska nawigacji'; + @override String get startupSection => 'Sekcja startowa'; + @override String get startupSectionDescription => 'Wybierz, którą sekcję Plezy otwiera przy uruchomieniu'; @override String get liveTvDefaultFavorites => 'Domyślnie ulubione kanały'; @override String get liveTvDefaultFavoritesDescription => 'Pokaż tylko ulubione kanały po otwarciu telewizji na żywo'; @override String get display => 'Ekran'; @@ -2183,6 +2185,8 @@ extension on TranslationsPl { 'settings.autoHidePerformanceOverlayDescription' => 'Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania', 'settings.showNavBarLabels' => 'Pokaż etykiety paska nawigacji', 'settings.showNavBarLabelsDescription' => 'Wyświetl tekstowe etykiety pod ikonami paska nawigacji', + 'settings.startupSection' => 'Sekcja startowa', + 'settings.startupSectionDescription' => 'Wybierz, którą sekcję Plezy otwiera przy uruchomieniu', 'settings.liveTvDefaultFavorites' => 'Domyślnie ulubione kanały', 'settings.liveTvDefaultFavoritesDescription' => 'Pokaż tylko ulubione kanały po otwarciu telewizji na żywo', 'settings.display' => 'Ekran', @@ -2427,10 +2431,10 @@ extension on TranslationsPl { 'subtitlingStyling.textColor' => 'Kolor tekstu', 'subtitlingStyling.borderSize' => 'Rozmiar obramowania', 'subtitlingStyling.borderColor' => 'Kolor obramowania', - 'subtitlingStyling.backgroundOpacity' => 'Przezroczystość tła', - 'subtitlingStyling.backgroundColor' => 'Kolor tła', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Przezroczystość tła', + 'subtitlingStyling.backgroundColor' => 'Kolor tła', 'subtitlingStyling.position' => 'Pozycja', 'subtitlingStyling.assOverride' => 'Nadpisywanie ASS', 'subtitlingStyling.bold' => 'Pogrubienie', @@ -2941,10 +2945,10 @@ extension on TranslationsPl { 'companionRemote.remote.tabSearch' => 'Szukaj', 'companionRemote.remote.tabDownloads' => 'Pobrania', 'companionRemote.remote.tabSettings' => 'Ustawienia', - 'companionRemote.remote.previous' => 'Poprzedni', - 'companionRemote.remote.playPause' => 'Odtwórz/Pauza', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Poprzedni', + 'companionRemote.remote.playPause' => 'Odtwórz/Pauza', 'companionRemote.remote.next' => 'Następny', 'companionRemote.remote.seekBack' => 'Przewiń wstecz', 'companionRemote.remote.stop' => 'Stop', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index edea3e3d..66de92b1 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Desvanecer o overlay de desempenho com os controles de reprodução'; @override String get showNavBarLabels => 'Mostrar Rótulos da Barra de Navegação'; @override String get showNavBarLabelsDescription => 'Exibir rótulos de texto sob os ícones da barra de navegação'; + @override String get startupSection => 'Seção inicial'; + @override String get startupSectionDescription => 'Escolha qual seção o Plezy abre ao iniciar'; @override String get liveTvDefaultFavorites => 'Canais favoritos por padrão'; @override String get liveTvDefaultFavoritesDescription => 'Mostrar apenas canais favoritos ao abrir TV ao vivo'; @override String get display => 'Tela'; @@ -2183,6 +2185,8 @@ extension on TranslationsPt { 'settings.autoHidePerformanceOverlayDescription' => 'Desvanecer o overlay de desempenho com os controles de reprodução', 'settings.showNavBarLabels' => 'Mostrar Rótulos da Barra de Navegação', 'settings.showNavBarLabelsDescription' => 'Exibir rótulos de texto sob os ícones da barra de navegação', + 'settings.startupSection' => 'Seção inicial', + 'settings.startupSectionDescription' => 'Escolha qual seção o Plezy abre ao iniciar', 'settings.liveTvDefaultFavorites' => 'Canais favoritos por padrão', 'settings.liveTvDefaultFavoritesDescription' => 'Mostrar apenas canais favoritos ao abrir TV ao vivo', 'settings.display' => 'Tela', @@ -2427,10 +2431,10 @@ extension on TranslationsPt { 'subtitlingStyling.textColor' => 'Cor do Texto', 'subtitlingStyling.borderSize' => 'Tamanho da Borda', 'subtitlingStyling.borderColor' => 'Cor da Borda', - 'subtitlingStyling.backgroundOpacity' => 'Opacidade do Fundo', - 'subtitlingStyling.backgroundColor' => 'Cor de Fundo', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Opacidade do Fundo', + 'subtitlingStyling.backgroundColor' => 'Cor de Fundo', 'subtitlingStyling.position' => 'Posição', 'subtitlingStyling.assOverride' => 'Substituição ASS', 'subtitlingStyling.bold' => 'Negrito', @@ -2941,10 +2945,10 @@ extension on TranslationsPt { 'companionRemote.remote.tabSearch' => 'Buscar', 'companionRemote.remote.tabDownloads' => 'Downloads', 'companionRemote.remote.tabSettings' => 'Configurações', - 'companionRemote.remote.previous' => 'Anterior', - 'companionRemote.remote.playPause' => 'Reproduzir/Pausar', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Anterior', + 'companionRemote.remote.playPause' => 'Reproduzir/Pausar', 'companionRemote.remote.next' => 'Próximo', 'companionRemote.remote.seekBack' => 'Retroceder', 'companionRemote.remote.stop' => 'Parar', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index c453c071..41be4dde 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Скрывать оверлей производительности вместе с элементами управления воспроизведением'; @override String get showNavBarLabels => 'Показывать подписи панели навигации'; @override String get showNavBarLabelsDescription => 'Отображать текстовые подписи под иконками панели навигации'; + @override String get startupSection => 'Начальный раздел'; + @override String get startupSectionDescription => 'Выберите, какой раздел Plezy открывает при запуске'; @override String get liveTvDefaultFavorites => 'Избранные каналы по умолчанию'; @override String get liveTvDefaultFavoritesDescription => 'Показывать только избранные каналы при открытии ТВ'; @override String get display => 'Экран'; @@ -2183,6 +2185,8 @@ extension on TranslationsRu { 'settings.autoHidePerformanceOverlayDescription' => 'Скрывать оверлей производительности вместе с элементами управления воспроизведением', 'settings.showNavBarLabels' => 'Показывать подписи панели навигации', 'settings.showNavBarLabelsDescription' => 'Отображать текстовые подписи под иконками панели навигации', + 'settings.startupSection' => 'Начальный раздел', + 'settings.startupSectionDescription' => 'Выберите, какой раздел Plezy открывает при запуске', 'settings.liveTvDefaultFavorites' => 'Избранные каналы по умолчанию', 'settings.liveTvDefaultFavoritesDescription' => 'Показывать только избранные каналы при открытии ТВ', 'settings.display' => 'Экран', @@ -2427,10 +2431,10 @@ extension on TranslationsRu { 'subtitlingStyling.textColor' => 'Цвет текста', 'subtitlingStyling.borderSize' => 'Размер обводки', 'subtitlingStyling.borderColor' => 'Цвет обводки', - 'subtitlingStyling.backgroundOpacity' => 'Прозрачность фона', - 'subtitlingStyling.backgroundColor' => 'Цвет фона', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Прозрачность фона', + 'subtitlingStyling.backgroundColor' => 'Цвет фона', 'subtitlingStyling.position' => 'Позиция', 'subtitlingStyling.assOverride' => 'Переопределение ASS', 'subtitlingStyling.bold' => 'Жирный', @@ -2941,10 +2945,10 @@ extension on TranslationsRu { 'companionRemote.remote.tabSearch' => 'Поиск', 'companionRemote.remote.tabDownloads' => 'Загрузки', 'companionRemote.remote.tabSettings' => 'Настройки', - 'companionRemote.remote.previous' => 'Предыдущий', - 'companionRemote.remote.playPause' => 'Воспроизведение/Пауза', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Предыдущий', + 'companionRemote.remote.playPause' => 'Воспроизведение/Пауза', 'companionRemote.remote.next' => 'Следующий', 'companionRemote.remote.seekBack' => 'Назад', 'companionRemote.remote.stop' => 'Стоп', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index a040baa9..c9d69900 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => 'Tona prestandaöverlagringen med uppspelningskontrollerna'; @override String get showNavBarLabels => 'Visa navigeringsfältets etiketter'; @override String get showNavBarLabelsDescription => 'Visa textetiketter under navigeringsfältets ikoner'; + @override String get startupSection => 'Startsektion'; + @override String get startupSectionDescription => 'Välj vilken sektion Plezy öppnar vid start'; @override String get liveTvDefaultFavorites => 'Standard till favoritkanaler'; @override String get liveTvDefaultFavoritesDescription => 'Visa bara favoritkanaler när du öppnar Live TV'; @override String get display => 'Skärm'; @@ -2183,6 +2185,8 @@ extension on TranslationsSv { 'settings.autoHidePerformanceOverlayDescription' => 'Tona prestandaöverlagringen med uppspelningskontrollerna', 'settings.showNavBarLabels' => 'Visa navigeringsfältets etiketter', 'settings.showNavBarLabelsDescription' => 'Visa textetiketter under navigeringsfältets ikoner', + 'settings.startupSection' => 'Startsektion', + 'settings.startupSectionDescription' => 'Välj vilken sektion Plezy öppnar vid start', 'settings.liveTvDefaultFavorites' => 'Standard till favoritkanaler', 'settings.liveTvDefaultFavoritesDescription' => 'Visa bara favoritkanaler när du öppnar Live TV', 'settings.display' => 'Skärm', @@ -2427,10 +2431,10 @@ extension on TranslationsSv { 'subtitlingStyling.textColor' => 'Textfärg', 'subtitlingStyling.borderSize' => 'Kantstorlek', 'subtitlingStyling.borderColor' => 'Kantfärg', - 'subtitlingStyling.backgroundOpacity' => 'Bakgrundsopacitet', - 'subtitlingStyling.backgroundColor' => 'Bakgrundsfärg', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => 'Bakgrundsopacitet', + 'subtitlingStyling.backgroundColor' => 'Bakgrundsfärg', 'subtitlingStyling.position' => 'Position', 'subtitlingStyling.assOverride' => 'ASS-åsidosättning', 'subtitlingStyling.bold' => 'Fet', @@ -2941,10 +2945,10 @@ extension on TranslationsSv { 'companionRemote.remote.tabSearch' => 'Sök', 'companionRemote.remote.tabDownloads' => 'Nedladdningar', 'companionRemote.remote.tabSettings' => 'Inställningar', - 'companionRemote.remote.previous' => 'Föregående', - 'companionRemote.remote.playPause' => 'Spela/Pausa', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => 'Föregående', + 'companionRemote.remote.playPause' => 'Spela/Pausa', 'companionRemote.remote.next' => 'Nästa', 'companionRemote.remote.seekBack' => 'Spola bakåt', 'companionRemote.remote.stop' => 'Stopp', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index f906d17c..f573f217 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -405,6 +405,8 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get autoHidePerformanceOverlayDescription => '性能叠加层随播放控件一起淡入淡出'; @override String get showNavBarLabels => '显示导航栏标签'; @override String get showNavBarLabelsDescription => '在导航栏图标下方显示文字标签'; + @override String get startupSection => '启动页面'; + @override String get startupSectionDescription => '选择 Plezy 启动时打开的页面'; @override String get liveTvDefaultFavorites => '默认显示收藏频道'; @override String get liveTvDefaultFavoritesDescription => '打开直播电视时仅显示收藏频道'; @override String get display => '显示'; @@ -2183,6 +2185,8 @@ extension on TranslationsZh { 'settings.autoHidePerformanceOverlayDescription' => '性能叠加层随播放控件一起淡入淡出', 'settings.showNavBarLabels' => '显示导航栏标签', 'settings.showNavBarLabelsDescription' => '在导航栏图标下方显示文字标签', + 'settings.startupSection' => '启动页面', + 'settings.startupSectionDescription' => '选择 Plezy 启动时打开的页面', 'settings.liveTvDefaultFavorites' => '默认显示收藏频道', 'settings.liveTvDefaultFavoritesDescription' => '打开直播电视时仅显示收藏频道', 'settings.display' => '显示', @@ -2427,10 +2431,10 @@ extension on TranslationsZh { 'subtitlingStyling.textColor' => '文本颜色', 'subtitlingStyling.borderSize' => '边框大小', 'subtitlingStyling.borderColor' => '边框颜色', - 'subtitlingStyling.backgroundOpacity' => '背景不透明度', - 'subtitlingStyling.backgroundColor' => '背景颜色', _ => null, } ?? switch (path) { + 'subtitlingStyling.backgroundOpacity' => '背景不透明度', + 'subtitlingStyling.backgroundColor' => '背景颜色', 'subtitlingStyling.position' => '位置', 'subtitlingStyling.assOverride' => 'ASS 样式覆盖', 'subtitlingStyling.bold' => '粗体', @@ -2941,10 +2945,10 @@ extension on TranslationsZh { 'companionRemote.remote.tabSearch' => '搜索', 'companionRemote.remote.tabDownloads' => '下载', 'companionRemote.remote.tabSettings' => '设置', - 'companionRemote.remote.previous' => '上一个', - 'companionRemote.remote.playPause' => '播放/暂停', _ => null, } ?? switch (path) { + 'companionRemote.remote.previous' => '上一个', + 'companionRemote.remote.playPause' => '播放/暂停', 'companionRemote.remote.next' => '下一个', 'companionRemote.remote.seekBack' => '后退', 'companionRemote.remote.stop' => '停止', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index a26b81b8..1e98b82f 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "Tona prestandaöverlagringen med uppspelningskontrollerna", "showNavBarLabels": "Visa navigeringsfältets etiketter", "showNavBarLabelsDescription": "Visa textetiketter under navigeringsfältets ikoner", + "startupSection": "Startsektion", + "startupSectionDescription": "Välj vilken sektion Plezy öppnar vid start", "liveTvDefaultFavorites": "Standard till favoritkanaler", "liveTvDefaultFavoritesDescription": "Visa bara favoritkanaler när du öppnar Live TV", "display": "Skärm", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 1d9184d1..86943266 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -276,6 +276,8 @@ "autoHidePerformanceOverlayDescription": "性能叠加层随播放控件一起淡入淡出", "showNavBarLabels": "显示导航栏标签", "showNavBarLabelsDescription": "在导航栏图标下方显示文字标签", + "startupSection": "启动页面", + "startupSectionDescription": "选择 Plezy 启动时打开的页面", "liveTvDefaultFavorites": "默认显示收藏频道", "liveTvDefaultFavoritesDescription": "打开直播电视时仅显示收藏频道", "display": "显示", diff --git a/lib/navigation/navigation_tabs.dart b/lib/navigation/navigation_tabs.dart index d16e5f7b..f51131de 100644 --- a/lib/navigation/navigation_tabs.dart +++ b/lib/navigation/navigation_tabs.dart @@ -36,6 +36,26 @@ class NavigationTab { return true; }).toList(); } + + /// Resolve which tab the app should open to on launch. + /// + /// Offline mode prefers Downloads when available. Online, honours the user's + /// [preferredStartup] section when it is currently visible, otherwise falls + /// back to the first visible tab (Home). + static NavigationTabId resolveDefaultTab({ + required bool isOffline, + required bool hasLiveTv, + required NavigationTabId? preferredStartup, + }) { + final tabs = getVisibleTabs(isOffline: isOffline, hasLiveTv: hasLiveTv); + if (isOffline && tabs.any((t) => t.id == NavigationTabId.downloads)) { + return NavigationTabId.downloads; + } + if (preferredStartup != null && tabs.any((t) => t.id == preferredStartup)) { + return preferredStartup; + } + return tabs.first.id; + } } // Label getters (must be top-level for const constructor) diff --git a/lib/screens/main_screen.dart b/lib/screens/main_screen.dart index 869f7530..48f2d3d9 100644 --- a/lib/screens/main_screen.dart +++ b/lib/screens/main_screen.dart @@ -233,6 +233,11 @@ class _MainScreenState extends State /// Last selected online tab (restored when coming back online after an offline fallback) NavigationTabId? _lastOnlineTabId; + /// A preferred startup section (e.g. Live TV) that wasn't visible yet at cold + /// start because servers bind asynchronously. Applied once it becomes + /// available (see [_handleLiveTvChanged]); cleared on any explicit selection. + NavigationTabId? _pendingStartupTab; + /// Whether we auto-switched to Downloads because the previous tab was unavailable offline bool _autoSwitchedToDownloads = false; @@ -331,6 +336,12 @@ class _MainScreenState extends State _currentTab = _defaultTabForMode(_isOffline); _lastOnlineTabId = _isOffline ? null : NavigationTabId.discover; _autoSwitchedToDownloads = _isOffline && _currentTab == NavigationTabId.downloads; + // If the preferred startup section isn't visible yet (e.g. Live TV before + // servers finish binding), remember it and switch once it becomes available. + final preferredStartup = SettingsService.instanceOrNull?.read(SettingsService.startupSection); + _pendingStartupTab = (!_isOffline && preferredStartup != null && preferredStartup != _currentTab) + ? preferredStartup + : null; _screens = _buildScreens(_isOffline); // Set up Watch Together callbacks immediately (must be synchronous to catch early messages) @@ -917,14 +928,11 @@ class _MainScreenState extends State return _defaultTabForMode(isOffline); } - NavigationTabId _defaultTabForMode(bool isOffline) { - final tabs = _getVisibleTabs(isOffline); - if (isOffline) { - final downloads = tabs.where((t) => t.id == NavigationTabId.downloads).firstOrNull; - if (downloads != null) return downloads.id; - } - return tabs.first.id; - } + NavigationTabId _defaultTabForMode(bool isOffline) => NavigationTab.resolveDefaultTab( + isOffline: isOffline, + hasLiveTv: _hasLiveTv, + preferredStartup: SettingsService.instanceOrNull?.read(SettingsService.startupSection), + ); void _triggerReconnect() { if (_isReconnecting) return; @@ -971,6 +979,14 @@ class _MainScreenState extends State _currentTab = _normalizeTabForMode(_currentTab, _isOffline); }); _updateTvosMenuPassthrough(); + + // A preferred startup section (only Live TV can be deferred) just became + // available — switch to it via _selectTab so it gets the usual visibility + // and focus handling. _selectTab clears _pendingStartupTab. + final pending = _pendingStartupTab; + if (pending != null && _getVisibleTabs(_isOffline).any((t) => t.id == pending)) { + _selectTab(pending); + } } void _handleOfflineStatusChanged() { @@ -1355,6 +1371,8 @@ class _MainScreenState extends State final previousTab = _currentTab; setState(() { _currentTab = tab; + // An explicit selection cancels any deferred startup-section switch. + _pendingStartupTab = null; if (!_isOffline) { _lastOnlineTabId = tab; } else if (previousTab != tab) { diff --git a/lib/screens/settings/appearance_settings_screen.dart b/lib/screens/settings/appearance_settings_screen.dart index fe97fbf4..cded048b 100644 --- a/lib/screens/settings/appearance_settings_screen.dart +++ b/lib/screens/settings/appearance_settings_screen.dart @@ -8,6 +8,7 @@ import 'package:provider/provider.dart'; import '../../i18n/strings.g.dart'; import '../../providers/theme_provider.dart'; import '../../profiles/active_profile_provider.dart'; +import '../../navigation/navigation_tabs.dart'; import '../../services/settings_service.dart' hide ThemeMode; import '../../services/settings_service.dart' as settings show ThemeMode; import '../../focus/focusable_slider.dart'; @@ -76,6 +77,7 @@ class AppearanceSettingsScreen extends StatelessWidget { ), SettingsSectionHeader(t.settings.navigation), + _startupSectionSelector(), if (Platform.isAndroid) SettingSwitchTile( pref: SettingsService.forceTvMode, @@ -250,6 +252,27 @@ class AppearanceSettingsScreen extends StatelessWidget { encode: (v) => v, ); + // Sections offered as a startup destination, in display order. Live TV is + // always listed; if no server provides it, startup falls back to Home. + static const _startupSectionOptions = [ + NavigationTabId.discover, + NavigationTabId.libraries, + NavigationTabId.liveTv, + NavigationTabId.search, + ]; + + String _startupSectionLabel(NavigationTabId id) => allNavigationTabs.firstWhere((t) => t.id == id).getLabel(); + + Widget _startupSectionSelector() => SettingSelectionTile( + pref: SettingsService.startupSection, + icon: Symbols.start_rounded, + title: t.settings.startupSection, + subtitleBuilder: _startupSectionLabel, + options: _startupSectionOptions.map((id) => DialogOption(value: id, title: _startupSectionLabel(id))).toList(), + decode: (v) => v, + encode: (v) => v, + ); + Widget _requireProfileSelection() { return Consumer( builder: (context, activeProvider, _) { diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 74f4a7bd..8964b65a 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -14,6 +14,7 @@ import 'base_shared_preferences_service.dart'; export 'base_shared_preferences_service.dart' show Pref, BoolPref, IntPref, DoublePref, StringPref, NullableStringPref, StringListPref, EnumPref, JsonPref; import '../models/transcode_quality_preset.dart'; +import '../navigation/navigation_tabs.dart'; import '../utils/platform_detector.dart'; import 'trackers/tracker_constants.dart'; @@ -344,6 +345,11 @@ class SettingsService extends BaseSharedPreferencesService { ); static const autoPlayNextEpisode = BoolPref('auto_play_next_episode', defaultValue: true); static const useExoPlayer = BoolPref('use_exoplayer', defaultValue: true); + static const startupSection = EnumPref( + 'startup_section', + values: NavigationTabId.values, + defaultValue: NavigationTabId.discover, + ); static const alwaysKeepSidebarOpen = BoolPref('always_keep_sidebar_open'); static const showUnwatchedCount = BoolPref('show_unwatched_count', defaultValue: true); static const showEpisodeNumberOnCards = BoolPref('show_episode_number_on_cards', defaultValue: true); @@ -729,6 +735,7 @@ class SettingsService extends BaseSharedPreferencesService { defaultBoxFitMode, autoPlayNextEpisode, useExoPlayer, + startupSection, alwaysKeepSidebarOpen, showUnwatchedCount, showEpisodeNumberOnCards, diff --git a/test/navigation/navigation_tabs_test.dart b/test/navigation/navigation_tabs_test.dart new file mode 100644 index 00000000..52ca1c4b --- /dev/null +++ b/test/navigation/navigation_tabs_test.dart @@ -0,0 +1,45 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/navigation/navigation_tabs.dart'; + +void main() { + group('NavigationTab.resolveDefaultTab', () { + test('offline prefers Downloads when available', () { + expect( + NavigationTab.resolveDefaultTab(isOffline: true, hasLiveTv: false, preferredStartup: null), + NavigationTabId.downloads, + ); + }); + + test('offline ignores an online-only preferred section', () { + expect( + NavigationTab.resolveDefaultTab(isOffline: true, hasLiveTv: true, preferredStartup: NavigationTabId.liveTv), + NavigationTabId.downloads, + ); + }); + + test('online honours the preferred section when it is visible', () { + expect( + NavigationTab.resolveDefaultTab(isOffline: false, hasLiveTv: true, preferredStartup: NavigationTabId.liveTv), + NavigationTabId.liveTv, + ); + expect( + NavigationTab.resolveDefaultTab(isOffline: false, hasLiveTv: false, preferredStartup: NavigationTabId.search), + NavigationTabId.search, + ); + }); + + test('online falls back to Home when preferred Live TV is unavailable', () { + expect( + NavigationTab.resolveDefaultTab(isOffline: false, hasLiveTv: false, preferredStartup: NavigationTabId.liveTv), + NavigationTabId.discover, + ); + }); + + test('online defaults to Home when no preference is set', () { + expect( + NavigationTab.resolveDefaultTab(isOffline: false, hasLiveTv: true, preferredStartup: null), + NavigationTabId.discover, + ); + }); + }); +}