From 81c935fdd071f90faf5cad304dab62d23f77d68c Mon Sep 17 00:00:00 2001 From: Siiiiinth <60766886+Siiiiinth@users.noreply.github.com> Date: Mon, 5 Jan 2026 00:25:33 +0100 Subject: [PATCH] moved logic to playbackengine, forceRestart preserves pause state --- backend/playbackengine.go | 6 ++++++ backend/playbackmanager.go | 14 ++++++++------ backend/player/mpv/player.go | 5 ++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/backend/playbackengine.go b/backend/playbackengine.go index 694b8cf..f6ee1a5 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -627,6 +627,12 @@ func (p *playbackEngine) handleOnTrackChange() { p.invokeOnSongChangeCallbacks() p.handleTimePosUpdate(false) p.handleNextTrackUpdated() + + if p.pauseAfterCurrent { + p.Pause() + p.SetPauseAfterCurrent(false) + } + } func (p *playbackEngine) handleOnStopped() { diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index 7faad32..2ab4345 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -134,11 +134,6 @@ func (p *PlaybackManager) addOnTrackChangeHook() { log.Println("Play stall detected!") p.cmdQueue.addCommand(playbackCommand{Type: cmdForceRestartPlayback}) } - - if p.engine.pauseAfterCurrent { - p.Pause() - p.engine.SetPauseAfterCurrent(false) - } }() } }) @@ -832,7 +827,14 @@ func (p *PlaybackManager) runCmdQueue(ctx context.Context) { case cmdForceRestartPlayback: if mpv, ok := p.engine.CurrentPlayer().(*mpv.Player); ok { log.Println("Force-restarting MPV playback") - mpv.ForceRestartPlayback() + + // restart player, but perserve the state + isPaused := false + stat := p.engine.CurrentPlayer().GetStatus() + if stat.State == player.Paused { + isPaused = true + } + mpv.ForceRestartPlayback(isPaused) } } if c.OnDone != nil { diff --git a/backend/player/mpv/player.go b/backend/player/mpv/player.go index d40c396..fcfacc6 100644 --- a/backend/player/mpv/player.go +++ b/backend/player/mpv/player.go @@ -349,9 +349,8 @@ func (p *Player) Continue() error { return nil } -func (p *Player) ForceRestartPlayback() error { - p.mpv.SetProperty("pause", mpv.FORMAT_FLAG, true) - return p.mpv.SetProperty("pause", mpv.FORMAT_FLAG, false) +func (p *Player) ForceRestartPlayback(isPaused bool) error { + return p.mpv.SetProperty("pause", mpv.FORMAT_FLAG, isPaused) } // Get the current status of the player.