add OnPlayQueueChange hook

This commit is contained in:
Drew Weymouth
2024-03-03 10:38:12 -08:00
parent 013204727d
commit 9b72ff9d17
4 changed files with 33 additions and 0 deletions
+10
View File
@@ -61,6 +61,7 @@ type playbackEngine struct {
onStopped []func()
onPlaying []func()
onPlayerChange []func()
onQueueChange []func()
}
func NewPlaybackEngine(
@@ -216,15 +217,21 @@ func (p *playbackEngine) LoadTracks(tracks []*mediaprovider.Track, appendToQueue
if needToSetNext {
p.setNextTrack(p.nowPlayingIdx + 1)
}
p.invokeNoArgCallbacks(p.onQueueChange)
return nil
}
// Stop playback and clear the play queue.
func (p *playbackEngine) StopAndClearPlayQueue() {
changed := len(p.playQueue) > 0
p.player.Stop()
p.doUpdateTimePos()
p.playQueue = nil
p.nowPlayingIdx = -1
if changed {
p.invokeNoArgCallbacks(p.onQueueChange)
}
}
func (p *playbackEngine) GetPlayQueue() []*mediaprovider.Track {
@@ -273,6 +280,7 @@ func (p *playbackEngine) UpdatePlayQueue(tracks []*mediaprovider.Track) error {
p.setNextTrackAfterQueueUpdate()
}
p.invokeNoArgCallbacks(p.onQueueChange)
return nil
}
@@ -321,6 +329,8 @@ func (p *playbackEngine) RemoveTracksFromQueue(trackIDs []string) {
p.setNextTrack(-1)
}
}
p.invokeNoArgCallbacks(p.onQueueChange)
}
func (p *playbackEngine) SetReplayGainOptions(config ReplayGainConfig) {
+5
View File
@@ -74,6 +74,11 @@ func (p *PlaybackManager) OnVolumeChange(cb func(int)) {
p.engine.onVolumeChange = append(p.engine.onVolumeChange, cb)
}
// Registers a callback that is notified whenever the play queue changes.
func (p *PlaybackManager) OnQueueChange(cb func()) {
p.engine.onQueueChange = append(p.engine.onQueueChange, cb)
}
// Registers a callback that is notified whenever the player has been seeked.
func (p *PlaybackManager) OnSeek(cb func()) {
p.engine.onSeek = append(p.engine.onSeek, cb)