From 6d265e7bae106c3df41db04e189640168976d70c Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:30:58 +0200 Subject: [PATCH] feat: episode next/prev hotkeys close #897 --- 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 | 4 ++-- lib/i18n/strings_da.g.dart | 8 ++++++-- lib/i18n/strings_de.g.dart | 8 ++++++-- lib/i18n/strings_en.g.dart | 12 ++++++++++-- lib/i18n/strings_es.g.dart | 8 ++++++-- lib/i18n/strings_fr.g.dart | 8 ++++++-- lib/i18n/strings_it.g.dart | 8 ++++++-- lib/i18n/strings_ja.g.dart | 8 ++++++-- lib/i18n/strings_ko.g.dart | 8 ++++++-- lib/i18n/strings_nb.g.dart | 8 ++++++-- lib/i18n/strings_nl.g.dart | 8 ++++++-- lib/i18n/strings_pl.g.dart | 8 ++++++-- lib/i18n/strings_pt.g.dart | 8 ++++++-- lib/i18n/strings_ru.g.dart | 8 ++++++-- lib/i18n/strings_sv.g.dart | 8 ++++++-- lib/i18n/strings_zh.g.dart | 8 ++++++-- lib/i18n/sv.i18n.json | 2 ++ lib/i18n/zh.i18n.json | 2 ++ lib/screens/video_player_screen.dart | 8 ++++++-- lib/services/keyboard_shortcuts_service.dart | 16 ++++++++++++++++ lib/services/settings_service.dart | 2 ++ lib/widgets/video_controls/video_controls.dart | 4 ++++ 35 files changed, 154 insertions(+), 34 deletions(-) diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index cfb0d996..10767165 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Næste undertekstspor", "chapterNext": "Næste kapitel", "chapterPrevious": "Forrige kapitel", + "episodeNext": "Næste afsnit", + "episodePrevious": "Forrige afsnit", "speedIncrease": "Øg hastighed", "speedDecrease": "Sænk hastighed", "speedReset": "Nulstil hastighed", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index ebc2a56c..b532d308 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Nächste Untertitelspur", "chapterNext": "Nächstes Kapitel", "chapterPrevious": "Vorheriges Kapitel", + "episodeNext": "Nächste Episode", + "episodePrevious": "Vorherige Episode", "speedIncrease": "Geschwindigkeit erhöhen", "speedDecrease": "Geschwindigkeit verringern", "speedReset": "Geschwindigkeit zurücksetzen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index e4da2af2..7914b30f 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Next Subtitle Track", "chapterNext": "Next Chapter", "chapterPrevious": "Previous Chapter", + "episodeNext": "Next Episode", + "episodePrevious": "Previous Episode", "speedIncrease": "Increase Speed", "speedDecrease": "Decrease Speed", "speedReset": "Reset Speed", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 446fae0d..e29fe882 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Siguiente Pista de Subtítulos", "chapterNext": "Siguiente Capítulo", "chapterPrevious": "Anterior Capítulo", + "episodeNext": "Siguiente Episodio", + "episodePrevious": "Anterior Episodio", "speedIncrease": "Aumentar Velocidad", "speedDecrease": "Disminuir Velocidad", "speedReset": "Restablecer Velocidad", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 2c5d3e03..d042800c 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Piste de sous-titres suivante", "chapterNext": "Chapitre suivant", "chapterPrevious": "Chapitre précédent", + "episodeNext": "Épisode suivant", + "episodePrevious": "Épisode précédent", "speedIncrease": "Augmenter la vitesse", "speedDecrease": "Réduire la vitesse", "speedReset": "Réinitialiser la vitesse", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 261b640d..19f0de1d 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Sottotitoli successivi", "chapterNext": "Capitolo successivo", "chapterPrevious": "Capitolo precedente", + "episodeNext": "Episodio successivo", + "episodePrevious": "Episodio precedente", "speedIncrease": "Aumenta velocità", "speedDecrease": "Diminuisci velocità", "speedReset": "Ripristina velocità", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index aae25db9..47760589 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "次の字幕トラック", "chapterNext": "次のチャプター", "chapterPrevious": "前のチャプター", + "episodeNext": "次のエピソード", + "episodePrevious": "前のエピソード", "speedIncrease": "速度を上げる", "speedDecrease": "速度を下げる", "speedReset": "速度をリセット", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index f60a45c6..5766826f 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "다음 자막 트랙", "chapterNext": "다음 챕터", "chapterPrevious": "이전 챕터", + "episodeNext": "다음 에피소드", + "episodePrevious": "이전 에피소드", "speedIncrease": "속도 높이기", "speedDecrease": "속도 낮추기", "speedReset": "속도 초기화", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 9887c304..205e4145 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Neste undertekstspor", "chapterNext": "Neste kapittel", "chapterPrevious": "Forrige kapittel", + "episodeNext": "Neste episode", + "episodePrevious": "Forrige episode", "speedIncrease": "Øk hastighet", "speedDecrease": "Reduser hastighet", "speedReset": "Tilbakestill hastighet", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index c359771c..287daaa7 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Volgende ondertiteltrack", "chapterNext": "Volgend hoofdstuk", "chapterPrevious": "Vorig hoofdstuk", + "episodeNext": "Volgende aflevering", + "episodePrevious": "Vorige aflevering", "speedIncrease": "Snelheid verhogen", "speedDecrease": "Snelheid verlagen", "speedReset": "Snelheid resetten", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index 248e0f8c..97df2dbc 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Następna ścieżka napisów", "chapterNext": "Następny rozdział", "chapterPrevious": "Poprzedni rozdział", + "episodeNext": "Następny odcinek", + "episodePrevious": "Poprzedni odcinek", "speedIncrease": "Zwiększ prędkość", "speedDecrease": "Zmniejsz prędkość", "speedReset": "Zresetuj prędkość", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index d782f5f2..63afa50c 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Próxima Faixa de Legenda", "chapterNext": "Próximo Capítulo", "chapterPrevious": "Capítulo Anterior", + "episodeNext": "Próximo Episódio", + "episodePrevious": "Episódio Anterior", "speedIncrease": "Aumentar Velocidade", "speedDecrease": "Diminuir Velocidade", "speedReset": "Redefinir Velocidade", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index ffbe7d7a..8bd31468 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Следующая дорожка субтитров", "chapterNext": "Следующая глава", "chapterPrevious": "Предыдущая глава", + "episodeNext": "Следующая серия", + "episodePrevious": "Предыдущая серия", "speedIncrease": "Увеличить скорость", "speedDecrease": "Уменьшить скорость", "speedReset": "Сбросить скорость", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index a8e9480c..539ac58b 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 15 -/// Strings: 13260 (884 per locale) +/// Strings: 13290 (886 per locale) /// -/// Built on 2026-04-19 at 14:14 UTC +/// Built on 2026-04-20 at 14:18 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 17f84c74..502a3af3 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsDa implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Næste undertekstspor'; @override String get chapterNext => 'Næste kapitel'; @override String get chapterPrevious => 'Forrige kapitel'; + @override String get episodeNext => 'Næste afsnit'; + @override String get episodePrevious => 'Forrige afsnit'; @override String get speedIncrease => 'Øg hastighed'; @override String get speedDecrease => 'Sænk hastighed'; @override String get speedReset => 'Nulstil hastighed'; @@ -1630,6 +1632,8 @@ extension on TranslationsDa { 'hotkeys.actions.subtitleTrackNext' => 'Næste undertekstspor', 'hotkeys.actions.chapterNext' => 'Næste kapitel', 'hotkeys.actions.chapterPrevious' => 'Forrige kapitel', + 'hotkeys.actions.episodeNext' => 'Næste afsnit', + 'hotkeys.actions.episodePrevious' => 'Forrige afsnit', 'hotkeys.actions.speedIncrease' => 'Øg hastighed', 'hotkeys.actions.speedDecrease' => 'Sænk hastighed', 'hotkeys.actions.speedReset' => 'Nulstil hastighed', @@ -1901,10 +1905,10 @@ extension on TranslationsDa { 'about.appDescription' => 'En smuk Plex-klient til Flutter', 'about.viewLicensesDescription' => 'Se licenser for tredjepartsbiblioteker', 'serverSelection.allServerConnectionsFailed' => 'Kunne ikke forbinde til nogen servere. Tjek dit netværk og prøv igen.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere fundet for ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke indlæse servere: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere fundet for ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke indlæse servere: ${error}', 'hubDetail.title' => 'Titel', 'hubDetail.releaseYear' => 'Udgivelsesår', 'hubDetail.dateAdded' => 'Tilføjelsesdato', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 37904fb1..15de6669 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsDe implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Nächste Untertitelspur'; @override String get chapterNext => 'Nächstes Kapitel'; @override String get chapterPrevious => 'Vorheriges Kapitel'; + @override String get episodeNext => 'Nächste Episode'; + @override String get episodePrevious => 'Vorherige Episode'; @override String get speedIncrease => 'Geschwindigkeit erhöhen'; @override String get speedDecrease => 'Geschwindigkeit verringern'; @override String get speedReset => 'Geschwindigkeit zurücksetzen'; @@ -1630,6 +1632,8 @@ extension on TranslationsDe { 'hotkeys.actions.subtitleTrackNext' => 'Nächste Untertitelspur', 'hotkeys.actions.chapterNext' => 'Nächstes Kapitel', 'hotkeys.actions.chapterPrevious' => 'Vorheriges Kapitel', + 'hotkeys.actions.episodeNext' => 'Nächste Episode', + 'hotkeys.actions.episodePrevious' => 'Vorherige Episode', 'hotkeys.actions.speedIncrease' => 'Geschwindigkeit erhöhen', 'hotkeys.actions.speedDecrease' => 'Geschwindigkeit verringern', 'hotkeys.actions.speedReset' => 'Geschwindigkeit zurücksetzen', @@ -1901,10 +1905,10 @@ extension on TranslationsDe { 'about.appDescription' => 'Ein schöner Plex-Client für Flutter', 'about.viewLicensesDescription' => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen', 'serverSelection.allServerConnectionsFailed' => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Server konnten nicht geladen werden: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Keine Server gefunden für ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Server konnten nicht geladen werden: ${error}', 'hubDetail.title' => 'Titel', 'hubDetail.releaseYear' => 'Erscheinungsjahr', 'hubDetail.dateAdded' => 'Hinzugefügt am', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 5e5ce6e3..c4992b05 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -2866,6 +2866,12 @@ class TranslationsHotkeysActionsEn { /// en: 'Previous Chapter' String get chapterPrevious => 'Previous Chapter'; + /// en: 'Next Episode' + String get episodeNext => 'Next Episode'; + + /// en: 'Previous Episode' + String get episodePrevious => 'Previous Episode'; + /// en: 'Increase Speed' String get speedIncrease => 'Increase Speed'; @@ -3405,6 +3411,8 @@ extension on Translations { 'hotkeys.actions.subtitleTrackNext' => 'Next Subtitle Track', 'hotkeys.actions.chapterNext' => 'Next Chapter', 'hotkeys.actions.chapterPrevious' => 'Previous Chapter', + 'hotkeys.actions.episodeNext' => 'Next Episode', + 'hotkeys.actions.episodePrevious' => 'Previous Episode', 'hotkeys.actions.speedIncrease' => 'Increase Speed', 'hotkeys.actions.speedDecrease' => 'Decrease Speed', 'hotkeys.actions.speedReset' => 'Reset Speed', @@ -3676,10 +3684,10 @@ extension on Translations { 'about.appDescription' => 'A beautiful Plex client for Flutter', 'about.viewLicensesDescription' => 'View licenses of third-party libraries', 'serverSelection.allServerConnectionsFailed' => 'Failed to connect to any servers. Please check your network and try again.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No servers found for ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Failed to load servers: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No servers found for ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Failed to load servers: ${error}', 'hubDetail.title' => 'Title', 'hubDetail.releaseYear' => 'Release Year', 'hubDetail.dateAdded' => 'Date Added', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 31fefe88..601536bf 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsEs implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Siguiente Pista de Subtítulos'; @override String get chapterNext => 'Siguiente Capítulo'; @override String get chapterPrevious => 'Anterior Capítulo'; + @override String get episodeNext => 'Siguiente Episodio'; + @override String get episodePrevious => 'Anterior Episodio'; @override String get speedIncrease => 'Aumentar Velocidad'; @override String get speedDecrease => 'Disminuir Velocidad'; @override String get speedReset => 'Restablecer Velocidad'; @@ -1630,6 +1632,8 @@ extension on TranslationsEs { 'hotkeys.actions.subtitleTrackNext' => 'Siguiente Pista de Subtítulos', 'hotkeys.actions.chapterNext' => 'Siguiente Capítulo', 'hotkeys.actions.chapterPrevious' => 'Anterior Capítulo', + 'hotkeys.actions.episodeNext' => 'Siguiente Episodio', + 'hotkeys.actions.episodePrevious' => 'Anterior Episodio', 'hotkeys.actions.speedIncrease' => 'Aumentar Velocidad', 'hotkeys.actions.speedDecrease' => 'Disminuir Velocidad', 'hotkeys.actions.speedReset' => 'Restablecer Velocidad', @@ -1901,10 +1905,10 @@ extension on TranslationsEs { 'about.appDescription' => 'Un cliente de Plex para Flutter', 'about.viewLicensesDescription' => 'Ver licencias de librerías de terceros', 'serverSelection.allServerConnectionsFailed' => 'No se pudo conectar con ningún servidor. Por favor, comprueba tu conexión e inténtalo de nuevo.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No se encontraron servidores para ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Error al cargar servidores: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No se encontraron servidores para ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Error al cargar servidores: ${error}', 'hubDetail.title' => 'Título', 'hubDetail.releaseYear' => 'Año de lanzamiento', 'hubDetail.dateAdded' => 'Añadido el', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index a284ab1f..ff43a505 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsFr implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Piste de sous-titres suivante'; @override String get chapterNext => 'Chapitre suivant'; @override String get chapterPrevious => 'Chapitre précédent'; + @override String get episodeNext => 'Épisode suivant'; + @override String get episodePrevious => 'Épisode précédent'; @override String get speedIncrease => 'Augmenter la vitesse'; @override String get speedDecrease => 'Réduire la vitesse'; @override String get speedReset => 'Réinitialiser la vitesse'; @@ -1630,6 +1632,8 @@ extension on TranslationsFr { 'hotkeys.actions.subtitleTrackNext' => 'Piste de sous-titres suivante', 'hotkeys.actions.chapterNext' => 'Chapitre suivant', 'hotkeys.actions.chapterPrevious' => 'Chapitre précédent', + 'hotkeys.actions.episodeNext' => 'Épisode suivant', + 'hotkeys.actions.episodePrevious' => 'Épisode précédent', 'hotkeys.actions.speedIncrease' => 'Augmenter la vitesse', 'hotkeys.actions.speedDecrease' => 'Réduire la vitesse', 'hotkeys.actions.speedReset' => 'Réinitialiser la vitesse', @@ -1901,10 +1905,10 @@ extension on TranslationsFr { 'about.appDescription' => 'Un magnifique client Plex pour Flutter', 'about.viewLicensesDescription' => 'Afficher les licences des bibliothèques tierces', 'serverSelection.allServerConnectionsFailed' => 'Impossible de se connecter à un serveur. Veuillez vérifier votre connexion réseau et réessayer.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Échec du chargement des serveurs: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Échec du chargement des serveurs: ${error}', 'hubDetail.title' => 'Titre', 'hubDetail.releaseYear' => 'Année de sortie', 'hubDetail.dateAdded' => 'Date d\'ajout', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 6fa08014..5e3c3a59 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsIt implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Sottotitoli successivi'; @override String get chapterNext => 'Capitolo successivo'; @override String get chapterPrevious => 'Capitolo precedente'; + @override String get episodeNext => 'Episodio successivo'; + @override String get episodePrevious => 'Episodio precedente'; @override String get speedIncrease => 'Aumenta velocità'; @override String get speedDecrease => 'Diminuisci velocità'; @override String get speedReset => 'Ripristina velocità'; @@ -1630,6 +1632,8 @@ extension on TranslationsIt { 'hotkeys.actions.subtitleTrackNext' => 'Sottotitoli successivi', 'hotkeys.actions.chapterNext' => 'Capitolo successivo', 'hotkeys.actions.chapterPrevious' => 'Capitolo precedente', + 'hotkeys.actions.episodeNext' => 'Episodio successivo', + 'hotkeys.actions.episodePrevious' => 'Episodio precedente', 'hotkeys.actions.speedIncrease' => 'Aumenta velocità', 'hotkeys.actions.speedDecrease' => 'Diminuisci velocità', 'hotkeys.actions.speedReset' => 'Ripristina velocità', @@ -1901,10 +1905,10 @@ extension on TranslationsIt { 'about.appDescription' => 'Un bellissimo client Plex per Flutter', 'about.viewLicensesDescription' => 'Visualizza le licenze delle librerie di terze parti', 'serverSelection.allServerConnectionsFailed' => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Impossibile caricare i server: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nessun server trovato per ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Impossibile caricare i server: ${error}', 'hubDetail.title' => 'Titolo', 'hubDetail.releaseYear' => 'Anno rilascio', 'hubDetail.dateAdded' => 'Data aggiunta', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 77e65295..2c5e749d 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsJa implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => '次の字幕トラック'; @override String get chapterNext => '次のチャプター'; @override String get chapterPrevious => '前のチャプター'; + @override String get episodeNext => '次のエピソード'; + @override String get episodePrevious => '前のエピソード'; @override String get speedIncrease => '速度を上げる'; @override String get speedDecrease => '速度を下げる'; @override String get speedReset => '速度をリセット'; @@ -1630,6 +1632,8 @@ extension on TranslationsJa { 'hotkeys.actions.subtitleTrackNext' => '次の字幕トラック', 'hotkeys.actions.chapterNext' => '次のチャプター', 'hotkeys.actions.chapterPrevious' => '前のチャプター', + 'hotkeys.actions.episodeNext' => '次のエピソード', + 'hotkeys.actions.episodePrevious' => '前のエピソード', 'hotkeys.actions.speedIncrease' => '速度を上げる', 'hotkeys.actions.speedDecrease' => '速度を下げる', 'hotkeys.actions.speedReset' => '速度をリセット', @@ -1901,10 +1905,10 @@ extension on TranslationsJa { 'about.appDescription' => 'Flutter製の美しいPlexクライアント', 'about.viewLicensesDescription' => 'サードパーティライブラリのライセンスを表示', 'serverSelection.allServerConnectionsFailed' => 'どのサーバーにも接続できませんでした。ネットワークを確認してもう一度お試しください。', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})のサーバーが見つかりません', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'サーバーの読み込みに失敗しました: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})のサーバーが見つかりません', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'サーバーの読み込みに失敗しました: ${error}', 'hubDetail.title' => 'タイトル', 'hubDetail.releaseYear' => '公開年', 'hubDetail.dateAdded' => '追加日', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 12369054..28d39b31 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsKo implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => '다음 자막 트랙'; @override String get chapterNext => '다음 챕터'; @override String get chapterPrevious => '이전 챕터'; + @override String get episodeNext => '다음 에피소드'; + @override String get episodePrevious => '이전 에피소드'; @override String get speedIncrease => '속도 높이기'; @override String get speedDecrease => '속도 낮추기'; @override String get speedReset => '속도 초기화'; @@ -1630,6 +1632,8 @@ extension on TranslationsKo { 'hotkeys.actions.subtitleTrackNext' => '다음 자막 트랙', 'hotkeys.actions.chapterNext' => '다음 챕터', 'hotkeys.actions.chapterPrevious' => '이전 챕터', + 'hotkeys.actions.episodeNext' => '다음 에피소드', + 'hotkeys.actions.episodePrevious' => '이전 에피소드', 'hotkeys.actions.speedIncrease' => '속도 높이기', 'hotkeys.actions.speedDecrease' => '속도 낮추기', 'hotkeys.actions.speedReset' => '속도 초기화', @@ -1901,10 +1905,10 @@ extension on TranslationsKo { 'about.appDescription' => '아름다운 Flutter Plex 클라이언트', 'about.viewLicensesDescription' => '타사 라이브러리 라이선스 보기', 'serverSelection.allServerConnectionsFailed' => '어떤 서버에도 연결할 수 없습니다. 네트워크를 확인하고 다시 시도하세요.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.', - 'serverSelection.failedToLoadServers' => ({required Object error}) => '서버를 로드할 수 없습니다: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '${username} (${email})의 서버를 찾을 수 없습니다.', + 'serverSelection.failedToLoadServers' => ({required Object error}) => '서버를 로드할 수 없습니다: ${error}', 'hubDetail.title' => '제목', 'hubDetail.releaseYear' => '출시 연도', 'hubDetail.dateAdded' => '추가 날짜', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index 8fdb960f..6edebf6d 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsNb implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Neste undertekstspor'; @override String get chapterNext => 'Neste kapittel'; @override String get chapterPrevious => 'Forrige kapittel'; + @override String get episodeNext => 'Neste episode'; + @override String get episodePrevious => 'Forrige episode'; @override String get speedIncrease => 'Øk hastighet'; @override String get speedDecrease => 'Reduser hastighet'; @override String get speedReset => 'Tilbakestill hastighet'; @@ -1630,6 +1632,8 @@ extension on TranslationsNb { 'hotkeys.actions.subtitleTrackNext' => 'Neste undertekstspor', 'hotkeys.actions.chapterNext' => 'Neste kapittel', 'hotkeys.actions.chapterPrevious' => 'Forrige kapittel', + 'hotkeys.actions.episodeNext' => 'Neste episode', + 'hotkeys.actions.episodePrevious' => 'Forrige episode', 'hotkeys.actions.speedIncrease' => 'Øk hastighet', 'hotkeys.actions.speedDecrease' => 'Reduser hastighet', 'hotkeys.actions.speedReset' => 'Tilbakestill hastighet', @@ -1901,10 +1905,10 @@ extension on TranslationsNb { 'about.appDescription' => 'En vakker Plex-klient for Flutter', 'about.viewLicensesDescription' => 'Vis lisenser for tredjepartsbiblioteker', 'serverSelection.allServerConnectionsFailed' => 'Kunne ikke koble til noen servere. Sjekk nettverket ditt og prøv igjen.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere funnet for ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke laste servere: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Ingen servere funnet for ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kunne ikke laste servere: ${error}', 'hubDetail.title' => 'Tittel', 'hubDetail.releaseYear' => 'Utgivelsesår', 'hubDetail.dateAdded' => 'Dato lagt til', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 31a57f1c..d9bfa6b6 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsNl implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Volgende ondertiteltrack'; @override String get chapterNext => 'Volgend hoofdstuk'; @override String get chapterPrevious => 'Vorig hoofdstuk'; + @override String get episodeNext => 'Volgende aflevering'; + @override String get episodePrevious => 'Vorige aflevering'; @override String get speedIncrease => 'Snelheid verhogen'; @override String get speedDecrease => 'Snelheid verlagen'; @override String get speedReset => 'Snelheid resetten'; @@ -1630,6 +1632,8 @@ extension on TranslationsNl { 'hotkeys.actions.subtitleTrackNext' => 'Volgende ondertiteltrack', 'hotkeys.actions.chapterNext' => 'Volgend hoofdstuk', 'hotkeys.actions.chapterPrevious' => 'Vorig hoofdstuk', + 'hotkeys.actions.episodeNext' => 'Volgende aflevering', + 'hotkeys.actions.episodePrevious' => 'Vorige aflevering', 'hotkeys.actions.speedIncrease' => 'Snelheid verhogen', 'hotkeys.actions.speedDecrease' => 'Snelheid verlagen', 'hotkeys.actions.speedReset' => 'Snelheid resetten', @@ -1901,10 +1905,10 @@ extension on TranslationsNl { 'about.appDescription' => 'Een mooie Plex client voor Flutter', 'about.viewLicensesDescription' => 'Bekijk licenties van third-party bibliotheken', 'serverSelection.allServerConnectionsFailed' => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kon servers niet laden: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Geen servers gevonden voor ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Kon servers niet laden: ${error}', 'hubDetail.title' => 'Titel', 'hubDetail.releaseYear' => 'Uitgavejaar', 'hubDetail.dateAdded' => 'Datum toegevoegd', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index be5ced98..9e5adece 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsPl implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Następna ścieżka napisów'; @override String get chapterNext => 'Następny rozdział'; @override String get chapterPrevious => 'Poprzedni rozdział'; + @override String get episodeNext => 'Następny odcinek'; + @override String get episodePrevious => 'Poprzedni odcinek'; @override String get speedIncrease => 'Zwiększ prędkość'; @override String get speedDecrease => 'Zmniejsz prędkość'; @override String get speedReset => 'Zresetuj prędkość'; @@ -1630,6 +1632,8 @@ extension on TranslationsPl { 'hotkeys.actions.subtitleTrackNext' => 'Następna ścieżka napisów', 'hotkeys.actions.chapterNext' => 'Następny rozdział', 'hotkeys.actions.chapterPrevious' => 'Poprzedni rozdział', + 'hotkeys.actions.episodeNext' => 'Następny odcinek', + 'hotkeys.actions.episodePrevious' => 'Poprzedni odcinek', 'hotkeys.actions.speedIncrease' => 'Zwiększ prędkość', 'hotkeys.actions.speedDecrease' => 'Zmniejsz prędkość', 'hotkeys.actions.speedReset' => 'Zresetuj prędkość', @@ -1901,10 +1905,10 @@ extension on TranslationsPl { 'about.appDescription' => 'Piękny klient Plex na Flutter', 'about.viewLicensesDescription' => 'Zobacz licencje bibliotek zewnętrznych', 'serverSelection.allServerConnectionsFailed' => 'Nie udało się połączyć z żadnym serwerem. Sprawdź sieć i spróbuj ponownie.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nie znaleziono serwerów dla ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Nie udało się załadować serwerów: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nie znaleziono serwerów dla ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Nie udało się załadować serwerów: ${error}', 'hubDetail.title' => 'Tytuł', 'hubDetail.releaseYear' => 'Rok premiery', 'hubDetail.dateAdded' => 'Data dodania', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 93519c13..97df50d5 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsPt implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Próxima Faixa de Legenda'; @override String get chapterNext => 'Próximo Capítulo'; @override String get chapterPrevious => 'Capítulo Anterior'; + @override String get episodeNext => 'Próximo Episódio'; + @override String get episodePrevious => 'Episódio Anterior'; @override String get speedIncrease => 'Aumentar Velocidade'; @override String get speedDecrease => 'Diminuir Velocidade'; @override String get speedReset => 'Redefinir Velocidade'; @@ -1630,6 +1632,8 @@ extension on TranslationsPt { 'hotkeys.actions.subtitleTrackNext' => 'Próxima Faixa de Legenda', 'hotkeys.actions.chapterNext' => 'Próximo Capítulo', 'hotkeys.actions.chapterPrevious' => 'Capítulo Anterior', + 'hotkeys.actions.episodeNext' => 'Próximo Episódio', + 'hotkeys.actions.episodePrevious' => 'Episódio Anterior', 'hotkeys.actions.speedIncrease' => 'Aumentar Velocidade', 'hotkeys.actions.speedDecrease' => 'Diminuir Velocidade', 'hotkeys.actions.speedReset' => 'Redefinir Velocidade', @@ -1901,10 +1905,10 @@ extension on TranslationsPt { 'about.appDescription' => 'Um belo cliente Plex para Flutter', 'about.viewLicensesDescription' => 'Ver licenças de bibliotecas de terceiros', 'serverSelection.allServerConnectionsFailed' => 'Falha ao conectar a qualquer servidor. Verifique sua rede e tente novamente.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nenhum servidor encontrado para ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Falha ao carregar servidores: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Nenhum servidor encontrado para ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Falha ao carregar servidores: ${error}', 'hubDetail.title' => 'Título', 'hubDetail.releaseYear' => 'Ano de Lançamento', 'hubDetail.dateAdded' => 'Data de Adição', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index dccf35dd..a3d3da2c 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsRu implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Следующая дорожка субтитров'; @override String get chapterNext => 'Следующая глава'; @override String get chapterPrevious => 'Предыдущая глава'; + @override String get episodeNext => 'Следующая серия'; + @override String get episodePrevious => 'Предыдущая серия'; @override String get speedIncrease => 'Увеличить скорость'; @override String get speedDecrease => 'Уменьшить скорость'; @override String get speedReset => 'Сбросить скорость'; @@ -1630,6 +1632,8 @@ extension on TranslationsRu { 'hotkeys.actions.subtitleTrackNext' => 'Следующая дорожка субтитров', 'hotkeys.actions.chapterNext' => 'Следующая глава', 'hotkeys.actions.chapterPrevious' => 'Предыдущая глава', + 'hotkeys.actions.episodeNext' => 'Следующая серия', + 'hotkeys.actions.episodePrevious' => 'Предыдущая серия', 'hotkeys.actions.speedIncrease' => 'Увеличить скорость', 'hotkeys.actions.speedDecrease' => 'Уменьшить скорость', 'hotkeys.actions.speedReset' => 'Сбросить скорость', @@ -1901,10 +1905,10 @@ extension on TranslationsRu { 'about.appDescription' => 'Красивый клиент Plex на Flutter', 'about.viewLicensesDescription' => 'Просмотр лицензий сторонних библиотек', 'serverSelection.allServerConnectionsFailed' => 'Не удалось подключиться ни к одному серверу. Проверьте сеть и попробуйте снова.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Серверы не найдены для ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Не удалось загрузить серверы: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Серверы не найдены для ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Не удалось загрузить серверы: ${error}', 'hubDetail.title' => 'Название', 'hubDetail.releaseYear' => 'Год выпуска', 'hubDetail.dateAdded' => 'Дата добавления', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index 40389149..d62ab48b 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsSv implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => 'Nästa undertextspår'; @override String get chapterNext => 'Nästa kapitel'; @override String get chapterPrevious => 'Föregående kapitel'; + @override String get episodeNext => 'Nästa avsnitt'; + @override String get episodePrevious => 'Föregående avsnitt'; @override String get speedIncrease => 'Öka hastighet'; @override String get speedDecrease => 'Minska hastighet'; @override String get speedReset => 'Återställ hastighet'; @@ -1630,6 +1632,8 @@ extension on TranslationsSv { 'hotkeys.actions.subtitleTrackNext' => 'Nästa undertextspår', 'hotkeys.actions.chapterNext' => 'Nästa kapitel', 'hotkeys.actions.chapterPrevious' => 'Föregående kapitel', + 'hotkeys.actions.episodeNext' => 'Nästa avsnitt', + 'hotkeys.actions.episodePrevious' => 'Föregående avsnitt', 'hotkeys.actions.speedIncrease' => 'Öka hastighet', 'hotkeys.actions.speedDecrease' => 'Minska hastighet', 'hotkeys.actions.speedReset' => 'Återställ hastighet', @@ -1901,10 +1905,10 @@ extension on TranslationsSv { 'about.appDescription' => 'En vacker Plex-klient för Flutter', 'about.viewLicensesDescription' => 'Visa licenser för tredjepartsbibliotek', 'serverSelection.allServerConnectionsFailed' => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})', - 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Misslyckades att ladda servrar: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Inga servrar hittades för ${username} (${email})', + 'serverSelection.failedToLoadServers' => ({required Object error}) => 'Misslyckades att ladda servrar: ${error}', 'hubDetail.title' => 'Titel', 'hubDetail.releaseYear' => 'Utgivningsår', 'hubDetail.dateAdded' => 'Datum tillagd', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index ab853d00..b330067b 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -1248,6 +1248,8 @@ class _TranslationsHotkeysActionsZh implements TranslationsHotkeysActionsEn { @override String get subtitleTrackNext => '下一字幕轨'; @override String get chapterNext => '下一章节'; @override String get chapterPrevious => '上一章节'; + @override String get episodeNext => '下一集'; + @override String get episodePrevious => '上一集'; @override String get speedIncrease => '加速'; @override String get speedDecrease => '减速'; @override String get speedReset => '重置速度'; @@ -1630,6 +1632,8 @@ extension on TranslationsZh { 'hotkeys.actions.subtitleTrackNext' => '下一字幕轨', 'hotkeys.actions.chapterNext' => '下一章节', 'hotkeys.actions.chapterPrevious' => '上一章节', + 'hotkeys.actions.episodeNext' => '下一集', + 'hotkeys.actions.episodePrevious' => '上一集', 'hotkeys.actions.speedIncrease' => '加速', 'hotkeys.actions.speedDecrease' => '减速', 'hotkeys.actions.speedReset' => '重置速度', @@ -1901,10 +1905,10 @@ extension on TranslationsZh { 'about.appDescription' => '一款精美的 Flutter Plex 客户端', 'about.viewLicensesDescription' => '查看第三方库的许可证', 'serverSelection.allServerConnectionsFailed' => '无法连接到任何服务器。请检查你的网络并重试。', - 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器', - 'serverSelection.failedToLoadServers' => ({required Object error}) => '无法加载服务器: ${error}', _ => null, } ?? switch (path) { + 'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => '未找到 ${username} (${email}) 的服务器', + 'serverSelection.failedToLoadServers' => ({required Object error}) => '无法加载服务器: ${error}', 'hubDetail.title' => '标题', 'hubDetail.releaseYear' => '发行年份', 'hubDetail.dateAdded' => '添加日期', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index d965db3a..d5f47c21 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "Nästa undertextspår", "chapterNext": "Nästa kapitel", "chapterPrevious": "Föregående kapitel", + "episodeNext": "Nästa avsnitt", + "episodePrevious": "Föregående avsnitt", "speedIncrease": "Öka hastighet", "speedDecrease": "Minska hastighet", "speedReset": "Återställ hastighet", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 75fd34aa..5862d636 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -254,6 +254,8 @@ "subtitleTrackNext": "下一字幕轨", "chapterNext": "下一章节", "chapterPrevious": "上一章节", + "episodeNext": "下一集", + "episodePrevious": "上一集", "speedIncrease": "加速", "speedDecrease": "减速", "speedReset": "重置速度", diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 8b4e17c0..504db5c8 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -151,6 +151,7 @@ class VideoPlayerScreenState extends State with WidgetsBindin PlexMetadata? _nextEpisode; PlexMetadata? _previousEpisode; bool _isLoadingNext = false; + bool _isLoadingPrevious = false; bool _isSwappingEpisode = false; bool _showPlayNextDialog = false; bool _isPhone = false; @@ -2438,11 +2439,14 @@ class VideoPlayerScreenState extends State with WidgetsBindin } Future _playPrevious() async { - if (_previousEpisode == null) return; + if (_previousEpisode == null || _isLoadingPrevious) return; - // Notify Watch Together of episode change before navigating _notifyWatchTogetherMediaChange(metadata: _previousEpisode); + setState(() { + _isLoadingPrevious = true; + }); + await _navigateToEpisode(_previousEpisode!); } diff --git a/lib/services/keyboard_shortcuts_service.dart b/lib/services/keyboard_shortcuts_service.dart index 5338da83..5cf6b7f0 100644 --- a/lib/services/keyboard_shortcuts_service.dart +++ b/lib/services/keyboard_shortcuts_service.dart @@ -139,6 +139,8 @@ class KeyboardShortcutsService { VoidCallback? onBack, VoidCallback? onToggleShader, VoidCallback? onSkipMarker, + VoidCallback? onNextEpisode, + VoidCallback? onPreviousEpisode, int? currentPositionEpoch, ValueChanged? onLiveSeek, }) { @@ -218,6 +220,8 @@ class KeyboardShortcutsService { onPreviousChapter, onToggleShader: onToggleShader, onSkipMarker: onSkipMarker, + onNextEpisode: onNextEpisode, + onPreviousEpisode: onPreviousEpisode, currentPositionEpoch: currentPositionEpoch, onLiveSeek: onLiveSeek, ); @@ -239,6 +243,8 @@ class KeyboardShortcutsService { VoidCallback? onPreviousChapter, { VoidCallback? onToggleShader, VoidCallback? onSkipMarker, + VoidCallback? onNextEpisode, + VoidCallback? onPreviousEpisode, int? currentPositionEpoch, ValueChanged? onLiveSeek, }) { @@ -300,6 +306,12 @@ class KeyboardShortcutsService { case 'chapter_previous': onPreviousChapter?.call(); break; + case 'episode_next': + onNextEpisode?.call(); + break; + case 'episode_previous': + onPreviousEpisode?.call(); + break; case 'speed_increase': final newRateUp = (player.state.rate + 0.25).clamp(0.25, 3.0); player.setRate(newRateUp); @@ -360,6 +372,10 @@ class KeyboardShortcutsService { return t.hotkeys.actions.chapterNext; case 'chapter_previous': return t.hotkeys.actions.chapterPrevious; + case 'episode_next': + return t.hotkeys.actions.episodeNext; + case 'episode_previous': + return t.hotkeys.actions.episodePrevious; case 'speed_increase': return t.hotkeys.actions.speedIncrease; case 'speed_decrease': diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index f02c7ca2..c05b38ae 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -528,6 +528,8 @@ class SettingsService extends BaseSharedPreferencesService { 'subtitle_track_next': const HotKey(key: PhysicalKeyboardKey.keyS, modifiers: [HotKeyModifier.shift]), 'chapter_next': const HotKey(key: PhysicalKeyboardKey.keyN), 'chapter_previous': const HotKey(key: PhysicalKeyboardKey.keyP), + 'episode_next': const HotKey(key: PhysicalKeyboardKey.keyN, modifiers: [HotKeyModifier.shift]), + 'episode_previous': const HotKey(key: PhysicalKeyboardKey.keyP, modifiers: [HotKeyModifier.shift]), 'speed_increase': const HotKey(key: PhysicalKeyboardKey.equal), 'speed_decrease': const HotKey(key: PhysicalKeyboardKey.minus), 'speed_reset': const HotKey(key: PhysicalKeyboardKey.keyR), diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index eefbddf1..38fa9f59 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -1721,6 +1721,8 @@ class _PlexVideoControlsState extends State with WindowListen _previousChapter, onBack: widget.onBack ?? () => Navigator.of(context).pop(true), onToggleShader: _toggleShader, + onNextEpisode: widget.onNext, + onPreviousEpisode: widget.onPrevious, currentPositionEpoch: widget.currentPositionEpoch, onLiveSeek: widget.onLiveSeek, ); @@ -1953,6 +1955,8 @@ class _PlexVideoControlsState extends State with WindowListen onBack: widget.onBack ?? () => Navigator.of(context).pop(true), onToggleShader: _toggleShader, onSkipMarker: _performAutoSkip, + onNextEpisode: widget.onNext, + onPreviousEpisode: widget.onPrevious, currentPositionEpoch: widget.currentPositionEpoch, onLiveSeek: widget.onLiveSeek, );