Interface BottomPanel through PlaybackManager to reduce direct dependency on Player
This commit is contained in:
@@ -291,6 +291,12 @@ func (p *PlaybackManager) SetReplayGainOptions(config ReplayGainConfig) {
|
||||
})
|
||||
}
|
||||
|
||||
// Changes the loop mode of the player to the next one.
|
||||
// Useful for toggling UI elements, to change modes without knowing the current player mode.
|
||||
func (p *PlaybackManager) SetNextLoopMode() error {
|
||||
return p.player.SetNextLoopMode()
|
||||
}
|
||||
|
||||
// call BEFORE updating p.nowPlayingIdx
|
||||
func (p *PlaybackManager) checkScrobble() {
|
||||
if !p.scrobbleCfg.Enabled || len(p.playQueue) == 0 || p.nowPlayingIdx < 0 {
|
||||
|
||||
+11
-13
@@ -34,9 +34,17 @@ type BottomPanel struct {
|
||||
|
||||
var _ fyne.Widget = (*BottomPanel)(nil)
|
||||
|
||||
func NewBottomPanel(p *player.Player, contr *controller.Controller) *BottomPanel {
|
||||
bp := &BottomPanel{}
|
||||
func NewBottomPanel(p *player.Player, pm *backend.PlaybackManager, contr *controller.Controller) *BottomPanel {
|
||||
bp := &BottomPanel{playbackManager: pm}
|
||||
bp.ExtendBaseWidget(bp)
|
||||
|
||||
bp.playbackManager.OnSongChange(bp.onSongChange)
|
||||
bp.playbackManager.OnPlayTimeUpdate(func(cur, total float64) {
|
||||
if !bp.playbackManager.IsSeeking() {
|
||||
bp.Controls.UpdatePlayTime(cur, total)
|
||||
}
|
||||
})
|
||||
|
||||
p.OnPaused(func() {
|
||||
bp.Controls.SetPlaying(false)
|
||||
})
|
||||
@@ -91,7 +99,7 @@ func NewBottomPanel(p *player.Player, contr *controller.Controller) *BottomPanel
|
||||
p.Seek(fmt.Sprintf("%d", int(f*100)), player.SeekAbsolutePercent)
|
||||
})
|
||||
bp.Controls.OnChangeLoopMode(func() {
|
||||
p.SetNextLoopMode()
|
||||
bp.playbackManager.SetNextLoopMode()
|
||||
})
|
||||
|
||||
bp.AuxControls = widgets.NewAuxControls(p.GetVolume())
|
||||
@@ -104,16 +112,6 @@ func NewBottomPanel(p *player.Player, contr *controller.Controller) *BottomPanel
|
||||
return bp
|
||||
}
|
||||
|
||||
func (bp *BottomPanel) SetPlaybackManager(pm *backend.PlaybackManager) {
|
||||
bp.playbackManager = pm
|
||||
pm.OnSongChange(bp.onSongChange)
|
||||
pm.OnPlayTimeUpdate(func(cur, total float64) {
|
||||
if !pm.IsSeeking() {
|
||||
bp.Controls.UpdatePlayTime(cur, total)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (bp *BottomPanel) onSongChange(song, _ *mediaprovider.Track) {
|
||||
if song == nil {
|
||||
bp.NowPlaying.Update("", "", false, "", nil)
|
||||
|
||||
+1
-2
@@ -75,8 +75,7 @@ func NewMainWindow(fyneApp fyne.App, appName, appVersion string, app *backend.Ap
|
||||
m.Controller.ReloadFunc = m.BrowsingPane.Reload
|
||||
m.Controller.CurPageFunc = m.BrowsingPane.CurrentPage
|
||||
|
||||
m.BottomPanel = NewBottomPanel(app.Player, m.Controller)
|
||||
m.BottomPanel.SetPlaybackManager(app.PlaybackManager)
|
||||
m.BottomPanel = NewBottomPanel(app.Player, app.PlaybackManager, m.Controller)
|
||||
m.BottomPanel.ImageManager = app.ImageManager
|
||||
m.container = container.NewBorder(nil, m.BottomPanel, nil, nil, m.BrowsingPane)
|
||||
m.Window.SetContent(m.container)
|
||||
|
||||
Reference in New Issue
Block a user