From 4629ede7a75c6a02c9429f05806811bb3052b1b8 Mon Sep 17 00:00:00 2001 From: Michael Manganiello Date: Sat, 17 Jun 2023 02:25:52 -0300 Subject: [PATCH] Interface BottomPanel through PlaybackManager to reduce direct dependency on Player --- backend/playbackmanager.go | 6 ++++++ ui/bottompanel.go | 24 +++++++++++------------- ui/mainwindow.go | 3 +-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index 51f64c5..3ec111a 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -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 { diff --git a/ui/bottompanel.go b/ui/bottompanel.go index 8439c31..e16c8ab 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -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) diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 10832db..1522215 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -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)