From bd5c2f2cbb0e6a5cf697eb707e3f2848bc72b283 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 17 Mar 2023 17:57:18 -0700 Subject: [PATCH] fix extra onTrackChange events --- backend/playbackmanager.go | 5 +---- player/player.go | 21 ++++----------------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index 589d2b1..a49713b 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -42,9 +42,6 @@ func NewPlaybackManager(ctx context.Context, s *ServerManager, p *player.Player) sm: s, player: p, } - // TODO: we get some spurious OnTrackChange callbacks from the player, - // especially when loading/playing a new album, - // but for now they're pretty much harmless. Investigate later. p.OnTrackChange(func(tracknum int64) { if tracknum >= int64(len(pm.playQueue)) { return @@ -266,7 +263,7 @@ func (p *PlaybackManager) checkScrobble(playDur time.Duration) { return } if playDur.Seconds() < 0.1 || p.curTrackTime < 0.1 { - return // ignore spurious onTrackChange callbacks + return } song := p.playQueue[p.nowPlayingIdx] if playDur.Seconds()/p.curTrackTime > ScrobbleThreshold { diff --git a/player/player.go b/player/player.go index 192cfda..a9dc656 100644 --- a/player/player.go +++ b/player/player.go @@ -239,11 +239,7 @@ func (p *Player) setPaused(paused bool) error { // Start playback from the first track in the play queue. func (p *Player) PlayFromBeginning() error { - err := p.mpv.Command([]string{"playlist-play-index", "0"}) - if err == nil { - p.setState(Playing) - } - return err + return p.PlayTrackAt(0) } // Start playback from the specified track index in the play queue. @@ -378,13 +374,6 @@ func (p *Player) setState(s State) { cb() } }() - if p.status.State == Stopped { - defer func() { - for _, cb := range p.onTrackChange { - cb(p.curPlaylistPos) - } - }() - } case s == Paused && p.status.State != Paused: defer func() { for _, cb := range p.onPaused { @@ -429,11 +418,9 @@ func (p *Player) eventHandler(ctx context.Context) { } } if pos, err := p.getInt64Property("playlist-pos"); err == nil { - if p.curPlaylistPos != pos { - p.curPlaylistPos = pos - for _, cb := range p.onTrackChange { - cb(pos) - } + p.curPlaylistPos = pos + for _, cb := range p.onTrackChange { + cb(pos) } } case MPVEventIdle: