fix race condition on exit: disable UI playback state callbacks

This commit is contained in:
Drew Weymouth
2023-04-06 19:17:06 -07:00
parent f7b381c22c
commit 565c9e98a4
2 changed files with 15 additions and 1 deletions
+13
View File
@@ -27,6 +27,7 @@ type PlaybackManager struct {
playTimeStopwatch util.Stopwatch
curTrackTime float64
callbacksDisabled bool
playQueue []*subsonic.Child
nowPlayingIdx int64
@@ -99,6 +100,12 @@ func (p *PlaybackManager) IsSeeking() bool {
return p.player.IsSeeking()
}
// Should only be called before quitting.
// Disables playback state callbacks being sent
func (p *PlaybackManager) DisableCallbacks() {
p.callbacksDisabled = true
}
// Gets the curently playing song, if any.
func (p *PlaybackManager) NowPlaying() *subsonic.Child {
if len(p.playQueue) == 0 || p.player.GetStatus().State == player.Stopped {
@@ -310,6 +317,9 @@ func (p *PlaybackManager) sendNowPlayingScrobble() {
}
func (p *PlaybackManager) invokeOnSongChangeCallbacks() {
if p.callbacksDisabled {
return
}
for _, cb := range p.onSongChange {
cb(p.NowPlaying(), p.lastScrobbled)
}
@@ -337,6 +347,9 @@ func (p *PlaybackManager) startPollTimePos() {
}
func (p *PlaybackManager) doUpdateTimePos() {
if p.callbacksDisabled {
return
}
s := p.player.GetStatus()
for _, cb := range p.onPlayTimeUpdate {
cb(s.TimePos, s.Duration)