From 0dfbe685e163549469f5c9f9e75d51b5048b8d6d Mon Sep 17 00:00:00 2001 From: natilou <30585029+natilou@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:35:59 -0300 Subject: [PATCH 1/3] Ability to download from grid - Adding the option to download the album or tracks in grid view from Artist and Album pages. --- ui/controller/controller.go | 12 ++++++++++++ ui/widgets/gridview.go | 6 ++++++ ui/widgets/gridviewitem.go | 10 +++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/ui/controller/controller.go b/ui/controller/controller.go index fd57e9d..c1874a6 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -143,6 +143,14 @@ func (m *Controller) ConnectAlbumGridActions(grid *widgets.GridView) { m.DoAddTracksToPlaylistWorkflow(sharedutil.TracksToIDs(album.Tracks)) }() } + grid.OnDownload = func(albumID string) { + album, err := m.App.ServerManager.Server.GetAlbum(albumID) + if err != nil { + log.Printf("error loading album: %s", err.Error()) + return + } + m.ShowDownloadDialog(album.Tracks) + } } func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) { @@ -155,6 +163,10 @@ func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) { go m.DoAddTracksToPlaylistWorkflow( sharedutil.TracksToIDs(m.GetArtistTracks(artistID))) } + grid.OnDownload = func(artistID string) { + tracks := m.GetArtistTracks(artistID) + m.ShowDownloadDialog(tracks) + } } func (m *Controller) GetArtistTracks(artistID string) []*mediaprovider.Track { diff --git a/ui/widgets/gridview.go b/ui/widgets/gridview.go index e53dec3..8e3e1d4 100644 --- a/ui/widgets/gridview.go +++ b/ui/widgets/gridview.go @@ -89,6 +89,7 @@ type GridViewState struct { OnPlay func(id string, shuffle bool) OnAddToQueue func(id string) OnAddToPlaylist func(id string) + OnDownload func(id string) OnShowItemPage func(id string) OnShowSecondaryPage func(id string) @@ -217,6 +218,11 @@ func (g *GridView) createGridWrap() { g.OnAddToPlaylist(card.ItemID()) } } + card.OnDownload = func() { + if g.OnDownload != nil { + g.OnDownload(card.itemID) + } + } return card }, // update func diff --git a/ui/widgets/gridviewitem.go b/ui/widgets/gridviewitem.go index a94cc1c..02e4894 100644 --- a/ui/widgets/gridviewitem.go +++ b/ui/widgets/gridviewitem.go @@ -129,6 +129,7 @@ type GridViewItem struct { OnPlay func(shuffle bool) OnAddToQueue func() OnAddToPlaylist func() + OnDownload func() OnShowItemPage func() OnShowSecondaryPage func() } @@ -173,7 +174,8 @@ func (g *GridViewItem) showContextMenu(pos fyne.Position) { fyne.NewMenuItem("Play", func() { g.onPlay(false) }), fyne.NewMenuItem("Shuffle", func() { g.onPlay(true) }), fyne.NewMenuItem("Add to queue", g.onAddToQueue), - fyne.NewMenuItem("Add to playlist...", g.onAddToPlaylist)), + fyne.NewMenuItem("Add to playlist...", g.onAddToPlaylist), + fyne.NewMenuItem("Download", g.onDownload)), fyne.CurrentApp().Driver().CanvasForObject(g)) } g.menu.ShowAtPosition(pos) @@ -218,3 +220,9 @@ func (g *GridViewItem) onAddToPlaylist() { g.OnAddToPlaylist() } } + +func (g *GridViewItem) onDownload() { + if g.OnDownload != nil { + g.OnDownload() + } +} From 225d4397290b7e76e80d06fce678fc7577c7a4ed Mon Sep 17 00:00:00 2001 From: natilou <30585029+natilou@users.noreply.github.com> Date: Tue, 20 Jun 2023 13:24:33 -0300 Subject: [PATCH 2/3] wrapping functions in a goroutine and adding OnDownload handler to the playlist grid view --- ui/browsing/playlistspage.go | 10 ++++++++++ ui/controller/controller.go | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ui/browsing/playlistspage.go b/ui/browsing/playlistspage.go index 394eac0..2418afc 100644 --- a/ui/browsing/playlistspage.go +++ b/ui/browsing/playlistspage.go @@ -113,6 +113,16 @@ func (a *PlaylistsPage) createGridView(playlists []*mediaprovider.Playlist) { a.contr.DoAddTracksToPlaylistWorkflow(sharedutil.TracksToIDs(pl.Tracks)) }() } + a.gridView.OnDownload = func(id string) { + go func() { + pl, err := a.contr.App.ServerManager.Server.GetPlaylist(id) + if err != nil { + log.Printf("error loading playlist: %s", err.Error()) + return + } + a.contr.ShowDownloadDialog(pl.Tracks) + }() + } } func (a *PlaylistsPage) showListView() { diff --git a/ui/controller/controller.go b/ui/controller/controller.go index c1874a6..951f7ca 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -144,12 +144,14 @@ func (m *Controller) ConnectAlbumGridActions(grid *widgets.GridView) { }() } grid.OnDownload = func(albumID string) { - album, err := m.App.ServerManager.Server.GetAlbum(albumID) - if err != nil { - log.Printf("error loading album: %s", err.Error()) - return - } - m.ShowDownloadDialog(album.Tracks) + go func() { + album, err := m.App.ServerManager.Server.GetAlbum(albumID) + if err != nil { + log.Printf("error loading album: %s", err.Error()) + return + } + m.ShowDownloadDialog(album.Tracks) + }() } } @@ -164,8 +166,10 @@ func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) { sharedutil.TracksToIDs(m.GetArtistTracks(artistID))) } grid.OnDownload = func(artistID string) { - tracks := m.GetArtistTracks(artistID) - m.ShowDownloadDialog(tracks) + go func() { + tracks := m.GetArtistTracks(artistID) + m.ShowDownloadDialog(tracks) + }() } } From 74c0c01268d46882fe8683169e1f19d4c2d8a3cf Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Tue, 20 Jun 2023 09:37:56 -0700 Subject: [PATCH 3/3] add ellipsis to Download menu item --- ui/widgets/gridviewitem.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/widgets/gridviewitem.go b/ui/widgets/gridviewitem.go index 02e4894..edd3cba 100644 --- a/ui/widgets/gridviewitem.go +++ b/ui/widgets/gridviewitem.go @@ -175,7 +175,7 @@ func (g *GridViewItem) showContextMenu(pos fyne.Position) { fyne.NewMenuItem("Shuffle", func() { g.onPlay(true) }), fyne.NewMenuItem("Add to queue", g.onAddToQueue), fyne.NewMenuItem("Add to playlist...", g.onAddToPlaylist), - fyne.NewMenuItem("Download", g.onDownload)), + fyne.NewMenuItem("Download...", g.onDownload)), fyne.CurrentApp().Driver().CanvasForObject(g)) } g.menu.ShowAtPosition(pos)