feat(player): toggle chapter timeline markers

close #973
This commit is contained in:
edde746
2026-05-06 05:26:47 +02:00
parent e8769e7059
commit 1f09c07e96
40 changed files with 209 additions and 63 deletions
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutter",
"rememberTrackSelections": "Husk sporvalg per serie/film",
"rememberTrackSelectionsDescription": "Gem automatisk lyd- og undertekstsprogpræferencer når du skifter spor under afspilning",
"showChapterMarkersOnTimeline": "Vis kapitelmarkører på tidslinjen",
"showChapterMarkersOnTimelineDescription": "Opdel tidslinjen ved kapitelgrænser",
"clickVideoTogglesPlayback": "Klik på video skifter afspil/pause",
"clickVideoTogglesPlaybackDescription": "Når aktiveret, afspiller/pauser klik på videoen. Ellers vises/skjules betjeningselementer.",
"videoPlayerControls": "Videoafspillerkontroller",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} Minuten",
"rememberTrackSelections": "Spurauswahl pro Serie/Film merken",
"rememberTrackSelectionsDescription": "Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert",
"showChapterMarkersOnTimeline": "Kapitelmarkierungen auf der Zeitleiste anzeigen",
"showChapterMarkersOnTimelineDescription": "Die Zeitleiste an Kapitelgrenzen unterteilen",
"clickVideoTogglesPlayback": "Klicken Sie auf das Video, um die Wiedergabe zu starten oder zu pausieren.",
"clickVideoTogglesPlaybackDescription": "Wenn diese Option aktiviert ist, wird durch Klicken auf den Videoplayer die Wiedergabe gestartet oder pausiert. Andernfalls werden durch Klicken die Wiedergabesteuerungen ein- oder ausgeblendet.",
"videoPlayerControls": "Videoplayer-Steuerung",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutes",
"rememberTrackSelections": "Remember track selections per show/movie",
"rememberTrackSelectionsDescription": "Automatically save audio and subtitle language preferences when you change tracks during playback",
"showChapterMarkersOnTimeline": "Show chapter markers on seek bar",
"showChapterMarkersOnTimelineDescription": "Segment the seek bar at chapter boundaries",
"clickVideoTogglesPlayback": "Click on video to toggle play/pause",
"clickVideoTogglesPlaybackDescription": "If enabled, clicking on the video player will play/pause the video. Otherwise, clicking will show/hide the playback controls.",
"videoPlayerControls": "Video Player Controls",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutos",
"rememberTrackSelections": "Recordar selección de pistas por serie/película",
"rememberTrackSelectionsDescription": "Guardar automáticamente las preferencias de idioma de audio y subtítulos al cambiarlas durante la reproducción",
"showChapterMarkersOnTimeline": "Mostrar marcadores de capítulos en la barra de progreso",
"showChapterMarkersOnTimelineDescription": "Dividir la barra de progreso en los límites de capítulos",
"clickVideoTogglesPlayback": "Clic en el video para reproducir/pausar",
"clickVideoTogglesPlaybackDescription": "Si está habilitado, hacer clic en el reproductor de video reproducirá/pausará el video. De lo contrario, mostrará/ocultará los controles.",
"videoPlayerControls": "Controles del Reproductor de Video",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutes",
"rememberTrackSelections": "Mémoriser les sélections de pistes par émission/film",
"rememberTrackSelectionsDescription": "Enregistrer automatiquement les préférences linguistiques pour l'audio et les sous-titres lorsque vous changez de piste pendant la lecture",
"showChapterMarkersOnTimeline": "Afficher les marqueurs de chapitres sur la barre de lecture",
"showChapterMarkersOnTimelineDescription": "Segmenter la barre de lecture aux limites des chapitres",
"clickVideoTogglesPlayback": "Cliquez sur la vidéo pour basculer entre lecture et pause.",
"clickVideoTogglesPlaybackDescription": "Si cette option est activée, cliquer sur le lecteur vidéo lancera ou mettra en pause la vidéo. Sinon, le clic affichera ou masquera les commandes de lecture.",
"videoPlayerControls": "Commandes du lecteur vidéo",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minuti",
"rememberTrackSelections": "Ricorda selezioni tracce per serie/film",
"rememberTrackSelectionsDescription": "Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione",
"showChapterMarkersOnTimeline": "Mostra i marcatori dei capitoli sulla barra di avanzamento",
"showChapterMarkersOnTimelineDescription": "Segmenta la barra di avanzamento ai confini dei capitoli",
"clickVideoTogglesPlayback": "Fai clic sul video per avviare o mettere in pausa la riproduzione.",
"clickVideoTogglesPlaybackDescription": "Se questa opzione è abilitata, facendo clic sul lettore video la riproduzione verrà avviata o messa in pausa. In caso contrario, facendo clic verranno mostrati o nascosti i controlli di riproduzione.",
"videoPlayerControls": "Controlli del lettore video",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes}分",
"rememberTrackSelections": "番組/映画ごとにトラック選択を記憶",
"rememberTrackSelectionsDescription": "再生中にトラックを変更すると、音声と字幕の言語設定を自動保存",
"showChapterMarkersOnTimeline": "シークバーにチャプターマーカーを表示",
"showChapterMarkersOnTimelineDescription": "チャプターの境界でシークバーを区切る",
"clickVideoTogglesPlayback": "動画クリックで再生/一時停止を切替",
"clickVideoTogglesPlaybackDescription": "有効にすると、動画プレーヤーをクリックで再生/一時停止。それ以外は再生コントロールの表示/非表示。",
"videoPlayerControls": "動画プレーヤーコントロール",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes}분",
"rememberTrackSelections": "에피소드/영화별 트랙 선택 기억",
"rememberTrackSelectionsDescription": "재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다",
"showChapterMarkersOnTimeline": "탐색 막대에 챕터 마커 표시",
"showChapterMarkersOnTimelineDescription": "챕터 경계에서 탐색 막대 구분",
"clickVideoTogglesPlayback": "비디오를 클릭하여 재생/일시정지를 전환하세요.",
"clickVideoTogglesPlaybackDescription": "이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.",
"videoPlayerControls": "비디오 플레이어 컨트롤",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutter",
"rememberTrackSelections": "Husk sporvalg per serie/film",
"rememberTrackSelectionsDescription": "Lagre automatisk lyd- og undertekstspråkpreferanser når du bytter spor under avspilling",
"showChapterMarkersOnTimeline": "Vis kapittelmarkører på tidslinjen",
"showChapterMarkersOnTimelineDescription": "Del tidslinjen ved kapittelgrenser",
"clickVideoTogglesPlayback": "Klikk på video for å veksle avspilling",
"clickVideoTogglesPlaybackDescription": "Hvis aktivert, vil klikk på videospilleren spille av/pause videoen. Ellers vil klikk vise/skjule avspillingskontrollene.",
"videoPlayerControls": "Videospillerkontroller",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "bij ${minutes} minuten",
"rememberTrackSelections": "Onthoud track selecties per serie/film",
"rememberTrackSelectionsDescription": "Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen",
"showChapterMarkersOnTimeline": "Hoofdstukmarkeringen op tijdlijn tonen",
"showChapterMarkersOnTimelineDescription": "Verdeel de tijdlijn bij hoofdstukgrenzen",
"clickVideoTogglesPlayback": "Klik op de video om afspelen/pauzeren te wisselen.",
"clickVideoTogglesPlaybackDescription": "Als deze optie is ingeschakeld, wordt de video afgespeeld of gepauzeerd wanneer je op de videospeler klikt. Anders worden bij een klik de afspeelbedieningen weergegeven of verborgen.",
"videoPlayerControls": "Videospeler bediening",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minut",
"rememberTrackSelections": "Zapamiętaj wybór ścieżek per serial/film",
"rememberTrackSelectionsDescription": "Automatycznie zapisuj preferencje języka audio i napisów przy zmianie ścieżek podczas odtwarzania",
"showChapterMarkersOnTimeline": "Pokaż znaczniki rozdziałów na pasku przewijania",
"showChapterMarkersOnTimelineDescription": "Podziel pasek przewijania na granicach rozdziałów",
"clickVideoTogglesPlayback": "Kliknięcie wideo przełącza odtwarzanie/pauzę",
"clickVideoTogglesPlaybackDescription": "Gdy włączone, kliknięcie na odtwarzacz wideo odtwarza/wstrzymuje. W przeciwnym razie pokazuje/ukrywa kontrolki.",
"videoPlayerControls": "Kontrolki odtwarzacza wideo",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minutos",
"rememberTrackSelections": "Lembrar seleção de faixas por série/filme",
"rememberTrackSelectionsDescription": "Salvar automaticamente preferências de idioma de áudio e legenda ao trocar faixas durante a reprodução",
"showChapterMarkersOnTimeline": "Mostrar marcadores de capítulos na barra de reprodução",
"showChapterMarkersOnTimelineDescription": "Segmentar a barra de reprodução nos limites dos capítulos",
"clickVideoTogglesPlayback": "Clicar no vídeo para alternar reprodução/pausa",
"clickVideoTogglesPlaybackDescription": "Se ativado, clicar no player reproduz/pausa o vídeo. Caso contrário, clicar mostra/oculta os controles.",
"videoPlayerControls": "Controles do Player de Vídeo",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} минут",
"rememberTrackSelections": "Запоминать выбор дорожек для каждого сериала/фильма",
"rememberTrackSelectionsDescription": "Автоматически сохранять предпочтения языка аудио и субтитров при переключении дорожек во время воспроизведения",
"showChapterMarkersOnTimeline": "Показывать маркеры глав на шкале перемотки",
"showChapterMarkersOnTimelineDescription": "Разделять шкалу перемотки по границам глав",
"clickVideoTogglesPlayback": "Клик по видео для переключения воспроизведения/паузы",
"clickVideoTogglesPlaybackDescription": "Если включено, клик по видеоплееру воспроизводит/ставит на паузу. В противном случае показывает/скрывает элементы управления.",
"videoPlayerControls": "Элементы управления плеером",
+2 -2
View File
@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 15
/// Strings: 16965 (1131 per locale)
/// Strings: 16995 (1133 per locale)
///
/// Built on 2026-05-04 at 07:36 UTC
/// Built on 2026-05-06 at 03:11 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minutter';
@override String get rememberTrackSelections => 'Husk sporvalg per serie/film';
@override String get rememberTrackSelectionsDescription => 'Gem automatisk lyd- og undertekstsprogpræferencer når du skifter spor under afspilning';
@override String get showChapterMarkersOnTimeline => 'Vis kapitelmarkører på tidslinjen';
@override String get showChapterMarkersOnTimelineDescription => 'Opdel tidslinjen ved kapitelgrænser';
@override String get clickVideoTogglesPlayback => 'Klik på video skifter afspil/pause';
@override String get clickVideoTogglesPlaybackDescription => 'Når aktiveret, afspiller/pauser klik på videoen. Ellers vises/skjules betjeningselementer.';
@override String get videoPlayerControls => 'Videoafspillerkontroller';
@@ -1890,6 +1892,8 @@ extension on TranslationsDa {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutter',
'settings.rememberTrackSelections' => 'Husk sporvalg per serie/film',
'settings.rememberTrackSelectionsDescription' => 'Gem automatisk lyd- og undertekstsprogpræferencer når du skifter spor under afspilning',
'settings.showChapterMarkersOnTimeline' => 'Vis kapitelmarkører på tidslinjen',
'settings.showChapterMarkersOnTimelineDescription' => 'Opdel tidslinjen ved kapitelgrænser',
'settings.clickVideoTogglesPlayback' => 'Klik på video skifter afspil/pause',
'settings.clickVideoTogglesPlaybackDescription' => 'Når aktiveret, afspiller/pauser klik på videoen. Ellers vises/skjules betjeningselementer.',
'settings.videoPlayerControls' => 'Videoafspillerkontroller',
@@ -2260,10 +2264,10 @@ extension on TranslationsDa {
'profiles.pinManagedByPlex' => 'PIN administreres af Plex. Rediger på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN-kode angivet. For at kræve en, redigér Home-brugeren på plex.tv.',
'profiles.setPin' => 'Angiv PIN',
'profiles.connectionsLabel' => 'Forbindelser',
'profiles.add' => 'Tilføj',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Forbindelser',
'profiles.add' => 'Tilføj',
'profiles.deleteProfileButton' => 'Slet profil',
'profiles.noConnectionsHint' => 'Ingen forbindelser — tilføj en for at bruge denne profil.',
'profiles.plexHomeAccount' => 'Plex Home-konto',
@@ -2774,10 +2778,10 @@ extension on TranslationsDa {
'metadataEdit.episodeOrdering' => 'Episoderækkefølge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sendt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sendt)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadatasprog',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadatasprog',
'metadataEdit.useOriginalTitle' => 'Brug originaltitel',
'metadataEdit.preferredAudioLanguage' => 'Foretrukket lydsprog',
'metadataEdit.preferredSubtitleLanguage' => 'Foretrukket undertekstsprog',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} Minuten';
@override String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken';
@override String get rememberTrackSelectionsDescription => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert';
@override String get showChapterMarkersOnTimeline => 'Kapitelmarkierungen auf der Zeitleiste anzeigen';
@override String get showChapterMarkersOnTimelineDescription => 'Die Zeitleiste an Kapitelgrenzen unterteilen';
@override String get clickVideoTogglesPlayback => 'Klicken Sie auf das Video, um die Wiedergabe zu starten oder zu pausieren.';
@override String get clickVideoTogglesPlaybackDescription => 'Wenn diese Option aktiviert ist, wird durch Klicken auf den Videoplayer die Wiedergabe gestartet oder pausiert. Andernfalls werden durch Klicken die Wiedergabesteuerungen ein- oder ausgeblendet.';
@override String get videoPlayerControls => 'Videoplayer-Steuerung';
@@ -1890,6 +1892,8 @@ extension on TranslationsDe {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} Minuten',
'settings.rememberTrackSelections' => 'Spurauswahl pro Serie/Film merken',
'settings.rememberTrackSelectionsDescription' => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert',
'settings.showChapterMarkersOnTimeline' => 'Kapitelmarkierungen auf der Zeitleiste anzeigen',
'settings.showChapterMarkersOnTimelineDescription' => 'Die Zeitleiste an Kapitelgrenzen unterteilen',
'settings.clickVideoTogglesPlayback' => 'Klicken Sie auf das Video, um die Wiedergabe zu starten oder zu pausieren.',
'settings.clickVideoTogglesPlaybackDescription' => 'Wenn diese Option aktiviert ist, wird durch Klicken auf den Videoplayer die Wiedergabe gestartet oder pausiert. Andernfalls werden durch Klicken die Wiedergabesteuerungen ein- oder ausgeblendet.',
'settings.videoPlayerControls' => 'Videoplayer-Steuerung',
@@ -2260,10 +2264,10 @@ extension on TranslationsDe {
'profiles.pinManagedByPlex' => 'PIN wird von Plex verwaltet. Auf plex.tv bearbeiten.',
'profiles.noPinSetEditOnPlex' => 'Keine PIN festgelegt. Um eine zu verlangen, bearbeite den Home-Benutzer auf plex.tv.',
'profiles.setPin' => 'PIN festlegen',
'profiles.connectionsLabel' => 'Verbindungen',
'profiles.add' => 'Hinzufügen',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Verbindungen',
'profiles.add' => 'Hinzufügen',
'profiles.deleteProfileButton' => 'Profil löschen',
'profiles.noConnectionsHint' => 'Keine Verbindungen — füge eine hinzu, um dieses Profil zu nutzen.',
'profiles.plexHomeAccount' => 'Plex Home-Konto',
@@ -2774,10 +2778,10 @@ extension on TranslationsDe {
'metadataEdit.episodeOrdering' => 'Episodenreihenfolge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Ausgestrahlt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Ausgestrahlt)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadaten-Sprache',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadaten-Sprache',
'metadataEdit.useOriginalTitle' => 'Originaltitel verwenden',
'metadataEdit.preferredAudioLanguage' => 'Bevorzugte Audiosprache',
'metadataEdit.preferredSubtitleLanguage' => 'Bevorzugte Untertitelsprache',
+12 -4
View File
@@ -559,6 +559,12 @@ class TranslationsSettingsEn {
/// en: 'Automatically save audio and subtitle language preferences when you change tracks during playback'
String get rememberTrackSelectionsDescription => 'Automatically save audio and subtitle language preferences when you change tracks during playback';
/// en: 'Show chapter markers on seek bar'
String get showChapterMarkersOnTimeline => 'Show chapter markers on seek bar';
/// en: 'Segment the seek bar at chapter boundaries'
String get showChapterMarkersOnTimelineDescription => 'Segment the seek bar at chapter boundaries';
/// en: 'Click on video to toggle play/pause'
String get clickVideoTogglesPlayback => 'Click on video to toggle play/pause';
@@ -4158,6 +4164,8 @@ extension on Translations {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutes',
'settings.rememberTrackSelections' => 'Remember track selections per show/movie',
'settings.rememberTrackSelectionsDescription' => 'Automatically save audio and subtitle language preferences when you change tracks during playback',
'settings.showChapterMarkersOnTimeline' => 'Show chapter markers on seek bar',
'settings.showChapterMarkersOnTimelineDescription' => 'Segment the seek bar at chapter boundaries',
'settings.clickVideoTogglesPlayback' => 'Click on video to toggle play/pause',
'settings.clickVideoTogglesPlaybackDescription' => 'If enabled, clicking on the video player will play/pause the video. Otherwise, clicking will show/hide the playback controls.',
'settings.videoPlayerControls' => 'Video Player Controls',
@@ -4528,10 +4536,10 @@ extension on Translations {
'profiles.pinManagedByPlex' => 'PIN managed by Plex. Edit on plex.tv.',
'profiles.noPinSetEditOnPlex' => 'No PIN set. To require one, edit the home user on plex.tv.',
'profiles.setPin' => 'Set PIN',
'profiles.connectionsLabel' => 'Connections',
'profiles.add' => 'Add',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connections',
'profiles.add' => 'Add',
'profiles.deleteProfileButton' => 'Delete profile',
'profiles.noConnectionsHint' => 'No connections — add one to use this profile.',
'profiles.plexHomeAccount' => 'Plex Home account',
@@ -5042,10 +5050,10 @@ extension on Translations {
'metadataEdit.episodeOrdering' => 'Episode Ordering',
'metadataEdit.tmdbAiring' => 'The Movie Database (Aired)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Aired)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolute)',
'metadataEdit.metadataLanguage' => 'Metadata Language',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolute)',
'metadataEdit.metadataLanguage' => 'Metadata Language',
'metadataEdit.useOriginalTitle' => 'Use Original Title',
'metadataEdit.preferredAudioLanguage' => 'Preferred Audio Language',
'metadataEdit.preferredSubtitleLanguage' => 'Preferred Subtitle Language',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minutos';
@override String get rememberTrackSelections => 'Recordar selección de pistas por serie/película';
@override String get rememberTrackSelectionsDescription => 'Guardar automáticamente las preferencias de idioma de audio y subtítulos al cambiarlas durante la reproducción';
@override String get showChapterMarkersOnTimeline => 'Mostrar marcadores de capítulos en la barra de progreso';
@override String get showChapterMarkersOnTimelineDescription => 'Dividir la barra de progreso en los límites de capítulos';
@override String get clickVideoTogglesPlayback => 'Clic en el video para reproducir/pausar';
@override String get clickVideoTogglesPlaybackDescription => 'Si está habilitado, hacer clic en el reproductor de video reproducirá/pausará el video. De lo contrario, mostrará/ocultará los controles.';
@override String get videoPlayerControls => 'Controles del Reproductor de Video';
@@ -1890,6 +1892,8 @@ extension on TranslationsEs {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutos',
'settings.rememberTrackSelections' => 'Recordar selección de pistas por serie/película',
'settings.rememberTrackSelectionsDescription' => 'Guardar automáticamente las preferencias de idioma de audio y subtítulos al cambiarlas durante la reproducción',
'settings.showChapterMarkersOnTimeline' => 'Mostrar marcadores de capítulos en la barra de progreso',
'settings.showChapterMarkersOnTimelineDescription' => 'Dividir la barra de progreso en los límites de capítulos',
'settings.clickVideoTogglesPlayback' => 'Clic en el video para reproducir/pausar',
'settings.clickVideoTogglesPlaybackDescription' => 'Si está habilitado, hacer clic en el reproductor de video reproducirá/pausará el video. De lo contrario, mostrará/ocultará los controles.',
'settings.videoPlayerControls' => 'Controles del Reproductor de Video',
@@ -2260,10 +2264,10 @@ extension on TranslationsEs {
'profiles.pinManagedByPlex' => 'PIN gestionado por Plex. Edita en plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Sin PIN establecido. Para requerir uno, edita el usuario Home en plex.tv.',
'profiles.setPin' => 'Establecer PIN',
'profiles.connectionsLabel' => 'Conexiones',
'profiles.add' => 'Añadir',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Conexiones',
'profiles.add' => 'Añadir',
'profiles.deleteProfileButton' => 'Eliminar perfil',
'profiles.noConnectionsHint' => 'Sin conexiones — añade una para usar este perfil.',
'profiles.plexHomeAccount' => 'Cuenta Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsEs {
'metadataEdit.episodeOrdering' => 'Orden de episodios',
'metadataEdit.tmdbAiring' => 'The Movie Database (Emisión)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Emisión)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma de metadatos',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma de metadatos',
'metadataEdit.useOriginalTitle' => 'Usar título original',
'metadataEdit.preferredAudioLanguage' => 'Idioma de audio preferido',
'metadataEdit.preferredSubtitleLanguage' => 'Idioma de subtítulos preferido',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minutes';
@override String get rememberTrackSelections => 'Mémoriser les sélections de pistes par émission/film';
@override String get rememberTrackSelectionsDescription => 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture';
@override String get showChapterMarkersOnTimeline => 'Afficher les marqueurs de chapitres sur la barre de lecture';
@override String get showChapterMarkersOnTimelineDescription => 'Segmenter la barre de lecture aux limites des chapitres';
@override String get clickVideoTogglesPlayback => 'Cliquez sur la vidéo pour basculer entre lecture et pause.';
@override String get clickVideoTogglesPlaybackDescription => 'Si cette option est activée, cliquer sur le lecteur vidéo lancera ou mettra en pause la vidéo. Sinon, le clic affichera ou masquera les commandes de lecture.';
@override String get videoPlayerControls => 'Commandes du lecteur vidéo';
@@ -1890,6 +1892,8 @@ extension on TranslationsFr {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutes',
'settings.rememberTrackSelections' => 'Mémoriser les sélections de pistes par émission/film',
'settings.rememberTrackSelectionsDescription' => 'Enregistrer automatiquement les préférences linguistiques pour l\'audio et les sous-titres lorsque vous changez de piste pendant la lecture',
'settings.showChapterMarkersOnTimeline' => 'Afficher les marqueurs de chapitres sur la barre de lecture',
'settings.showChapterMarkersOnTimelineDescription' => 'Segmenter la barre de lecture aux limites des chapitres',
'settings.clickVideoTogglesPlayback' => 'Cliquez sur la vidéo pour basculer entre lecture et pause.',
'settings.clickVideoTogglesPlaybackDescription' => 'Si cette option est activée, cliquer sur le lecteur vidéo lancera ou mettra en pause la vidéo. Sinon, le clic affichera ou masquera les commandes de lecture.',
'settings.videoPlayerControls' => 'Commandes du lecteur vidéo',
@@ -2260,10 +2264,10 @@ extension on TranslationsFr {
'profiles.pinManagedByPlex' => 'PIN géré par Plex. Modifier sur plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Aucun PIN défini. Pour en exiger un, modifiez l\'utilisateur Home sur plex.tv.',
'profiles.setPin' => 'Définir un PIN',
'profiles.connectionsLabel' => 'Connexions',
'profiles.add' => 'Ajouter',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connexions',
'profiles.add' => 'Ajouter',
'profiles.deleteProfileButton' => 'Supprimer le profil',
'profiles.noConnectionsHint' => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.',
'profiles.plexHomeAccount' => 'Compte Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsFr {
'metadataEdit.episodeOrdering' => 'Ordre des épisodes',
'metadataEdit.tmdbAiring' => 'The Movie Database (Diffusion)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Diffusion)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolu)',
'metadataEdit.metadataLanguage' => 'Langue des métadonnées',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolu)',
'metadataEdit.metadataLanguage' => 'Langue des métadonnées',
'metadataEdit.useOriginalTitle' => 'Utiliser le titre original',
'metadataEdit.preferredAudioLanguage' => 'Langue audio préférée',
'metadataEdit.preferredSubtitleLanguage' => 'Langue de sous-titres préférée',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minuti';
@override String get rememberTrackSelections => 'Ricorda selezioni tracce per serie/film';
@override String get rememberTrackSelectionsDescription => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione';
@override String get showChapterMarkersOnTimeline => 'Mostra i marcatori dei capitoli sulla barra di avanzamento';
@override String get showChapterMarkersOnTimelineDescription => 'Segmenta la barra di avanzamento ai confini dei capitoli';
@override String get clickVideoTogglesPlayback => 'Fai clic sul video per avviare o mettere in pausa la riproduzione.';
@override String get clickVideoTogglesPlaybackDescription => 'Se questa opzione è abilitata, facendo clic sul lettore video la riproduzione verrà avviata o messa in pausa. In caso contrario, facendo clic verranno mostrati o nascosti i controlli di riproduzione.';
@override String get videoPlayerControls => 'Controlli del lettore video';
@@ -1890,6 +1892,8 @@ extension on TranslationsIt {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minuti',
'settings.rememberTrackSelections' => 'Ricorda selezioni tracce per serie/film',
'settings.rememberTrackSelectionsDescription' => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione',
'settings.showChapterMarkersOnTimeline' => 'Mostra i marcatori dei capitoli sulla barra di avanzamento',
'settings.showChapterMarkersOnTimelineDescription' => 'Segmenta la barra di avanzamento ai confini dei capitoli',
'settings.clickVideoTogglesPlayback' => 'Fai clic sul video per avviare o mettere in pausa la riproduzione.',
'settings.clickVideoTogglesPlaybackDescription' => 'Se questa opzione è abilitata, facendo clic sul lettore video la riproduzione verrà avviata o messa in pausa. In caso contrario, facendo clic verranno mostrati o nascosti i controlli di riproduzione.',
'settings.videoPlayerControls' => 'Controlli del lettore video',
@@ -2260,10 +2264,10 @@ extension on TranslationsIt {
'profiles.pinManagedByPlex' => 'PIN gestito da Plex. Modifica su plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nessun PIN impostato. Per richiederne uno, modifica l\'utente Home su plex.tv.',
'profiles.setPin' => 'Imposta PIN',
'profiles.connectionsLabel' => 'Connessioni',
'profiles.add' => 'Aggiungi',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connessioni',
'profiles.add' => 'Aggiungi',
'profiles.deleteProfileButton' => 'Elimina profilo',
'profiles.noConnectionsHint' => 'Nessuna connessione — aggiungine una per usare questo profilo.',
'profiles.plexHomeAccount' => 'Account Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsIt {
'metadataEdit.episodeOrdering' => 'Ordine episodi',
'metadataEdit.tmdbAiring' => 'The Movie Database (In onda)',
'metadataEdit.tvdbAiring' => 'TheTVDB (In onda)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Assoluto)',
'metadataEdit.metadataLanguage' => 'Lingua metadati',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Assoluto)',
'metadataEdit.metadataLanguage' => 'Lingua metadati',
'metadataEdit.useOriginalTitle' => 'Usa titolo originale',
'metadataEdit.preferredAudioLanguage' => 'Lingua audio preferita',
'metadataEdit.preferredSubtitleLanguage' => 'Lingua sottotitoli preferita',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes}';
@override String get rememberTrackSelections => '番組/映画ごとにトラック選択を記憶';
@override String get rememberTrackSelectionsDescription => '再生中にトラックを変更すると、音声と字幕の言語設定を自動保存';
@override String get showChapterMarkersOnTimeline => 'シークバーにチャプターマーカーを表示';
@override String get showChapterMarkersOnTimelineDescription => 'チャプターの境界でシークバーを区切る';
@override String get clickVideoTogglesPlayback => '動画クリックで再生/一時停止を切替';
@override String get clickVideoTogglesPlaybackDescription => '有効にすると、動画プレーヤーをクリックで再生/一時停止。それ以外は再生コントロールの表示/非表示。';
@override String get videoPlayerControls => '動画プレーヤーコントロール';
@@ -1890,6 +1892,8 @@ extension on TranslationsJa {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes}',
'settings.rememberTrackSelections' => '番組/映画ごとにトラック選択を記憶',
'settings.rememberTrackSelectionsDescription' => '再生中にトラックを変更すると、音声と字幕の言語設定を自動保存',
'settings.showChapterMarkersOnTimeline' => 'シークバーにチャプターマーカーを表示',
'settings.showChapterMarkersOnTimelineDescription' => 'チャプターの境界でシークバーを区切る',
'settings.clickVideoTogglesPlayback' => '動画クリックで再生/一時停止を切替',
'settings.clickVideoTogglesPlaybackDescription' => '有効にすると、動画プレーヤーをクリックで再生/一時停止。それ以外は再生コントロールの表示/非表示。',
'settings.videoPlayerControls' => '動画プレーヤーコントロール',
@@ -2260,10 +2264,10 @@ extension on TranslationsJa {
'profiles.pinManagedByPlex' => 'PINはPlexで管理されています。plex.tvで編集してください。',
'profiles.noPinSetEditOnPlex' => 'PINが設定されていません。要求するには、plex.tvでHomeユーザーを編集してください。',
'profiles.setPin' => 'PINを設定',
'profiles.connectionsLabel' => '接続',
'profiles.add' => '追加',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '接続',
'profiles.add' => '追加',
'profiles.deleteProfileButton' => 'プロファイルを削除',
'profiles.noConnectionsHint' => '接続がありません — このプロファイルを使うには1つ追加してください。',
'profiles.plexHomeAccount' => 'Plex Homeアカウント',
@@ -2774,10 +2778,10 @@ extension on TranslationsJa {
'metadataEdit.episodeOrdering' => 'エピソードの順序',
'metadataEdit.tmdbAiring' => 'The Movie Database(放送順)',
'metadataEdit.tvdbAiring' => 'TheTVDB(放送順)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB(絶対順)',
'metadataEdit.metadataLanguage' => 'メタデータの言語',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB(絶対順)',
'metadataEdit.metadataLanguage' => 'メタデータの言語',
'metadataEdit.useOriginalTitle' => '原題を使用',
'metadataEdit.preferredAudioLanguage' => '優先音声言語',
'metadataEdit.preferredSubtitleLanguage' => '優先字幕言語',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes}';
@override String get rememberTrackSelections => '에피소드/영화별 트랙 선택 기억';
@override String get rememberTrackSelectionsDescription => '재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다';
@override String get showChapterMarkersOnTimeline => '탐색 막대에 챕터 마커 표시';
@override String get showChapterMarkersOnTimelineDescription => '챕터 경계에서 탐색 막대 구분';
@override String get clickVideoTogglesPlayback => '비디오를 클릭하여 재생/일시정지를 전환하세요.';
@override String get clickVideoTogglesPlaybackDescription => '이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.';
@override String get videoPlayerControls => '비디오 플레이어 컨트롤';
@@ -1890,6 +1892,8 @@ extension on TranslationsKo {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes}',
'settings.rememberTrackSelections' => '에피소드/영화별 트랙 선택 기억',
'settings.rememberTrackSelectionsDescription' => '재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다',
'settings.showChapterMarkersOnTimeline' => '탐색 막대에 챕터 마커 표시',
'settings.showChapterMarkersOnTimelineDescription' => '챕터 경계에서 탐색 막대 구분',
'settings.clickVideoTogglesPlayback' => '비디오를 클릭하여 재생/일시정지를 전환하세요.',
'settings.clickVideoTogglesPlaybackDescription' => '이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.',
'settings.videoPlayerControls' => '비디오 플레이어 컨트롤',
@@ -2260,10 +2264,10 @@ extension on TranslationsKo {
'profiles.pinManagedByPlex' => 'PIN은 Plex에서 관리됩니다. plex.tv에서 편집하세요.',
'profiles.noPinSetEditOnPlex' => '설정된 PIN이 없습니다. 요구하려면 plex.tv에서 Home 사용자를 편집하세요.',
'profiles.setPin' => 'PIN 설정',
'profiles.connectionsLabel' => '연결',
'profiles.add' => '추가',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '연결',
'profiles.add' => '추가',
'profiles.deleteProfileButton' => '프로필 삭제',
'profiles.noConnectionsHint' => '연결이 없습니다 — 이 프로필을 사용하려면 하나 추가하세요.',
'profiles.plexHomeAccount' => 'Plex Home 계정',
@@ -2774,10 +2778,10 @@ extension on TranslationsKo {
'metadataEdit.episodeOrdering' => '에피소드 순서',
'metadataEdit.tmdbAiring' => 'The Movie Database (방영순)',
'metadataEdit.tvdbAiring' => 'TheTVDB (방영순)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (절대순)',
'metadataEdit.metadataLanguage' => '메타데이터 언어',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (절대순)',
'metadataEdit.metadataLanguage' => '메타데이터 언어',
'metadataEdit.useOriginalTitle' => '원제 사용',
'metadataEdit.preferredAudioLanguage' => '선호 오디오 언어',
'metadataEdit.preferredSubtitleLanguage' => '선호 자막 언어',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minutter';
@override String get rememberTrackSelections => 'Husk sporvalg per serie/film';
@override String get rememberTrackSelectionsDescription => 'Lagre automatisk lyd- og undertekstspråkpreferanser når du bytter spor under avspilling';
@override String get showChapterMarkersOnTimeline => 'Vis kapittelmarkører på tidslinjen';
@override String get showChapterMarkersOnTimelineDescription => 'Del tidslinjen ved kapittelgrenser';
@override String get clickVideoTogglesPlayback => 'Klikk på video for å veksle avspilling';
@override String get clickVideoTogglesPlaybackDescription => 'Hvis aktivert, vil klikk på videospilleren spille av/pause videoen. Ellers vil klikk vise/skjule avspillingskontrollene.';
@override String get videoPlayerControls => 'Videospillerkontroller';
@@ -1890,6 +1892,8 @@ extension on TranslationsNb {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutter',
'settings.rememberTrackSelections' => 'Husk sporvalg per serie/film',
'settings.rememberTrackSelectionsDescription' => 'Lagre automatisk lyd- og undertekstspråkpreferanser når du bytter spor under avspilling',
'settings.showChapterMarkersOnTimeline' => 'Vis kapittelmarkører på tidslinjen',
'settings.showChapterMarkersOnTimelineDescription' => 'Del tidslinjen ved kapittelgrenser',
'settings.clickVideoTogglesPlayback' => 'Klikk på video for å veksle avspilling',
'settings.clickVideoTogglesPlaybackDescription' => 'Hvis aktivert, vil klikk på videospilleren spille av/pause videoen. Ellers vil klikk vise/skjule avspillingskontrollene.',
'settings.videoPlayerControls' => 'Videospillerkontroller',
@@ -2260,10 +2264,10 @@ extension on TranslationsNb {
'profiles.pinManagedByPlex' => 'PIN administreres av Plex. Rediger på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN er satt. For å kreve én, rediger Home-brukeren på plex.tv.',
'profiles.setPin' => 'Sett PIN',
'profiles.connectionsLabel' => 'Tilkoblinger',
'profiles.add' => 'Legg til',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Tilkoblinger',
'profiles.add' => 'Legg til',
'profiles.deleteProfileButton' => 'Slett profil',
'profiles.noConnectionsHint' => 'Ingen tilkoblinger — legg til én for å bruke denne profilen.',
'profiles.plexHomeAccount' => 'Plex Home-konto',
@@ -2774,10 +2778,10 @@ extension on TranslationsNb {
'metadataEdit.episodeOrdering' => 'Episoderekkefølge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sendt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sendt)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutt)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutt)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
'metadataEdit.useOriginalTitle' => 'Bruk originaltittel',
'metadataEdit.preferredAudioLanguage' => 'Foretrukket lydspråk',
'metadataEdit.preferredSubtitleLanguage' => 'Foretrukket undertekstspråk',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten';
@override String get rememberTrackSelections => 'Onthoud track selecties per serie/film';
@override String get rememberTrackSelectionsDescription => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen';
@override String get showChapterMarkersOnTimeline => 'Hoofdstukmarkeringen op tijdlijn tonen';
@override String get showChapterMarkersOnTimelineDescription => 'Verdeel de tijdlijn bij hoofdstukgrenzen';
@override String get clickVideoTogglesPlayback => 'Klik op de video om afspelen/pauzeren te wisselen.';
@override String get clickVideoTogglesPlaybackDescription => 'Als deze optie is ingeschakeld, wordt de video afgespeeld of gepauzeerd wanneer je op de videospeler klikt. Anders worden bij een klik de afspeelbedieningen weergegeven of verborgen.';
@override String get videoPlayerControls => 'Videospeler bediening';
@@ -1890,6 +1892,8 @@ extension on TranslationsNl {
'settings.minutesUnit' => ({required Object minutes}) => 'bij ${minutes} minuten',
'settings.rememberTrackSelections' => 'Onthoud track selecties per serie/film',
'settings.rememberTrackSelectionsDescription' => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen',
'settings.showChapterMarkersOnTimeline' => 'Hoofdstukmarkeringen op tijdlijn tonen',
'settings.showChapterMarkersOnTimelineDescription' => 'Verdeel de tijdlijn bij hoofdstukgrenzen',
'settings.clickVideoTogglesPlayback' => 'Klik op de video om afspelen/pauzeren te wisselen.',
'settings.clickVideoTogglesPlaybackDescription' => 'Als deze optie is ingeschakeld, wordt de video afgespeeld of gepauzeerd wanneer je op de videospeler klikt. Anders worden bij een klik de afspeelbedieningen weergegeven of verborgen.',
'settings.videoPlayerControls' => 'Videospeler bediening',
@@ -2260,10 +2264,10 @@ extension on TranslationsNl {
'profiles.pinManagedByPlex' => 'PIN wordt beheerd door Plex. Bewerk op plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Geen PIN ingesteld. Bewerk de Home-gebruiker op plex.tv om er één te vereisen.',
'profiles.setPin' => 'PIN instellen',
'profiles.connectionsLabel' => 'Verbindingen',
'profiles.add' => 'Toevoegen',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Verbindingen',
'profiles.add' => 'Toevoegen',
'profiles.deleteProfileButton' => 'Profiel verwijderen',
'profiles.noConnectionsHint' => 'Geen verbindingen — voeg er één toe om dit profiel te gebruiken.',
'profiles.plexHomeAccount' => 'Plex Home-account',
@@ -2774,10 +2778,10 @@ extension on TranslationsNl {
'metadataEdit.episodeOrdering' => 'Afleveringsvolgorde',
'metadataEdit.tmdbAiring' => 'The Movie Database (Uitgezonden)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Uitgezonden)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluut)',
'metadataEdit.metadataLanguage' => 'Metadatataal',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluut)',
'metadataEdit.metadataLanguage' => 'Metadatataal',
'metadataEdit.useOriginalTitle' => 'Oorspronkelijke titel gebruiken',
'metadataEdit.preferredAudioLanguage' => 'Voorkeurstaal audio',
'metadataEdit.preferredSubtitleLanguage' => 'Voorkeurstaal ondertiteling',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minut';
@override String get rememberTrackSelections => 'Zapamiętaj wybór ścieżek per serial/film';
@override String get rememberTrackSelectionsDescription => 'Automatycznie zapisuj preferencje języka audio i napisów przy zmianie ścieżek podczas odtwarzania';
@override String get showChapterMarkersOnTimeline => 'Pokaż znaczniki rozdziałów na pasku przewijania';
@override String get showChapterMarkersOnTimelineDescription => 'Podziel pasek przewijania na granicach rozdziałów';
@override String get clickVideoTogglesPlayback => 'Kliknięcie wideo przełącza odtwarzanie/pauzę';
@override String get clickVideoTogglesPlaybackDescription => 'Gdy włączone, kliknięcie na odtwarzacz wideo odtwarza/wstrzymuje. W przeciwnym razie pokazuje/ukrywa kontrolki.';
@override String get videoPlayerControls => 'Kontrolki odtwarzacza wideo';
@@ -1890,6 +1892,8 @@ extension on TranslationsPl {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minut',
'settings.rememberTrackSelections' => 'Zapamiętaj wybór ścieżek per serial/film',
'settings.rememberTrackSelectionsDescription' => 'Automatycznie zapisuj preferencje języka audio i napisów przy zmianie ścieżek podczas odtwarzania',
'settings.showChapterMarkersOnTimeline' => 'Pokaż znaczniki rozdziałów na pasku przewijania',
'settings.showChapterMarkersOnTimelineDescription' => 'Podziel pasek przewijania na granicach rozdziałów',
'settings.clickVideoTogglesPlayback' => 'Kliknięcie wideo przełącza odtwarzanie/pauzę',
'settings.clickVideoTogglesPlaybackDescription' => 'Gdy włączone, kliknięcie na odtwarzacz wideo odtwarza/wstrzymuje. W przeciwnym razie pokazuje/ukrywa kontrolki.',
'settings.videoPlayerControls' => 'Kontrolki odtwarzacza wideo',
@@ -2260,10 +2264,10 @@ extension on TranslationsPl {
'profiles.pinManagedByPlex' => 'PIN zarządzany przez Plex. Edytuj na plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nie ustawiono PIN-u. Aby go wymagać, edytuj użytkownika Home na plex.tv.',
'profiles.setPin' => 'Ustaw PIN',
'profiles.connectionsLabel' => 'Połączenia',
'profiles.add' => 'Dodaj',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Połączenia',
'profiles.add' => 'Dodaj',
'profiles.deleteProfileButton' => 'Usuń profil',
'profiles.noConnectionsHint' => 'Brak połączeń — dodaj jedno, aby używać tego profilu.',
'profiles.plexHomeAccount' => 'Konto Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsPl {
'metadataEdit.episodeOrdering' => 'Kolejność odcinków',
'metadataEdit.tmdbAiring' => 'The Movie Database (Emisja)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Emisja)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutna)',
'metadataEdit.metadataLanguage' => 'Język metadanych',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutna)',
'metadataEdit.metadataLanguage' => 'Język metadanych',
'metadataEdit.useOriginalTitle' => 'Użyj oryginalnego tytułu',
'metadataEdit.preferredAudioLanguage' => 'Preferowany język audio',
'metadataEdit.preferredSubtitleLanguage' => 'Preferowany język napisów',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minutos';
@override String get rememberTrackSelections => 'Lembrar seleção de faixas por série/filme';
@override String get rememberTrackSelectionsDescription => 'Salvar automaticamente preferências de idioma de áudio e legenda ao trocar faixas durante a reprodução';
@override String get showChapterMarkersOnTimeline => 'Mostrar marcadores de capítulos na barra de reprodução';
@override String get showChapterMarkersOnTimelineDescription => 'Segmentar a barra de reprodução nos limites dos capítulos';
@override String get clickVideoTogglesPlayback => 'Clicar no vídeo para alternar reprodução/pausa';
@override String get clickVideoTogglesPlaybackDescription => 'Se ativado, clicar no player reproduz/pausa o vídeo. Caso contrário, clicar mostra/oculta os controles.';
@override String get videoPlayerControls => 'Controles do Player de Vídeo';
@@ -1890,6 +1892,8 @@ extension on TranslationsPt {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutos',
'settings.rememberTrackSelections' => 'Lembrar seleção de faixas por série/filme',
'settings.rememberTrackSelectionsDescription' => 'Salvar automaticamente preferências de idioma de áudio e legenda ao trocar faixas durante a reprodução',
'settings.showChapterMarkersOnTimeline' => 'Mostrar marcadores de capítulos na barra de reprodução',
'settings.showChapterMarkersOnTimelineDescription' => 'Segmentar a barra de reprodução nos limites dos capítulos',
'settings.clickVideoTogglesPlayback' => 'Clicar no vídeo para alternar reprodução/pausa',
'settings.clickVideoTogglesPlaybackDescription' => 'Se ativado, clicar no player reproduz/pausa o vídeo. Caso contrário, clicar mostra/oculta os controles.',
'settings.videoPlayerControls' => 'Controles do Player de Vídeo',
@@ -2260,10 +2264,10 @@ extension on TranslationsPt {
'profiles.pinManagedByPlex' => 'PIN gerenciado pelo Plex. Edite em plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nenhum PIN definido. Para exigir um, edite o usuário Home em plex.tv.',
'profiles.setPin' => 'Definir PIN',
'profiles.connectionsLabel' => 'Conexões',
'profiles.add' => 'Adicionar',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Conexões',
'profiles.add' => 'Adicionar',
'profiles.deleteProfileButton' => 'Excluir perfil',
'profiles.noConnectionsHint' => 'Sem conexões — adicione uma para usar este perfil.',
'profiles.plexHomeAccount' => 'Conta Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsPt {
'metadataEdit.episodeOrdering' => 'Ordenação de Episódios',
'metadataEdit.tmdbAiring' => 'The Movie Database (Exibição)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Exibição)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma dos Metadados',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma dos Metadados',
'metadataEdit.useOriginalTitle' => 'Usar Título Original',
'metadataEdit.preferredAudioLanguage' => 'Idioma de Áudio Preferido',
'metadataEdit.preferredSubtitleLanguage' => 'Idioma de Legenda Preferido',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} минут';
@override String get rememberTrackSelections => 'Запоминать выбор дорожек для каждого сериала/фильма';
@override String get rememberTrackSelectionsDescription => 'Автоматически сохранять предпочтения языка аудио и субтитров при переключении дорожек во время воспроизведения';
@override String get showChapterMarkersOnTimeline => 'Показывать маркеры глав на шкале перемотки';
@override String get showChapterMarkersOnTimelineDescription => 'Разделять шкалу перемотки по границам глав';
@override String get clickVideoTogglesPlayback => 'Клик по видео для переключения воспроизведения/паузы';
@override String get clickVideoTogglesPlaybackDescription => 'Если включено, клик по видеоплееру воспроизводит/ставит на паузу. В противном случае показывает/скрывает элементы управления.';
@override String get videoPlayerControls => 'Элементы управления плеером';
@@ -1890,6 +1892,8 @@ extension on TranslationsRu {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} минут',
'settings.rememberTrackSelections' => 'Запоминать выбор дорожек для каждого сериала/фильма',
'settings.rememberTrackSelectionsDescription' => 'Автоматически сохранять предпочтения языка аудио и субтитров при переключении дорожек во время воспроизведения',
'settings.showChapterMarkersOnTimeline' => 'Показывать маркеры глав на шкале перемотки',
'settings.showChapterMarkersOnTimelineDescription' => 'Разделять шкалу перемотки по границам глав',
'settings.clickVideoTogglesPlayback' => 'Клик по видео для переключения воспроизведения/паузы',
'settings.clickVideoTogglesPlaybackDescription' => 'Если включено, клик по видеоплееру воспроизводит/ставит на паузу. В противном случае показывает/скрывает элементы управления.',
'settings.videoPlayerControls' => 'Элементы управления плеером',
@@ -2260,10 +2264,10 @@ extension on TranslationsRu {
'profiles.pinManagedByPlex' => 'PIN управляется Plex. Редактируйте на plex.tv.',
'profiles.noPinSetEditOnPlex' => 'PIN не установлен. Чтобы требовать его, отредактируйте пользователя Home на plex.tv.',
'profiles.setPin' => 'Установить PIN',
'profiles.connectionsLabel' => 'Соединения',
'profiles.add' => 'Добавить',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Соединения',
'profiles.add' => 'Добавить',
'profiles.deleteProfileButton' => 'Удалить профиль',
'profiles.noConnectionsHint' => 'Нет соединений — добавьте одно, чтобы использовать этот профиль.',
'profiles.plexHomeAccount' => 'Аккаунт Plex Home',
@@ -2774,10 +2778,10 @@ extension on TranslationsRu {
'metadataEdit.episodeOrdering' => 'Порядок эпизодов',
'metadataEdit.tmdbAiring' => 'The Movie Database (Эфирный)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Эфирный)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Абсолютный)',
'metadataEdit.metadataLanguage' => 'Язык метаданных',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Абсолютный)',
'metadataEdit.metadataLanguage' => 'Язык метаданных',
'metadataEdit.useOriginalTitle' => 'Использовать оригинальное название',
'metadataEdit.preferredAudioLanguage' => 'Предпочитаемый язык аудио',
'metadataEdit.preferredSubtitleLanguage' => 'Предпочитаемый язык субтитров',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} minuter';
@override String get rememberTrackSelections => 'Kom ihåg spårval per serie/film';
@override String get rememberTrackSelectionsDescription => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning';
@override String get showChapterMarkersOnTimeline => 'Visa kapitelmarkörer på tidslinjen';
@override String get showChapterMarkersOnTimelineDescription => 'Dela upp tidslinjen vid kapitelgränser';
@override String get clickVideoTogglesPlayback => 'Klicka på videon för att växla mellan spela upp och pausa.';
@override String get clickVideoTogglesPlaybackDescription => 'Om detta är aktiverat kommer ett klick på videospelaren att starta eller pausa videon. Annars visas eller döljs uppspelningskontrollerna när du klickar.';
@override String get videoPlayerControls => 'Videospelar-kontroller';
@@ -1890,6 +1892,8 @@ extension on TranslationsSv {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minuter',
'settings.rememberTrackSelections' => 'Kom ihåg spårval per serie/film',
'settings.rememberTrackSelectionsDescription' => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning',
'settings.showChapterMarkersOnTimeline' => 'Visa kapitelmarkörer på tidslinjen',
'settings.showChapterMarkersOnTimelineDescription' => 'Dela upp tidslinjen vid kapitelgränser',
'settings.clickVideoTogglesPlayback' => 'Klicka på videon för att växla mellan spela upp och pausa.',
'settings.clickVideoTogglesPlaybackDescription' => 'Om detta är aktiverat kommer ett klick på videospelaren att starta eller pausa videon. Annars visas eller döljs uppspelningskontrollerna när du klickar.',
'settings.videoPlayerControls' => 'Videospelar-kontroller',
@@ -2260,10 +2264,10 @@ extension on TranslationsSv {
'profiles.pinManagedByPlex' => 'PIN hanteras av Plex. Redigera på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN angiven. För att kräva en, redigera Home-användaren på plex.tv.',
'profiles.setPin' => 'Ange PIN',
'profiles.connectionsLabel' => 'Anslutningar',
'profiles.add' => 'Lägg till',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Anslutningar',
'profiles.add' => 'Lägg till',
'profiles.deleteProfileButton' => 'Ta bort profil',
'profiles.noConnectionsHint' => 'Inga anslutningar — lägg till en för att använda den här profilen.',
'profiles.plexHomeAccount' => 'Plex Home-konto',
@@ -2774,10 +2778,10 @@ extension on TranslationsSv {
'metadataEdit.episodeOrdering' => 'Avsnittsordning',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sändning)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sändning)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
'metadataEdit.useOriginalTitle' => 'Använd originaltitel',
'metadataEdit.preferredAudioLanguage' => 'Föredraget ljudspråk',
'metadataEdit.preferredSubtitleLanguage' => 'Föredraget undertextspråk',
+8 -4
View File
@@ -277,6 +277,8 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn {
@override String minutesUnit({required Object minutes}) => '${minutes} 分钟';
@override String get rememberTrackSelections => '记住每个剧集/电影的音轨选择';
@override String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好';
@override String get showChapterMarkersOnTimeline => '在进度条上显示章节标记';
@override String get showChapterMarkersOnTimelineDescription => '按章节边界分段显示进度条';
@override String get clickVideoTogglesPlayback => '点击视频可切换播放/暂停';
@override String get clickVideoTogglesPlaybackDescription => '如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件';
@override String get videoPlayerControls => '视频播放器控制';
@@ -1890,6 +1892,8 @@ extension on TranslationsZh {
'settings.minutesUnit' => ({required Object minutes}) => '${minutes} 分钟',
'settings.rememberTrackSelections' => '记住每个剧集/电影的音轨选择',
'settings.rememberTrackSelectionsDescription' => '在播放过程中更改音轨时自动保存音频和字幕语言偏好',
'settings.showChapterMarkersOnTimeline' => '在进度条上显示章节标记',
'settings.showChapterMarkersOnTimelineDescription' => '按章节边界分段显示进度条',
'settings.clickVideoTogglesPlayback' => '点击视频可切换播放/暂停',
'settings.clickVideoTogglesPlaybackDescription' => '如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件',
'settings.videoPlayerControls' => '视频播放器控制',
@@ -2260,10 +2264,10 @@ extension on TranslationsZh {
'profiles.pinManagedByPlex' => 'PIN 由 Plex 管理。在 plex.tv 上编辑。',
'profiles.noPinSetEditOnPlex' => '未设置 PIN。如需要求 PIN,请在 plex.tv 上编辑 Home 用户。',
'profiles.setPin' => '设置 PIN',
'profiles.connectionsLabel' => '连接',
'profiles.add' => '添加',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '连接',
'profiles.add' => '添加',
'profiles.deleteProfileButton' => '删除配置文件',
'profiles.noConnectionsHint' => '没有连接 — 添加一个以使用此配置文件。',
'profiles.plexHomeAccount' => 'Plex Home 账户',
@@ -2774,10 +2778,10 @@ extension on TranslationsZh {
'metadataEdit.episodeOrdering' => '剧集排列顺序',
'metadataEdit.tmdbAiring' => 'The Movie Database(播出顺序)',
'metadataEdit.tvdbAiring' => 'TheTVDB(播出顺序)',
'metadataEdit.tvdbAbsolute' => 'TheTVDB(绝对顺序)',
'metadataEdit.metadataLanguage' => '元数据语言',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB(绝对顺序)',
'metadataEdit.metadataLanguage' => '元数据语言',
'metadataEdit.useOriginalTitle' => '使用原始标题',
'metadataEdit.preferredAudioLanguage' => '首选音频语言',
'metadataEdit.preferredSubtitleLanguage' => '首选字幕语言',
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} minuter",
"rememberTrackSelections": "Kom ihåg spårval per serie/film",
"rememberTrackSelectionsDescription": "Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning",
"showChapterMarkersOnTimeline": "Visa kapitelmarkörer på tidslinjen",
"showChapterMarkersOnTimelineDescription": "Dela upp tidslinjen vid kapitelgränser",
"clickVideoTogglesPlayback": "Klicka på videon för att växla mellan spela upp och pausa.",
"clickVideoTogglesPlaybackDescription": "Om detta är aktiverat kommer ett klick på videospelaren att starta eller pausa videon. Annars visas eller döljs uppspelningskontrollerna när du klickar.",
"videoPlayerControls": "Videospelar-kontroller",
+2
View File
@@ -150,6 +150,8 @@
"minutesUnit": "${minutes} 分钟",
"rememberTrackSelections": "记住每个剧集/电影的音轨选择",
"rememberTrackSelectionsDescription": "在播放过程中更改音轨时自动保存音频和字幕语言偏好",
"showChapterMarkersOnTimeline": "在进度条上显示章节标记",
"showChapterMarkersOnTimelineDescription": "按章节边界分段显示进度条",
"clickVideoTogglesPlayback": "点击视频可切换播放/暂停",
"clickVideoTogglesPlaybackDescription": "如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件",
"videoPlayerControls": "视频播放器控制",
@@ -146,6 +146,12 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
title: t.settings.rememberTrackSelections,
subtitle: t.settings.rememberTrackSelectionsDescription,
),
SettingSwitchTile(
pref: SettingsService.showChapterMarkersOnTimeline,
icon: Symbols.bookmarks_rounded,
title: t.settings.showChapterMarkersOnTimeline,
subtitle: t.settings.showChapterMarkersOnTimelineDescription,
),
if (!isMobile)
SettingSwitchTile(
pref: SettingsService.clickVideoTogglesPlayback,
+1
View File
@@ -287,6 +287,7 @@ class SettingsService extends BaseSharedPreferencesService {
static const subtitleBold = BoolPref('subtitle_bold');
static const subtitleItalic = BoolPref('subtitle_italic');
static const rememberTrackSelections = BoolPref('remember_track_selections', defaultValue: true);
static const showChapterMarkersOnTimeline = BoolPref('show_chapter_markers_on_timeline', defaultValue: true);
static const clickVideoTogglesPlayback = BoolPref('click_video_toggles_playback');
static const autoSkipIntro = BoolPref('auto_skip_intro');
static const autoSkipCredits = BoolPref('auto_skip_credits');
@@ -36,6 +36,7 @@ class DesktopVideoControls extends StatefulWidget {
final VoidCallback? onPrevious;
final List<MediaChapter> chapters;
final bool chaptersLoaded;
final bool showChapterMarkersOnTimeline;
final int seekTimeSmall;
final VoidCallback onSeekToPreviousChapter;
final VoidCallback onSeekToNextChapter;
@@ -107,6 +108,7 @@ class DesktopVideoControls extends StatefulWidget {
this.onPrevious,
required this.chapters,
required this.chaptersLoaded,
this.showChapterMarkersOnTimeline = true,
required this.seekTimeSmall,
required this.onSeekToPreviousChapter,
required this.onSeekToNextChapter,
@@ -699,6 +701,7 @@ class DesktopVideoControlsState extends State<DesktopVideoControls> {
player: widget.player,
chapters: widget.chapters,
chaptersLoaded: widget.chaptersLoaded,
showChapterMarkersOnTimeline: widget.showChapterMarkersOnTimeline,
onSeek: widget.onSeek,
onSeekEnd: widget.onSeekEnd,
horizontalLayout: true,
@@ -31,6 +31,7 @@ class MobileVideoControls extends StatefulWidget {
final MediaItem metadata;
final List<MediaChapter> chapters;
final bool chaptersLoaded;
final bool showChapterMarkersOnTimeline;
final int seekTimeSmall;
final Widget trackChapterControls;
final Function(Duration) onSeek;
@@ -85,6 +86,7 @@ class MobileVideoControls extends StatefulWidget {
required this.metadata,
required this.chapters,
required this.chaptersLoaded,
this.showChapterMarkersOnTimeline = true,
required this.seekTimeSmall,
required this.trackChapterControls,
required this.onSeek,
@@ -421,6 +423,7 @@ class _MobileVideoControlsState extends State<MobileVideoControls> with SingleTi
player: widget.player,
chapters: widget.chapters,
chaptersLoaded: widget.chaptersLoaded,
showChapterMarkersOnTimeline: widget.showChapterMarkersOnTimeline,
onSeek: widget.onSeek,
onSeekEnd: widget.onSeekEnd,
horizontalLayout: false,
@@ -20,6 +20,7 @@ extension _PlexVideoControlsNavigationMethods on _PlexVideoControlsState {
onPrevious: widget.onPrevious,
chapters: _chapters,
chaptersLoaded: _chaptersLoaded,
showChapterMarkersOnTimeline: _showChapterMarkersOnTimeline,
seekTimeSmall: _seekTimeSmall,
onSeekToPreviousChapter: _seekToPreviousChapter,
onSeekToNextChapter: _seekToNextChapter,
@@ -361,6 +361,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> with WindowListen
bool _showLockIcon = false; // Whether to show the lock overlay icon
Timer? _lockIconTimer;
bool get _clickVideoTogglesPlayback => _settings.read(SettingsService.clickVideoTogglesPlayback);
bool get _showChapterMarkersOnTimeline => _settings.read(SettingsService.showChapterMarkersOnTimeline);
bool _isContentStripVisible = false; // Whether the swipe-up content strip is showing
int _trafficLightVisibilityGeneration = 0;
@@ -456,6 +457,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> with WindowListen
SettingsService.showPerformanceOverlay,
SettingsService.autoHidePerformanceOverlay,
SettingsService.clickVideoTogglesPlayback,
SettingsService.showChapterMarkersOnTimeline,
]);
_startHideTimer();
_initKeyboardService();
@@ -678,6 +680,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> with WindowListen
metadata: widget.metadata,
chapters: _chapters,
chaptersLoaded: _chaptersLoaded,
showChapterMarkersOnTimeline: _showChapterMarkersOnTimeline,
seekTimeSmall: _seekTimeSmall,
trackChapterControls: _buildTrackChapterControlsWidget(
hideChaptersAndQueue: hasStripContent,
@@ -18,6 +18,7 @@ class TimelineSlider extends StatefulWidget {
final List<BufferRange> bufferRanges;
final List<MediaChapter> chapters;
final bool chaptersLoaded;
final bool showChapterMarkersOnTimeline;
final ValueChanged<Duration> onSeek;
final ValueChanged<Duration> onSeekEnd;
@@ -50,6 +51,7 @@ class TimelineSlider extends StatefulWidget {
this.bufferRanges = const [],
required this.chapters,
required this.chaptersLoaded,
this.showChapterMarkersOnTimeline = true,
required this.onSeek,
required this.onSeekEnd,
this.focusNode,
@@ -177,7 +179,9 @@ class _TimelineSliderState extends State<TimelineSlider> {
painter: BufferRangePainter(
ranges: widget.bufferRanges,
duration: widget.duration,
chapters: widget.chaptersLoaded ? widget.chapters : const [],
chapters: widget.chaptersLoaded && widget.showChapterMarkersOnTimeline
? widget.chapters
: const [],
),
),
),
@@ -15,6 +15,7 @@ class VideoTimelineBar extends StatelessWidget {
final Player player;
final List<MediaChapter> chapters;
final bool chaptersLoaded;
final bool showChapterMarkersOnTimeline;
final ValueChanged<Duration> onSeek;
final ValueChanged<Duration> onSeekEnd;
@@ -49,6 +50,7 @@ class VideoTimelineBar extends StatelessWidget {
required this.player,
required this.chapters,
required this.chaptersLoaded,
this.showChapterMarkersOnTimeline = true,
required this.onSeek,
required this.onSeekEnd,
this.horizontalLayout = true,
@@ -161,6 +163,7 @@ class VideoTimelineBar extends StatelessWidget {
bufferRanges: bufferRanges,
chapters: chapters,
chaptersLoaded: chaptersLoaded,
showChapterMarkersOnTimeline: showChapterMarkersOnTimeline,
onSeek: onSeek,
onSeekEnd: onSeekEnd,
focusNode: focusNode,
+28
View File
@@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/media/media_source_info.dart';
import 'package:plezy/media/media_version.dart';
import 'package:plezy/widgets/video_controls/video_controls.dart';
import 'package:plezy/widgets/video_controls/painters/buffer_range_painter.dart';
import 'package:plezy/widgets/video_controls/widgets/mobile_skip_zones.dart';
import 'package:plezy/widgets/video_controls/widgets/timeline_slider.dart';
@@ -111,5 +112,32 @@ void main() {
expect(keyEvents, 1);
expect(seekEvents, 0);
});
testWidgets('does not pass chapters to painter when timeline markers are hidden', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 400,
child: TimelineSlider(
position: const Duration(minutes: 1),
duration: const Duration(minutes: 10),
chapters: [MediaChapter(id: 1, startTimeOffset: 300000)],
chaptersLoaded: true,
showChapterMarkersOnTimeline: false,
onSeek: (_) {},
onSeekEnd: (_) {},
),
),
),
),
);
final customPaint = tester.widget<CustomPaint>(
find.byWidgetPredicate((widget) => widget is CustomPaint && widget.painter is BufferRangePainter),
);
expect((customPaint.painter! as BufferRangePainter).chapters, isEmpty);
});
});
}