feat: episode next/prev hotkeys

close #897
This commit is contained in:
edde746
2026-04-20 16:34:46 +02:00
parent 4667b104d2
commit 6d265e7bae
35 changed files with 154 additions and 34 deletions
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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à",
+2
View File
@@ -254,6 +254,8 @@
"subtitleTrackNext": "次の字幕トラック",
"chapterNext": "次のチャプター",
"chapterPrevious": "前のチャプター",
"episodeNext": "次のエピソード",
"episodePrevious": "前のエピソード",
"speedIncrease": "速度を上げる",
"speedDecrease": "速度を下げる",
"speedReset": "速度をリセット",
+2
View File
@@ -254,6 +254,8 @@
"subtitleTrackNext": "다음 자막 트랙",
"chapterNext": "다음 챕터",
"chapterPrevious": "이전 챕터",
"episodeNext": "다음 에피소드",
"episodePrevious": "이전 에피소드",
"speedIncrease": "속도 높이기",
"speedDecrease": "속도 낮추기",
"speedReset": "속도 초기화",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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ść",
+2
View File
@@ -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",
+2
View File
@@ -254,6 +254,8 @@
"subtitleTrackNext": "Следующая дорожка субтитров",
"chapterNext": "Следующая глава",
"chapterPrevious": "Предыдущая глава",
"episodeNext": "Следующая серия",
"episodePrevious": "Предыдущая серия",
"speedIncrease": "Увеличить скорость",
"speedDecrease": "Уменьшить скорость",
"speedReset": "Сбросить скорость",
+2 -2
View File
@@ -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
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+10 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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' => '追加日',
+6 -2
View File
@@ -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' => '추가 날짜',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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' => 'Дата добавления',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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' => '添加日期',
+2
View File
@@ -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",
+2
View File
@@ -254,6 +254,8 @@
"subtitleTrackNext": "下一字幕轨",
"chapterNext": "下一章节",
"chapterPrevious": "上一章节",
"episodeNext": "下一集",
"episodePrevious": "上一集",
"speedIncrease": "加速",
"speedDecrease": "减速",
"speedReset": "重置速度",
+6 -2
View File
@@ -151,6 +151,7 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> 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<VideoPlayerScreen> with WidgetsBindin
}
Future<void> _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!);
}
@@ -139,6 +139,8 @@ class KeyboardShortcutsService {
VoidCallback? onBack,
VoidCallback? onToggleShader,
VoidCallback? onSkipMarker,
VoidCallback? onNextEpisode,
VoidCallback? onPreviousEpisode,
int? currentPositionEpoch,
ValueChanged<int>? 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<int>? 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':
+2
View File
@@ -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),
@@ -1721,6 +1721,8 @@ class _PlexVideoControlsState extends State<PlexVideoControls> 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<PlexVideoControls> 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,
);