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 fd57e9d..951f7ca 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -143,6 +143,16 @@ func (m *Controller) ConnectAlbumGridActions(grid *widgets.GridView) { m.DoAddTracksToPlaylistWorkflow(sharedutil.TracksToIDs(album.Tracks)) }() } + grid.OnDownload = func(albumID string) { + 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) + }() + } } func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) { @@ -155,6 +165,12 @@ func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) { go m.DoAddTracksToPlaylistWorkflow( sharedutil.TracksToIDs(m.GetArtistTracks(artistID))) } + grid.OnDownload = func(artistID string) { + go func() { + 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..edd3cba 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() + } +}