From dcd714453e77425a0ea923ec9f824e7c7ca8bc6f Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 1 Jun 2024 12:41:05 -0700 Subject: [PATCH] prevent radio stations from being seeked --- backend/playbackengine.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/backend/playbackengine.go b/backend/playbackengine.go index 91154e4..37f315d 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -50,6 +50,7 @@ type playbackEngine struct { playQueue []mediaprovider.MediaItem nowPlayingIdx int + isRadio bool wasStopped bool // true iff player was stopped before handleOnTrackChange invocation loopMode LoopMode @@ -184,6 +185,9 @@ func (p *playbackEngine) SeekBackOrPrevious() error { // Seek to given absolute position in the current track by seconds. func (p *playbackEngine) SeekSeconds(sec float64) error { + if p.isRadio { + return nil // can't seek radio stations + } return p.player.SeekSeconds(sec) } @@ -424,8 +428,11 @@ func (p *playbackEngine) handleOnTrackChange() { p.nowPlayingIdx = 0 // wrapped around } } + nowPlaying := p.playQueue[p.nowPlayingIdx] + _, isRadio := nowPlaying.(*mediaprovider.RadioStation) + p.isRadio = isRadio p.wasStopped = false - p.curTrackDuration = float64(p.playQueue[p.nowPlayingIdx].Metadata().Duration) + p.curTrackDuration = float64(nowPlaying.Metadata().Duration) p.sendNowPlayingScrobble() // Must come before invokeOnChangeCallbacks b/c track may immediately be scrobbled p.invokeOnSongChangeCallbacks() p.doUpdateTimePos(false) @@ -641,7 +648,12 @@ func (p *playbackEngine) doUpdateTimePos(seeked bool) { if s.TimePos > p.latestTrackPosition { p.latestTrackPosition = s.TimePos } + duration := s.Duration + if p.isRadio { + // MPV reports buffered duration - we don't want to show this + duration = 0 + } for _, cb := range p.onPlayTimeUpdate { - cb(s.TimePos, s.Duration, seeked) + cb(s.TimePos, duration, seeked) } }