add OnPlayQueueChange hook
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -49,6 +49,10 @@ type CanShowPlayTime interface {
|
||||
OnPlayTimeUpdate(curTime, totalTime float64)
|
||||
}
|
||||
|
||||
type CanShowPlayQueue interface {
|
||||
OnPlayQueueChange()
|
||||
}
|
||||
|
||||
type BrowsingPane struct {
|
||||
widget.BaseWidget
|
||||
|
||||
@@ -80,6 +84,7 @@ func NewBrowsingPane(app *backend.App, contr *controller.Controller) *BrowsingPa
|
||||
b.reload = widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), b.Reload)
|
||||
b.app.PlaybackManager.OnSongChange(b.onSongChange)
|
||||
b.app.PlaybackManager.OnPlayTimeUpdate(b.onPlayTimeUpdate)
|
||||
b.app.PlaybackManager.OnQueueChange(b.onQueueChange)
|
||||
bkgrnd := myTheme.NewThemedRectangle(myTheme.ColorNamePageBackground)
|
||||
b.pageContainer = container.NewStack(bkgrnd, layout.NewSpacer())
|
||||
b.settingsBtn = widget.NewButtonWithIcon("", theme.SettingsIcon(), func() {
|
||||
@@ -222,6 +227,15 @@ func (b *BrowsingPane) onPlayTimeUpdate(cur, total float64) {
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BrowsingPane) onQueueChange() {
|
||||
if b.curPage == nil {
|
||||
return
|
||||
}
|
||||
if p, ok := b.curPage.(CanShowPlayQueue); ok {
|
||||
p.OnPlayQueueChange()
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BrowsingPane) addPageToHistory(p Page, truncate bool) {
|
||||
if truncate {
|
||||
// allow garbage collection of pages that will be removed from the history
|
||||
|
||||
@@ -135,6 +135,10 @@ func (a *FullscreenPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Tr
|
||||
})
|
||||
}
|
||||
|
||||
func (a *FullscreenPage) OnPlayQueueChange() {
|
||||
a.Reload()
|
||||
}
|
||||
|
||||
func (a *FullscreenPage) Reload() {
|
||||
a.queue = a.pm.GetPlayQueue()
|
||||
a.queueList.SetTracks(a.queue)
|
||||
|
||||
Reference in New Issue
Block a user