feat: skip intro/credits keyboard shortcut

close #419
This commit is contained in:
edde746
2026-02-10 18:11:32 +01:00
parent 54c985d113
commit 7234da5b64
6 changed files with 19 additions and 4 deletions
+2 -1
View File
@@ -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": {
+2 -2
View File
@@ -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
+5 -1
View File
@@ -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;
}
+1
View File
@@ -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;