From ae4660aa2c18bf938401a2e995333870fb501155 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 17 Mar 2023 18:05:19 -0700 Subject: [PATCH] send "Now Playing" scrobble to server on beginning new track --- backend/playbackmanager.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index a49713b..e3e52c8 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -55,6 +55,7 @@ func NewPlaybackManager(ctx context.Context, s *ServerManager, p *player.Player) pm.curTrackTime = float64(pm.playQueue[pm.nowPlayingIdx].Duration) pm.invokeOnSongChangeCallbacks() pm.doUpdateTimePos() + pm.sendNowPlayingScrobble() }) p.OnSeek(func() { pm.doUpdateTimePos() @@ -258,6 +259,7 @@ func (p *PlaybackManager) StopAndClearPlayQueue() { p.playQueue = nil } +// call BEFORE updating p.nowPlayingIdx func (p *PlaybackManager) checkScrobble(playDur time.Duration) { if len(p.playQueue) == 0 || p.nowPlayingIdx < 0 { return @@ -270,10 +272,21 @@ func (p *PlaybackManager) checkScrobble(playDur time.Duration) { log.Printf("Scrobbling %q", song.Title) song.PlayCount += 1 p.lastScrobbled = song - p.sm.Server.Scrobble(song.ID, map[string]string{"time": strconv.FormatInt(time.Now().Unix()*1000, 10)}) + go p.sm.Server.Scrobble(song.ID, map[string]string{"time": strconv.FormatInt(time.Now().Unix()*1000, 10)}) } } +func (p *PlaybackManager) sendNowPlayingScrobble() { + if len(p.playQueue) == 0 || p.nowPlayingIdx < 0 { + return + } + song := p.playQueue[p.nowPlayingIdx] + go p.sm.Server.Scrobble(song.ID, map[string]string{ + "time": strconv.FormatInt(time.Now().Unix()*1000, 10), + "submission": "false", + }) +} + func (p *PlaybackManager) invokeOnSongChangeCallbacks() { for _, cb := range p.onSongChange { cb(p.NowPlaying(), p.lastScrobbled)