@@ -203,7 +203,8 @@
|
||||
"speedReset": "Reset Speed",
|
||||
"subSeekNext": "Seek to Next Subtitle",
|
||||
"subSeekPrev": "Seek to Previous Subtitle",
|
||||
"shaderToggle": "Toggle Shaders"
|
||||
"shaderToggle": "Toggle Shaders",
|
||||
"skipMarker": "Skip Intro/Credits"
|
||||
}
|
||||
},
|
||||
"pinEntry": {
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 9
|
||||
/// Strings: 5121 (569 per locale)
|
||||
/// Strings: 5131 (570 per locale)
|
||||
///
|
||||
/// Built on 2026-02-09 at 18:36 UTC
|
||||
/// Built on 2026-02-10 at 15:52 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
@@ -2051,6 +2051,9 @@ class TranslationsHotkeysActionsEn {
|
||||
|
||||
/// en: 'Toggle Shaders'
|
||||
String get shaderToggle => 'Toggle Shaders';
|
||||
|
||||
/// en: 'Skip Intro/Credits'
|
||||
String get skipMarker => 'Skip Intro/Credits';
|
||||
}
|
||||
|
||||
// Path: videoControls.pipErrors
|
||||
@@ -2322,6 +2325,7 @@ extension on Translations {
|
||||
'hotkeys.actions.subSeekNext' => 'Seek to Next Subtitle',
|
||||
'hotkeys.actions.subSeekPrev' => 'Seek to Previous Subtitle',
|
||||
'hotkeys.actions.shaderToggle' => 'Toggle Shaders',
|
||||
'hotkeys.actions.skipMarker' => 'Skip Intro/Credits',
|
||||
'pinEntry.enterPin' => 'Enter PIN',
|
||||
'pinEntry.showPin' => 'Show PIN',
|
||||
'pinEntry.hidePin' => 'Hide PIN',
|
||||
@@ -2644,9 +2648,9 @@ extension on Translations {
|
||||
'watchTogether.title' => 'Watch Together',
|
||||
'watchTogether.description' => 'Watch content in sync with friends and family',
|
||||
'watchTogether.createSession' => 'Create Session',
|
||||
'watchTogether.creating' => 'Creating...',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.creating' => 'Creating...',
|
||||
'watchTogether.joinSession' => 'Join Session',
|
||||
'watchTogether.joining' => 'Joining...',
|
||||
'watchTogether.controlMode' => 'Control Mode',
|
||||
|
||||
@@ -136,6 +136,7 @@ class KeyboardShortcutsService {
|
||||
VoidCallback? onPreviousChapter, {
|
||||
VoidCallback? onBack,
|
||||
VoidCallback? onToggleShader,
|
||||
VoidCallback? onSkipMarker,
|
||||
}) {
|
||||
if (event is! KeyDownEvent) return KeyEventResult.ignored;
|
||||
|
||||
@@ -212,6 +213,7 @@ class KeyboardShortcutsService {
|
||||
onNextChapter,
|
||||
onPreviousChapter,
|
||||
onToggleShader: onToggleShader,
|
||||
onSkipMarker: onSkipMarker,
|
||||
);
|
||||
return KeyEventResult.handled;
|
||||
}
|
||||
@@ -230,6 +232,7 @@ class KeyboardShortcutsService {
|
||||
VoidCallback? onNextChapter,
|
||||
VoidCallback? onPreviousChapter, {
|
||||
VoidCallback? onToggleShader,
|
||||
VoidCallback? onSkipMarker,
|
||||
}) {
|
||||
switch (action) {
|
||||
case 'play_pause':
|
||||
@@ -303,6 +306,9 @@ class KeyboardShortcutsService {
|
||||
case 'shader_toggle':
|
||||
onToggleShader?.call();
|
||||
break;
|
||||
case 'skip_marker':
|
||||
onSkipMarker?.call();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,6 +355,8 @@ class KeyboardShortcutsService {
|
||||
return t.hotkeys.actions.subSeekPrev;
|
||||
case 'shader_toggle':
|
||||
return t.hotkeys.actions.shaderToggle;
|
||||
case 'skip_marker':
|
||||
return t.hotkeys.actions.skipMarker;
|
||||
default:
|
||||
return action;
|
||||
}
|
||||
|
||||
@@ -403,6 +403,7 @@ class SettingsService extends BaseSharedPreferencesService {
|
||||
'sub_seek_next': HotKey(key: PhysicalKeyboardKey.arrowRight, modifiers: [HotKeyModifier.control]),
|
||||
'sub_seek_prev': HotKey(key: PhysicalKeyboardKey.arrowLeft, modifiers: [HotKeyModifier.control]),
|
||||
'shader_toggle': HotKey(key: PhysicalKeyboardKey.keyG),
|
||||
'skip_marker': HotKey(key: PhysicalKeyboardKey.enter),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1557,6 +1557,7 @@ class _PlexVideoControlsState extends State<PlexVideoControls> with WindowListen
|
||||
_previousChapter,
|
||||
onBack: widget.onBack ?? () => Navigator.of(context).pop(true),
|
||||
onToggleShader: _toggleShader,
|
||||
onSkipMarker: _performAutoSkip,
|
||||
);
|
||||
// Never return .ignored from fullscreen video — prevent leaking to previous routes
|
||||
return result == KeyEventResult.ignored ? KeyEventResult.handled : result;
|
||||
|
||||
Reference in New Issue
Block a user