From 838c5b34855dd83f2c1da043a54b18112682b282 Mon Sep 17 00:00:00 2001 From: Trizotto Date: Sun, 7 Sep 2025 15:02:34 +0200 Subject: [PATCH] feat: new shortcuts to increase and decrease playback rate --- lib/l10n/app_en.arb | 2 ++ lib/models/settings/video_player_settings.dart | 6 ++++++ lib/models/settings/video_player_settings.g.dart | 2 ++ .../settings/video_player_settings_provider.dart | 9 +++++++++ lib/screens/video_player/video_player_controls.dart | 8 ++++++++ 5 files changed, 27 insertions(+) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 9d39506..da95307 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -1302,6 +1302,8 @@ "mute": "Mute", "volumeUp": "Volume Up", "volumeDown": "Volume Down", + "speedUp": "Speed Up", + "speedDown": "Speed Down", "nextVideo": "Next Video", "prevVideo": "Previous Video", "nextChapter": "Next Chapter", diff --git a/lib/models/settings/video_player_settings.dart b/lib/models/settings/video_player_settings.dart index fbe2d52..a735ba1 100644 --- a/lib/models/settings/video_player_settings.dart +++ b/lib/models/settings/video_player_settings.dart @@ -20,6 +20,8 @@ enum VideoHotKeys { mute, volumeUp, volumeDown, + speedUp, + speedDown, nextVideo, prevVideo, nextChapter, @@ -38,6 +40,8 @@ enum VideoHotKeys { VideoHotKeys.mute => context.localized.mute, VideoHotKeys.volumeUp => context.localized.volumeUp, VideoHotKeys.volumeDown => context.localized.volumeDown, + VideoHotKeys.speedUp => context.localized.speedUp, + VideoHotKeys.speedDown => context.localized.speedDown, VideoHotKeys.nextVideo => context.localized.nextVideo, VideoHotKeys.prevVideo => context.localized.prevVideo, VideoHotKeys.nextChapter => context.localized.nextChapter, @@ -180,6 +184,8 @@ Map get _defaultVideoHotKeys => { VideoHotKeys.mute => KeyCombination(key: LogicalKeyboardKey.keyM), VideoHotKeys.volumeUp => KeyCombination(key: LogicalKeyboardKey.arrowUp), VideoHotKeys.volumeDown => KeyCombination(key: LogicalKeyboardKey.arrowDown), + VideoHotKeys.speedUp => KeyCombination(key: LogicalKeyboardKey.arrowUp, modifier: LogicalKeyboardKey.controlLeft), + VideoHotKeys.speedDown => KeyCombination(key: LogicalKeyboardKey.arrowDown, modifier: LogicalKeyboardKey.controlLeft), VideoHotKeys.prevVideo => KeyCombination(key: LogicalKeyboardKey.keyP, modifier: LogicalKeyboardKey.shiftLeft), VideoHotKeys.nextVideo => diff --git a/lib/models/settings/video_player_settings.g.dart b/lib/models/settings/video_player_settings.g.dart index c44b4ee..096d0bc 100644 --- a/lib/models/settings/video_player_settings.g.dart +++ b/lib/models/settings/video_player_settings.g.dart @@ -138,6 +138,8 @@ const _$VideoHotKeysEnumMap = { VideoHotKeys.mute: 'mute', VideoHotKeys.volumeUp: 'volumeUp', VideoHotKeys.volumeDown: 'volumeDown', + VideoHotKeys.speedUp: 'speedUp', + VideoHotKeys.speedDown: 'speedDown', VideoHotKeys.nextVideo: 'nextVideo', VideoHotKeys.prevVideo: 'prevVideo', VideoHotKeys.nextChapter: 'nextChapter', diff --git a/lib/providers/settings/video_player_settings_provider.dart b/lib/providers/settings/video_player_settings_provider.dart index a67b957..160f26a 100644 --- a/lib/providers/settings/video_player_settings_provider.dart +++ b/lib/providers/settings/video_player_settings_provider.dart @@ -69,6 +69,15 @@ class VideoPlayerSettingsProviderNotifier extends StateNotifier? orientation) => state = state.copyWith(allowedOrientations: orientation); diff --git a/lib/screens/video_player/video_player_controls.dart b/lib/screens/video_player/video_player_controls.dart index 6639b57..a7a1e3e 100644 --- a/lib/screens/video_player/video_player_controls.dart +++ b/lib/screens/video_player/video_player_controls.dart @@ -697,6 +697,14 @@ class _DesktopControlsState extends ConsumerState { resetTimer(); ref.read(videoPlayerSettingsProvider.notifier).steppedVolume(-5); return true; + case VideoHotKeys.speedUp: + resetTimer(); + ref.read(videoPlayerSettingsProvider.notifier).steppedSpeed(0.1); + return true; + case VideoHotKeys.speedDown: + resetTimer(); + ref.read(videoPlayerSettingsProvider.notifier).steppedSpeed(-0.1); + return true; case VideoHotKeys.fullScreen: fullScreenHelper.toggleFullScreen(ref); return true;