From 3de51ad48af7eb2ea1bd510cbcfb435893fa0f23 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Tue, 21 Feb 2023 08:33:40 -0800 Subject: [PATCH] refactor: add controller.ConnectTracklistActions --- ui/browsing/albumpage.go | 16 ++-------------- ui/browsing/favoritespage.go | 14 ++------------ ui/browsing/playlistpage.go | 16 +++------------- ui/controller/controller.go | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 39 deletions(-) diff --git a/ui/browsing/albumpage.go b/ui/browsing/albumpage.go index c5a58f9..df0152f 100644 --- a/ui/browsing/albumpage.go +++ b/ui/browsing/albumpage.go @@ -66,14 +66,7 @@ func NewAlbumPage( a.header = NewAlbumPageHeader(a) a.tracklist = widgets.NewTracklist(nil) a.tracklist.SetVisibleColumns(a.cfg.TracklistColumns) - // connect tracklist actions - a.tracklist.OnPlayTrackAt = a.onPlayTrackAt - a.tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { a.pm.LoadTracks(tracks, true, false) } - a.tracklist.OnPlaySelection = func(tracks []*subsonic.Child) { - a.pm.LoadTracks(tracks, false, false) - a.pm.PlayFromBeginning() - } - a.tracklist.OnAddToPlaylist = a.contr.DoAddTracksToPlaylistWorkflow + a.contr.ConnectTracklistActions(a.tracklist) a.container = container.NewBorder( container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 15, PadBottom: 10}, a.header), @@ -122,11 +115,6 @@ func (a *AlbumPage) SelectAll() { a.tracklist.SelectAll() } -func (a *AlbumPage) onPlayTrackAt(tracknum int) { - a.pm.LoadTracks(a.tracklist.Tracks, false, false) - a.pm.PlayTrackAt(tracknum) -} - // should be called asynchronously func (a *AlbumPage) load() { album, err := a.lm.GetAlbum(a.albumID) @@ -185,7 +173,7 @@ func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader { } a.miscLabel = widget.NewLabel("") playButton := widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), func() { - page.onPlayTrackAt(0) + go page.pm.PlayAlbum(page.albumID, 0) }) shuffleBtn := widget.NewButtonWithIcon(" Shuffle", res.ResShuffleInvertSvg, func() { page.pm.LoadTracks(page.tracklist.Tracks, false, true) diff --git a/ui/browsing/favoritespage.go b/ui/browsing/favoritespage.go index 65db18a..64d8949 100644 --- a/ui/browsing/favoritespage.go +++ b/ui/browsing/favoritespage.go @@ -226,23 +226,13 @@ func (a *FavoritesPage) onShowFavoriteSongs() { go func() { s, err := a.sm.Server.GetStarred2(nil) if err != nil { - log.Println("error getting starred items: %s", err.Error()) + log.Printf("error getting starred items: %s", err.Error()) return } tracklist := widgets.NewTracklist(s.Song) // TODO: get visible columns from config tracklist.SetVisibleColumns([]string{"Artist", "Album", "Plays"}) - // connect tracklist actions - tracklist.OnPlayTrackAt = func(idx int) { - a.pm.LoadTracks(tracklist.Tracks, false, false) - a.pm.PlayTrackAt(idx) - } - tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { a.pm.LoadTracks(tracks, true, false) } - tracklist.OnPlaySelection = func(tracks []*subsonic.Child) { - a.pm.LoadTracks(tracks, false, false) - a.pm.PlayFromBeginning() - } - tracklist.OnAddToPlaylist = a.contr.DoAddTracksToPlaylistWorkflow + a.contr.ConnectTracklistActions(tracklist) a.tracklistCtr = container.New( &layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 5, PadBottom: 15}, tracklist) diff --git a/ui/browsing/playlistpage.go b/ui/browsing/playlistpage.go index 56ef385..f1daef5 100644 --- a/ui/browsing/playlistpage.go +++ b/ui/browsing/playlistpage.go @@ -57,13 +57,7 @@ func NewPlaylistPage( fyne.NewMenuItem("Remove from playlist", a.onRemoveSelectedFromPlaylist), } // connect tracklist actions - a.tracklist.OnPlayTrackAt = a.onPlayTrackAt - a.tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { a.pm.LoadTracks(tracks, true, false) } - a.tracklist.OnPlaySelection = func(tracks []*subsonic.Child) { - a.pm.LoadTracks(tracks, false, false) - a.pm.PlayFromBeginning() - } - a.tracklist.OnAddToPlaylist = a.contr.DoAddTracksToPlaylistWorkflow + a.contr.ConnectTracklistActions(a.tracklist) a.container = container.NewBorder( container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 15, PadBottom: 10}, a.header), @@ -108,11 +102,6 @@ func (a *PlaylistPage) SelectAll() { a.tracklist.SelectAll() } -func (a *PlaylistPage) onPlayTrackAt(tracknum int) { - a.pm.LoadTracks(a.tracklist.Tracks, false, false) - a.pm.PlayTrackAt(tracknum) -} - // should be called asynchronously func (a *PlaylistPage) load() { playlist, err := a.sm.Server.GetPlaylist(a.playlistID) @@ -163,7 +152,8 @@ func NewPlaylistPageHeader(page *PlaylistPage) *PlaylistPageHeader { a.createdAtLabel = widget.NewLabel("") a.trackTimeLabel = widget.NewLabel("") playButton := widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), func() { - page.onPlayTrackAt(0) + page.pm.LoadTracks(page.tracklist.Tracks, false, false) + page.pm.PlayFromBeginning() }) // TODO: find way to pad shuffle svg rather than using a space in the label string shuffleBtn := widget.NewButtonWithIcon(" Shuffle", res.ResShuffleInvertSvg, func() { diff --git a/ui/controller/controller.go b/ui/controller/controller.go index c226ad7..7a9bcdb 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -6,12 +6,14 @@ import ( "supersonic/backend" "supersonic/ui/dialogs" "supersonic/ui/util" + "supersonic/ui/widgets" "time" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" + "github.com/dweymouth/go-subsonic/subsonic" ) type Controller struct { @@ -40,6 +42,21 @@ func (m Controller) ShowPopUpImage(img image.Image) { )) } +func (m Controller) ConnectTracklistActions(tracklist *widgets.Tracklist) { + tracklist.OnAddToPlaylist = m.DoAddTracksToPlaylistWorkflow + tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { + m.App.PlaybackManager.LoadTracks(tracks, true, false) + } + tracklist.OnPlayTrackAt = func(idx int) { + m.App.PlaybackManager.LoadTracks(tracklist.Tracks, false, false) + m.App.PlaybackManager.PlayTrackAt(idx) + } + tracklist.OnPlaySelection = func(tracks []*subsonic.Child) { + m.App.PlaybackManager.LoadTracks(tracks, false, false) + m.App.PlaybackManager.PlayFromBeginning() + } +} + func (m Controller) PromptForFirstServer() { d := dialogs.NewAddEditServerDialog("Connect to Server", nil) pop := widget.NewModalPopUp(d, m.MainWindow.Canvas())