diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 00426547..14f9253f 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -107,6 +107,8 @@ "minutesUnit": "${minutes} Minuten", "rememberTrackSelections": "Spurauswahl pro Serie/Film merken", "rememberTrackSelectionsDescription": "Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert", + "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", "keyboardShortcuts": "Tastenkürzel", "keyboardShortcutsDescription": "Tastenkürzel anpassen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 86196b2f..5d512ac2 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -106,6 +106,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", + "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", "keyboardShortcuts": "Keyboard Shortcuts", "keyboardShortcutsDescription": "Customize keyboard shortcuts", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index fe9a8670..2770d3dd 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -106,6 +106,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", + "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", "keyboardShortcuts": "Raccourcis clavier", "keyboardShortcutsDescription": "Personnaliser les raccourcis clavier", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index c2016066..e58f778f 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -107,6 +107,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", + "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", "keyboardShortcuts": "Scorciatoie da tastiera", "keyboardShortcutsDescription": "Personalizza le scorciatoie da tastiera", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index d509c0c9..9fd9d9f7 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -107,6 +107,8 @@ "minutesUnit": "${minutes}분", "rememberTrackSelections": "에피소드/영화별 트랙 선택 기억", "rememberTrackSelectionsDescription": "재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다", + "clickVideoTogglesPlayback": "비디오를 클릭하여 재생/일시정지를 전환하세요.", + "clickVideoTogglesPlaybackDescription": "이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.", "videoPlayerControls": "비디오 플레이어 컨트롤", "keyboardShortcuts": "키보드 단축키", "keyboardShortcutsDescription": "사용자 정의 키보드 단축키", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index e4869100..32e96b4c 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -107,6 +107,8 @@ "minutesUnit": "bij ${minutes} minuten", "rememberTrackSelections": "Onthoud track selecties per serie/film", "rememberTrackSelectionsDescription": "Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen", + "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", "keyboardShortcuts": "Toetsenbord sneltoetsen", "keyboardShortcutsDescription": "Pas toetsenbord sneltoetsen aan", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index f78867ce..45efdcff 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 8 -/// Strings: 4308 (538 per locale) +/// Strings: 4324 (540 per locale) /// -/// Built on 2026-01-20 at 12:49 UTC +/// Built on 2026-01-20 at 15:18 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 6bad5680..14597486 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsDe implements 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 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'; @override String get keyboardShortcuts => 'Tastenkürzel'; @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; @@ -1033,6 +1035,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.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', 'settings.keyboardShortcuts' => 'Tastenkürzel', 'settings.keyboardShortcutsDescription' => 'Tastenkürzel anpassen', @@ -1446,10 +1450,10 @@ extension on TranslationsDe { 'watchTogether.inSession' => 'In Sitzung', 'watchTogether.sessionCode' => 'Sitzungscode', 'watchTogether.hostControlsPlayback' => 'Host steuert die Wiedergabe', - 'watchTogether.anyoneCanControl' => 'Alle können die Wiedergabe steuern', - 'watchTogether.hostControls' => 'Host steuert', _ => null, } ?? switch (path) { + 'watchTogether.anyoneCanControl' => 'Alle können die Wiedergabe steuern', + 'watchTogether.hostControls' => 'Host steuert', 'watchTogether.anyoneControls' => 'Alle steuern', 'watchTogether.participants' => 'Teilnehmer', 'watchTogether.host' => 'Host', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index b75a7d40..49b51ecd 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -415,6 +415,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: 'Click on video to toggle play/pause' + String get clickVideoTogglesPlayback => 'Click on video to toggle play/pause'; + + /// en: 'If enabled, clicking on the video player will play/pause the video. Otherwise, clicking will show/hide the playback controls.' + String get clickVideoTogglesPlaybackDescription => 'If enabled, clicking on the video player will play/pause the video. Otherwise, clicking will show/hide the playback controls.'; + /// en: 'Video Player Controls' String get videoPlayerControls => 'Video Player Controls'; @@ -2109,6 +2115,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.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', 'settings.keyboardShortcuts' => 'Keyboard Shortcuts', 'settings.keyboardShortcutsDescription' => 'Customize keyboard shortcuts', @@ -2523,10 +2531,10 @@ extension on Translations { 'watchTogether.leaveSessionConfirm' => 'You will be removed from the session.', 'watchTogether.endSessionConfirmOverlay' => 'This will end the watch session for all participants.', 'watchTogether.leaveSessionConfirmOverlay' => 'You will be disconnected from the watch session.', - 'watchTogether.end' => 'End', - 'watchTogether.leave' => 'Leave', _ => null, } ?? switch (path) { + 'watchTogether.end' => 'End', + 'watchTogether.leave' => 'Leave', 'watchTogether.syncing' => 'Syncing...', 'watchTogether.participant' => 'participant', 'watchTogether.joinWatchSession' => 'Join Watch Session', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 1449f5f7..91c2630d 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -219,6 +219,8 @@ class _TranslationsSettingsFr implements 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 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'; @override String get keyboardShortcuts => 'Raccourcis clavier'; @override String get keyboardShortcutsDescription => 'Personnaliser les raccourcis clavier'; @@ -1030,6 +1032,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.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', 'settings.keyboardShortcuts' => 'Raccourcis clavier', 'settings.keyboardShortcutsDescription' => 'Personnaliser les raccourcis clavier', @@ -1444,10 +1448,10 @@ extension on TranslationsFr { 'watchTogether.leaveSessionConfirm' => 'Vous allez être déconnecté de la session.', 'watchTogether.endSessionConfirmOverlay' => 'Cela mettra fin à la session de visionnage pour tous les participants.', 'watchTogether.leaveSessionConfirmOverlay' => 'Vous serez déconnecté de la session de visionnage.', - 'watchTogether.end' => 'Terminer', - 'watchTogether.leave' => 'Fin', _ => null, } ?? switch (path) { + 'watchTogether.end' => 'Terminer', + 'watchTogether.leave' => 'Fin', 'watchTogether.syncing' => 'Synchronisation...', 'watchTogether.participant' => 'participant', 'watchTogether.joinWatchSession' => 'Rejoindre la session de visionnage', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 21b03bbd..f462b71e 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsIt implements 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 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'; @override String get keyboardShortcuts => 'Scorciatoie da tastiera'; @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; @@ -1033,6 +1035,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.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', 'settings.keyboardShortcuts' => 'Scorciatoie da tastiera', 'settings.keyboardShortcutsDescription' => 'Personalizza le scorciatoie da tastiera', @@ -1446,10 +1450,10 @@ extension on TranslationsIt { 'watchTogether.inSession' => 'In Sessione', 'watchTogether.sessionCode' => 'Codice Sessione', 'watchTogether.hostControlsPlayback' => 'L\'host controlla la riproduzione', - 'watchTogether.anyoneCanControl' => 'Tutti possono controllare la riproduzione', - 'watchTogether.hostControls' => 'Controllo host', _ => null, } ?? switch (path) { + 'watchTogether.anyoneCanControl' => 'Tutti possono controllare la riproduzione', + 'watchTogether.hostControls' => 'Controllo host', 'watchTogether.anyoneControls' => 'Controllo di tutti', 'watchTogether.participants' => 'Partecipanti', 'watchTogether.host' => 'Host', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 05cc6f5e..9036f0d7 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsKo implements TranslationsSettingsEn { @override String minutesUnit({required Object minutes}) => '${minutes}분'; @override String get rememberTrackSelections => '에피소드/영화별 트랙 선택 기억'; @override String get rememberTrackSelectionsDescription => '재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다'; + @override String get clickVideoTogglesPlayback => '비디오를 클릭하여 재생/일시정지를 전환하세요.'; + @override String get clickVideoTogglesPlaybackDescription => '이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.'; @override String get videoPlayerControls => '비디오 플레이어 컨트롤'; @override String get keyboardShortcuts => '키보드 단축키'; @override String get keyboardShortcutsDescription => '사용자 정의 키보드 단축키'; @@ -1033,6 +1035,8 @@ extension on TranslationsKo { 'settings.minutesUnit' => ({required Object minutes}) => '${minutes}분', 'settings.rememberTrackSelections' => '에피소드/영화별 트랙 선택 기억', 'settings.rememberTrackSelectionsDescription' => '재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다', + 'settings.clickVideoTogglesPlayback' => '비디오를 클릭하여 재생/일시정지를 전환하세요.', + 'settings.clickVideoTogglesPlaybackDescription' => '이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.', 'settings.videoPlayerControls' => '비디오 플레이어 컨트롤', 'settings.keyboardShortcuts' => '키보드 단축키', 'settings.keyboardShortcutsDescription' => '사용자 정의 키보드 단축키', @@ -1446,10 +1450,10 @@ extension on TranslationsKo { 'watchTogether.leaveSessionQuestion' => '세션을 탈퇴 하시겠습니까?', 'watchTogether.endSessionConfirm' => '이 작업은 모든 참가자의 세션을 종료합니다.', 'watchTogether.leaveSessionConfirm' => '당신은 세션에서 제거됩니다.', - 'watchTogether.endSessionConfirmOverlay' => '이것은 모든 참가자의 시청 세션을 종료합니다.', - 'watchTogether.leaveSessionConfirmOverlay' => '시청 세션 연결이 끊어집니다.', _ => null, } ?? switch (path) { + 'watchTogether.endSessionConfirmOverlay' => '이것은 모든 참가자의 시청 세션을 종료합니다.', + 'watchTogether.leaveSessionConfirmOverlay' => '시청 세션 연결이 끊어집니다.', 'watchTogether.end' => '종료', 'watchTogether.leave' => '이탈', 'watchTogether.syncing' => '동기화 중...', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 62b9824d..fa8f6870 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsNl implements 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 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'; @override String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; @@ -1033,6 +1035,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.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', 'settings.keyboardShortcuts' => 'Toetsenbord sneltoetsen', 'settings.keyboardShortcutsDescription' => 'Pas toetsenbord sneltoetsen aan', @@ -1446,10 +1450,10 @@ extension on TranslationsNl { 'watchTogether.inSession' => 'In Sessie', 'watchTogether.sessionCode' => 'Sessiecode', 'watchTogether.hostControlsPlayback' => 'Host bedient het afspelen', - 'watchTogether.anyoneCanControl' => 'Iedereen kan het afspelen bedienen', - 'watchTogether.hostControls' => 'Host bedient', _ => null, } ?? switch (path) { + 'watchTogether.anyoneCanControl' => 'Iedereen kan het afspelen bedienen', + 'watchTogether.hostControls' => 'Host bedient', 'watchTogether.anyoneControls' => 'Iedereen bedient', 'watchTogether.participants' => 'Deelnemers', 'watchTogether.host' => 'Host', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index 2374e34b..90ec44a6 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsSv implements 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 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'; @override String get keyboardShortcuts => 'Tangentbordsgenvägar'; @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; @@ -1033,6 +1035,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.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', 'settings.keyboardShortcuts' => 'Tangentbordsgenvägar', 'settings.keyboardShortcutsDescription' => 'Anpassa tangentbordsgenvägar', @@ -1446,10 +1450,10 @@ extension on TranslationsSv { 'watchTogether.inSession' => 'I Session', 'watchTogether.sessionCode' => 'Sessionskod', 'watchTogether.hostControlsPlayback' => 'Värden styr uppspelningen', - 'watchTogether.anyoneCanControl' => 'Alla kan styra uppspelningen', - 'watchTogether.hostControls' => 'Värd styr', _ => null, } ?? switch (path) { + 'watchTogether.anyoneCanControl' => 'Alla kan styra uppspelningen', + 'watchTogether.hostControls' => 'Värd styr', 'watchTogether.anyoneControls' => 'Alla styr', 'watchTogether.participants' => 'Deltagare', 'watchTogether.host' => 'Värd', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index b03d49a4..8a46db5f 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -220,6 +220,8 @@ class _TranslationsSettingsZh implements TranslationsSettingsEn { @override String minutesUnit({required Object minutes}) => '${minutes} 分钟'; @override String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; @override String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + @override String get clickVideoTogglesPlayback => '点击视频可切换播放/暂停'; + @override String get clickVideoTogglesPlaybackDescription => '如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件'; @override String get videoPlayerControls => '视频播放器控制'; @override String get keyboardShortcuts => '键盘快捷键'; @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; @@ -1033,6 +1035,8 @@ extension on TranslationsZh { 'settings.minutesUnit' => ({required Object minutes}) => '${minutes} 分钟', 'settings.rememberTrackSelections' => '记住每个剧集/电影的音轨选择', 'settings.rememberTrackSelectionsDescription' => '在播放过程中更改音轨时自动保存音频和字幕语言偏好', + 'settings.clickVideoTogglesPlayback' => '点击视频可切换播放/暂停', + 'settings.clickVideoTogglesPlaybackDescription' => '如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件', 'settings.videoPlayerControls' => '视频播放器控制', 'settings.keyboardShortcuts' => '键盘快捷键', 'settings.keyboardShortcutsDescription' => '自定义键盘快捷键', @@ -1446,10 +1450,10 @@ extension on TranslationsZh { 'watchTogether.inSession' => '在会话中', 'watchTogether.sessionCode' => '会话代码', 'watchTogether.hostControlsPlayback' => '主持人控制播放', - 'watchTogether.anyoneCanControl' => '任何人都可以控制播放', - 'watchTogether.hostControls' => '主持人控制', _ => null, } ?? switch (path) { + 'watchTogether.anyoneCanControl' => '任何人都可以控制播放', + 'watchTogether.hostControls' => '主持人控制', 'watchTogether.anyoneControls' => '任何人控制', 'watchTogether.participants' => '参与者', 'watchTogether.host' => '主持人', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index e69acbe9..c1cac4cf 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -107,6 +107,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", + "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", "keyboardShortcuts": "Tangentbordsgenvägar", "keyboardShortcutsDescription": "Anpassa tangentbordsgenvägar", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index cb945569..b7311b9b 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -107,6 +107,8 @@ "minutesUnit": "${minutes} 分钟", "rememberTrackSelections": "记住每个剧集/电影的音轨选择", "rememberTrackSelectionsDescription": "在播放过程中更改音轨时自动保存音频和字幕语言偏好", + "clickVideoTogglesPlayback": "点击视频可切换播放/暂停", + "clickVideoTogglesPlaybackDescription": "如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件", "videoPlayerControls": "视频播放器控制", "keyboardShortcuts": "键盘快捷键", "keyboardShortcutsDescription": "自定义键盘快捷键", diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index af4cf226..0d07d3eb 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -56,6 +56,7 @@ class _SettingsScreenState extends State { int _seekTimeLarge = 30; int _sleepTimerDuration = 30; bool _rememberTrackSelections = true; + bool _clickVideoTogglesPlayback = false; bool _autoSkipIntro = true; bool _autoSkipCredits = true; int _autoSkipDelay = 5; @@ -89,6 +90,7 @@ class _SettingsScreenState extends State { _seekTimeLarge = _settingsService.getSeekTimeLarge(); _sleepTimerDuration = _settingsService.getSleepTimerDuration(); _rememberTrackSelections = _settingsService.getRememberTrackSelections(); + _clickVideoTogglesPlayback = _settingsService.getClickVideoTogglesPlayback(); _autoSkipIntro = _settingsService.getAutoSkipIntro(); _autoSkipCredits = _settingsService.getAutoSkipCredits(); _autoSkipDelay = _settingsService.getAutoSkipDelay(); @@ -245,6 +247,8 @@ class _SettingsScreenState extends State { } Widget _buildVideoPlaybackSection() { + final isMobile = PlatformDetector.isMobile(context); + return Card( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -358,6 +362,19 @@ class _SettingsScreenState extends State { await _settingsService.setRememberTrackSelections(value); }, ), + if (!isMobile) + SwitchListTile( + secondary: const AppIcon(Symbols.play_pause_rounded, fill: 1), + title: Text(t.settings.clickVideoTogglesPlayback), + subtitle: Text(t.settings.clickVideoTogglesPlaybackDescription), + value: _clickVideoTogglesPlayback, + onChanged: (value) async { + setState(() { + _clickVideoTogglesPlayback = value; + }); + await _settingsService.setClickVideoTogglesPlayback(value); + }, + ), const Divider(), Padding( padding: const EdgeInsets.fromLTRB(16, 8, 16, 0), diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 9ab6cbce..f4165270 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -48,6 +48,7 @@ class SettingsService extends BaseSharedPreferencesService { static const String _keySubtitleBackgroundOpacity = 'subtitle_background_opacity'; static const String _keyAppLocale = 'app_locale'; static const String _keyRememberTrackSelections = 'remember_track_selections'; + static const String _keyClickVideoTogglesPlayback = 'click_video_toggles_playback'; static const String _keyAutoSkipIntro = 'auto_skip_intro'; static const String _keyAutoSkipCredits = 'auto_skip_credits'; static const String _keyAutoSkipDelay = 'auto_skip_delay'; @@ -804,6 +805,15 @@ class SettingsService extends BaseSharedPreferencesService { return prefs.getBool(_keyRememberTrackSelections) ?? true; } + // Click on Video Player Settings + Future setClickVideoTogglesPlayback(bool value) async { + await prefs.setBool(_keyClickVideoTogglesPlayback, value); + } + + bool getClickVideoTogglesPlayback() { + return prefs.getBool(_keyClickVideoTogglesPlayback) ?? false; + } + // Auto Skip Intro Future setAutoSkipIntro(bool value) async { await prefs.setBool(_keyAutoSkipIntro, value); @@ -1045,6 +1055,7 @@ class SettingsService extends BaseSharedPreferencesService { 'keyboardShortcuts': getKeyboardShortcuts(), 'keyboardHotkeys': hotkeys.map((key, value) => MapEntry(key, _serializeHotKey(value))), 'rememberTrackSelections': getRememberTrackSelections(), + 'clickVideoTogglesPlayback': getClickVideoTogglesPlayback(), 'autoSkipIntro': getAutoSkipIntro(), 'autoSkipCredits': getAutoSkipCredits(), 'autoSkipDelay': getAutoSkipDelay(), diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index 3ef69851..64c0b295 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -142,6 +142,7 @@ class _PlexVideoControlsState extends State with WindowListen int _audioSyncOffset = 0; // Default, loaded from settings int _subtitleSyncOffset = 0; // Default, loaded from settings bool _isRotationLocked = true; // Default locked (landscape only) + bool _clickVideoTogglesPlayback = false; // Default, loaded from settings // GlobalKey to access DesktopVideoControls state for focus management final GlobalKey _desktopControlsKey = GlobalKey(); @@ -393,6 +394,7 @@ class _PlexVideoControlsState extends State with WindowListen _autoSkipDelay = settingsService.getAutoSkipDelay(); _videoPlayerNavigationEnabled = settingsService.getVideoPlayerNavigationEnabled(); _showPerformanceOverlay = settingsService.getShowPerformanceOverlay(); + _clickVideoTogglesPlayback = settingsService.getClickVideoTogglesPlayback(); }); // Apply rotation lock setting @@ -784,6 +786,15 @@ class _PlexVideoControlsState extends State with WindowListen widget.onSeekCompleted?.call(position); } + /// Handle tap in skip zone for desktop mode + void _handleTapInSkipZoneDesktop() { + if (widget.canControl && _clickVideoTogglesPlayback) { + widget.player.playOrPause(); + } + + _toggleControls(); + } + /// Handle tap in skip zone with custom double-tap detection void _handleTapInSkipZone({required bool isForward}) { final now = DateTime.now(); @@ -913,8 +924,13 @@ class _PlexVideoControlsState extends State with WindowListen /// Handle tap on controls overlay - route to skip zones or toggle controls void _handleControlsOverlayTap(TapUpDetails details, BoxConstraints constraints) { final isMobile = PlatformDetector.isMobile(context); + if (!isMobile) { - _toggleControls(); + if (widget.canControl && _clickVideoTogglesPlayback) { + widget.player.playOrPause(); + } else { + _toggleControls(); + } return; } @@ -1319,7 +1335,7 @@ class _PlexVideoControlsState extends State with WindowListen right: 0, bottom: bottomExclude, child: GestureDetector( - onTap: _toggleControls, + onTap: _handleTapInSkipZoneDesktop, onDoubleTap: _toggleFullscreen, behavior: HitTestBehavior.translucent, child: Container(color: Colors.transparent),