From 6c81e0dcaf5905c6fac3fe4b62dffaf67027d785 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Fri, 30 Jun 2023 18:08:07 +0200 Subject: fix double _next call and move mpv termination to Next Due to an logic error was _next() a second time from runMpv after the mpv subprocess was terminated by the first Next() call. --- player.go | 4 ++-- wrms.go | 24 +++++++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/player.go b/player.go index a330412..9a3723f 100644 --- a/player.go +++ b/player.go @@ -107,9 +107,9 @@ func (player *Player) runMpv() { player.Backends[currentSong.Source].OnSongFinished(currentSong) // mpv terminated because it finished playing the song - if err != nil { + if err == nil { llog.Info("mpv finished. Resetting mpv, and calling next") - wrms.Next() + wrms._lockedNext() } } diff --git a/wrms.go b/wrms.go index 5b7fcf3..1f74957 100644 --- a/wrms.go +++ b/wrms.go @@ -266,7 +266,7 @@ func (wrms *Wrms) AddSong(song Song) { wrms.Broadcast(newEvent("add", []Song{song})) if startPlayingAgain { - wrms.Next() + wrms._lockedNext() } } @@ -293,24 +293,28 @@ func (wrms *Wrms) DeleteSong(songUri string) { func (wrms *Wrms) Next() { wrms.rwlock.Lock() - wrms._next() -} - -func (wrms *Wrms) _next() { - llog.DDebug("Next Song") - - cmd := "play" // Terminate the mpv process playing the current song if wrms.Player.mpv.Load() != nil { wrms.Player.Stop() - cmd = "next" } + wrms._next() +} + +func (wrms *Wrms) _lockedNext() { + wrms.rwlock.Lock() + wrms._next() +} + +func (wrms *Wrms) _next() { + llog.DDebug("Next Song") + next := wrms.queue.PopSong() if next == nil { wrms.CurrentSong.Store(nil) wrms.Broadcast(newNotification("stop")) + wrms.rwlock.Unlock() return } @@ -326,9 +330,11 @@ func (wrms *Wrms) _next() { } } + cmd := "next" // We are playing -> start playing the next song if wrms.Playing { wrms.Player.Play(next) + cmd = "play" } wrms.rwlock.Unlock() -- cgit v1.2.3