From aac15fc80b512640315f1976b41e86371add3771 Mon Sep 17 00:00:00 2001 From: Julien Roux Date: Sat, 28 Feb 2026 14:33:24 +0100 Subject: [PATCH 1/2] Fix playback speed shortcuts and reset speed on new video - Fix keyboard shortcuts being replaced when speed boost is active by combining onKeyEvent with the default key map handler in InputHandler - Reset playbackRateProvider to 1.0 when loading a new playback item to prevent stale speed UI values - Remove manual focusNode.requestFocus() that conflicted with autofocus, fixing keyboard-only navigation - Fix PathAccessException crash in sync provider temp file cleanup on Windows --- lib/providers/sync_provider.dart | 19 ++++++++++++------- lib/providers/video_player_provider.dart | 1 + lib/util/input_handler.dart | 12 +++++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/providers/sync_provider.dart b/lib/providers/sync_provider.dart index aa44e2a64..774f0178e 100644 --- a/lib/providers/sync_provider.dart +++ b/lib/providers/sync_provider.dart @@ -153,14 +153,19 @@ class SyncNotifier extends StateNotifier { for (var file in files) { if (file is File) { final fileName = file.path.split(Platform.pathSeparator).last; - final fileSize = await file.length(); - if (fileName.startsWith('com.bbflight.background_downloader') && fileSize != 0) { - try { - await file.delete(); - log('Deleted temporary file: $fileName from ${dir.path}'); - } catch (e) { - log('Failed to delete file $fileName: $e'); + try { + final fileSize = await file.length(); + if (fileName.startsWith('com.bbflight.background_downloader') && fileSize != 0) { + try { + await file.delete(); + log('Deleted temporary file: $fileName from ${dir.path}'); + } catch (e) { + log('Failed to delete file $fileName: $e'); + } } + } on PathAccessException { + // Skip files that are inaccessible (e.g. pending deletion by Windows) + continue; } } } diff --git a/lib/providers/video_player_provider.dart b/lib/providers/video_player_provider.dart index 548f44881..5c7037f61 100644 --- a/lib/providers/video_player_provider.dart +++ b/lib/providers/video_player_provider.dart @@ -114,6 +114,7 @@ class VideoPlayerNotifier extends StateNotifier { Future loadPlaybackItem(PlaybackModel model, Duration startPosition) async { await state.stop(); + ref.read(playbackRateProvider.notifier).state = 1.0; mediaState.update((state) => state.copyWith( state: VideoPlayerState.fullScreen, buffering: true, diff --git a/lib/util/input_handler.dart b/lib/util/input_handler.dart index 742a92639..af4826f44 100644 --- a/lib/util/input_handler.dart +++ b/lib/util/input_handler.dart @@ -71,8 +71,6 @@ class _InputHandlerState extends ConsumerState> { super.initState(); if (widget.listenRawKeyboard) { _registerHardwareKeyboard(); - } else if (widget.autoFocus) { - focusNode.requestFocus(); } } @@ -98,7 +96,15 @@ class _InputHandlerState extends ConsumerState> { focusNode.requestFocus(); } }, - onKeyEvent: widget.onKeyEvent ?? (node, event) => _onKey(event), + onKeyEvent: (node, event) { + if (widget.onKeyEvent != null) { + final result = widget.onKeyEvent!(node, event); + if (result != KeyEventResult.ignored) { + return result; + } + } + return _onKey(event); + }, child: widget.child, ); } From 2890887e3817831226a02790aa94a9c1140c7a6f Mon Sep 17 00:00:00 2001 From: Julien Roux Date: Wed, 4 Mar 2026 20:46:47 +0100 Subject: [PATCH 2/2] remove file deletion logic in SyncNotifier --- lib/providers/sync_provider.dart | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/providers/sync_provider.dart b/lib/providers/sync_provider.dart index 774f0178e..aa44e2a64 100644 --- a/lib/providers/sync_provider.dart +++ b/lib/providers/sync_provider.dart @@ -153,19 +153,14 @@ class SyncNotifier extends StateNotifier { for (var file in files) { if (file is File) { final fileName = file.path.split(Platform.pathSeparator).last; - try { - final fileSize = await file.length(); - if (fileName.startsWith('com.bbflight.background_downloader') && fileSize != 0) { - try { - await file.delete(); - log('Deleted temporary file: $fileName from ${dir.path}'); - } catch (e) { - log('Failed to delete file $fileName: $e'); - } + final fileSize = await file.length(); + if (fileName.startsWith('com.bbflight.background_downloader') && fileSize != 0) { + try { + await file.delete(); + log('Deleted temporary file: $fileName from ${dir.path}'); + } catch (e) { + log('Failed to delete file $fileName: $e'); } - } on PathAccessException { - // Skip files that are inaccessible (e.g. pending deletion by Windows) - continue; } } }