Fix another bug where next track would get scrobbled additionally

This commit is contained in:
Drew Weymouth
2023-06-15 20:23:49 -07:00
committed by GitHub
parent 50c383df95
commit 3063cec600
+6 -6
View File
@@ -60,8 +60,7 @@ func NewPlaybackManager(
if tracknum >= int64(len(pm.playQueue)) { if tracknum >= int64(len(pm.playQueue)) {
return return
} }
pm.checkScrobble(pm.playTimeStopwatch.Elapsed()) pm.checkScrobble()
pm.playTimeStopwatch.Reset()
if pm.player.GetStatus().State == player.Playing { if pm.player.GetStatus().State == player.Playing {
pm.playTimeStopwatch.Start() pm.playTimeStopwatch.Start()
} }
@@ -76,8 +75,7 @@ func NewPlaybackManager(
}) })
p.OnStopped(func() { p.OnStopped(func() {
pm.playTimeStopwatch.Stop() pm.playTimeStopwatch.Stop()
pm.checkScrobble(pm.playTimeStopwatch.Elapsed()) pm.checkScrobble()
pm.playTimeStopwatch.Reset()
pm.stopPollTimePos() pm.stopPollTimePos()
pm.doUpdateTimePos() pm.doUpdateTimePos()
pm.invokeOnSongChangeCallbacks() pm.invokeOnSongChangeCallbacks()
@@ -255,7 +253,7 @@ func (p *PlaybackManager) RemoveTracksFromQueue(trackIDs []string) {
if i == p.NowPlayingIndex() { if i == p.NowPlayingIndex() {
isPlayingTrackRemoved = true isPlayingTrackRemoved = true
// If we are removing the currently playing track, we need to scrobble it // If we are removing the currently playing track, we need to scrobble it
p.checkScrobble(p.playTimeStopwatch.Elapsed()) p.checkScrobble()
} }
if err := p.player.RemoveTrackAt(i - rmCount); err == nil { if err := p.player.RemoveTrackAt(i - rmCount); err == nil {
rmCount++ rmCount++
@@ -294,10 +292,11 @@ func (p *PlaybackManager) SetReplayGainOptions(config ReplayGainConfig) {
} }
// call BEFORE updating p.nowPlayingIdx // call BEFORE updating p.nowPlayingIdx
func (p *PlaybackManager) checkScrobble(playDur time.Duration) { func (p *PlaybackManager) checkScrobble() {
if !p.scrobbleCfg.Enabled || len(p.playQueue) == 0 || p.nowPlayingIdx < 0 { if !p.scrobbleCfg.Enabled || len(p.playQueue) == 0 || p.nowPlayingIdx < 0 {
return return
} }
playDur := p.playTimeStopwatch.Elapsed()
if playDur.Seconds() < 0.1 || p.curTrackTime < 0.1 { if playDur.Seconds() < 0.1 || p.curTrackTime < 0.1 {
return return
} }
@@ -311,6 +310,7 @@ func (p *PlaybackManager) checkScrobble(playDur time.Duration) {
p.lastScrobbled = song p.lastScrobbled = song
go p.sm.Server.Scrobble(song.ID, true) go p.sm.Server.Scrobble(song.ID, true)
} }
p.playTimeStopwatch.Reset()
} }
func (p *PlaybackManager) sendNowPlayingScrobble() { func (p *PlaybackManager) sendNowPlayingScrobble() {