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] 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() + } +}