Merge pull request #305 from micahmo/feature/click-video-play-pause

Add the ability to click the video player to play/pause
This commit is contained in:
edde746
2026-01-20 20:20:52 +01:00
committed by GitHub
20 changed files with 116 additions and 20 deletions
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -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",
+2
View File
@@ -107,6 +107,8 @@
"minutesUnit": "${minutes}분",
"rememberTrackSelections": "에피소드/영화별 트랙 선택 기억",
"rememberTrackSelectionsDescription": "재생 중 트랙을 변경할 때 오디오 및 자막 언어 설정을 자동으로 저장합니다",
"clickVideoTogglesPlayback": "비디오를 클릭하여 재생/일시정지를 전환하세요.",
"clickVideoTogglesPlaybackDescription": "이 옵션이 활성화되어 있으면 비디오 플레이어를 클릭할 때 재생 또는 일시정지가 됩니다. 그렇지 않으면 클릭 시 재생 컨트롤이 표시되거나 숨겨집니다.",
"videoPlayerControls": "비디오 플레이어 컨트롤",
"keyboardShortcuts": "키보드 단축키",
"keyboardShortcutsDescription": "사용자 정의 키보드 단축키",
+2
View File
@@ -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",
+2 -2
View File
@@ -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
+6 -2
View File
@@ -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',
+10 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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' => '동기화 중...',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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',
+6 -2
View File
@@ -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' => '主持人',
+2
View File
@@ -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",
+2
View File
@@ -107,6 +107,8 @@
"minutesUnit": "${minutes} 分钟",
"rememberTrackSelections": "记住每个剧集/电影的音轨选择",
"rememberTrackSelectionsDescription": "在播放过程中更改音轨时自动保存音频和字幕语言偏好",
"clickVideoTogglesPlayback": "点击视频可切换播放/暂停",
"clickVideoTogglesPlaybackDescription": "如果启用此选项,点击视频播放器将播放或暂停视频。否则,点击将显示或隐藏播放控件",
"videoPlayerControls": "视频播放器控制",
"keyboardShortcuts": "键盘快捷键",
"keyboardShortcutsDescription": "自定义键盘快捷键",
+17
View File
@@ -56,6 +56,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
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<SettingsScreen> {
_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<SettingsScreen> {
}
Widget _buildVideoPlaybackSection() {
final isMobile = PlatformDetector.isMobile(context);
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -358,6 +362,19 @@ class _SettingsScreenState extends State<SettingsScreen> {
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),
+11
View File
@@ -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<void> setClickVideoTogglesPlayback(bool value) async {
await prefs.setBool(_keyClickVideoTogglesPlayback, value);
}
bool getClickVideoTogglesPlayback() {
return prefs.getBool(_keyClickVideoTogglesPlayback) ?? false;
}
// Auto Skip Intro
Future<void> 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(),
+18 -2
View File
@@ -142,6 +142,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> 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<DesktopVideoControlsState> _desktopControlsKey = GlobalKey<DesktopVideoControlsState>();
@@ -393,6 +394,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> 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<PlexVideoControls> 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<PlexVideoControls> 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<PlexVideoControls> with WindowListen
right: 0,
bottom: bottomExclude,
child: GestureDetector(
onTap: _toggleControls,
onTap: _handleTapInSkipZoneDesktop,
onDoubleTap: _toggleFullscreen,
behavior: HitTestBehavior.translucent,
child: Container(color: Colors.transparent),