From d4e9364d295702a9225e27ff8a21c9f2fb9dc1de Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Wed, 11 Mar 2026 18:27:43 +0100 Subject: [PATCH] fix: handle TogglePlayPauseEvent for macOS media key close #679 --- lib/screens/video_player_screen.dart | 39 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 127a8188..c24d1365 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -749,37 +749,36 @@ class VideoPlayerScreenState extends State with WidgetsBindin // Set up media control event handling _mediaControlSubscription = _mediaControlsManager!.controlEvents.listen((event) { + final currentPlayer = player; + if (currentPlayer == null && event is! NextTrackEvent && event is! PreviousTrackEvent) return; + if (event is PlayEvent) { appLogger.d('Media control: Play event received'); - if (player != null) { - player!.play(); - _wasPlayingBeforeInactive = false; - appLogger.d('Cleared _wasPlayingBeforeInactive due to manual play via media controls'); - _updateMediaControlsPlaybackState(); - } + currentPlayer!.play(); + _wasPlayingBeforeInactive = false; + _updateMediaControlsPlaybackState(); } else if (event is PauseEvent) { appLogger.d('Media control: Pause event received'); - if (player != null) { - player!.pause(); - appLogger.d('Video paused via media controls'); - _updateMediaControlsPlaybackState(); + currentPlayer!.pause(); + _updateMediaControlsPlaybackState(); + } else if (event is TogglePlayPauseEvent) { + appLogger.d('Media control: Toggle play/pause event received'); + if (currentPlayer!.state.playing) { + currentPlayer.pause(); + } else { + currentPlayer.play(); + _wasPlayingBeforeInactive = false; } + _updateMediaControlsPlaybackState(); } else if (event is SeekEvent) { appLogger.d('Media control: Seek event received to ${event.position}'); - final currentPlayer = player; - if (currentPlayer != null) { - unawaited(currentPlayer.seek(clampSeekPosition(currentPlayer, event.position))); - } + unawaited(currentPlayer!.seek(clampSeekPosition(currentPlayer, event.position))); } else if (event is NextTrackEvent) { appLogger.d('Media control: Next track event received'); - if (_nextEpisode != null) { - _playNext(); - } + if (_nextEpisode != null) _playNext(); } else if (event is PreviousTrackEvent) { appLogger.d('Media control: Previous track event received'); - if (_previousEpisode != null) { - _playPrevious(); - } + if (_previousEpisode != null) _playPrevious(); } });