diff --git a/ui/bottompanel.go b/ui/bottompanel.go index c3960de..60957ba 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -78,6 +78,11 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr bp.NowPlaying.OnTrackNameTapped = func() { contr.NavigateTo(controller.NowPlayingRoute(pm.NowPlaying().Metadata().ID)) } + bp.NowPlaying.OnShowTrackInfo = func() { + if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { + contr.ShowTrackInfoDialog(tr) + } + } bp.NowPlaying.OnShare = func() { if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { contr.ShowShareDialog(tr.ID) diff --git a/ui/controller/connectactions.go b/ui/controller/connectactions.go index 02fe2a6..8692447 100644 --- a/ui/controller/connectactions.go +++ b/ui/controller/connectactions.go @@ -150,6 +150,7 @@ func (c *Controller) ConnectPlayQueuelistActions(list *widgets.PlayQueueList) { c.App.PlaybackManager.UpdatePlayQueue(newTracks) } list.OnDownload = c.ShowDownloadDialog + list.OnShowTrackInfo = c.ShowTrackInfoDialog list.OnShare = func(tracks []*mediaprovider.Track) { if len(tracks) > 0 { c.ShowShareDialog(tracks[0].ID) diff --git a/ui/widgets/nowplayingcard.go b/ui/widgets/nowplayingcard.go index d1ea682..823f361 100644 --- a/ui/widgets/nowplayingcard.go +++ b/ui/widgets/nowplayingcard.go @@ -1,9 +1,10 @@ package widgets import ( - "fyne.io/fyne/v2/lang" "image" + "fyne.io/fyne/v2/lang" + "github.com/dweymouth/supersonic/backend/mediaprovider" myTheme "github.com/dweymouth/supersonic/ui/theme" "github.com/dweymouth/supersonic/ui/util" @@ -37,6 +38,7 @@ type NowPlayingCard struct { OnSetRating func(rating int) OnSetFavorite func(favorite bool) OnAddToPlaylist func() + OnShowTrackInfo func() OnShare func() } @@ -110,6 +112,12 @@ func (n *NowPlayingCard) onAddToPlaylist() { } } +func (n *NowPlayingCard) onShowTrackInfo() { + if n.OnShowTrackInfo != nil { + n.OnShowTrackInfo() + } +} + func (n *NowPlayingCard) onShare() { if n.OnShare != nil { n.OnShare() @@ -164,10 +172,12 @@ func (n *NowPlayingCard) showMenu(btnPos fyne.Position) { unfavorite.Icon = myTheme.NotFavoriteIcon playlist := fyne.NewMenuItem(lang.L("Add to playlist")+"...", func() { n.onAddToPlaylist() }) playlist.Icon = myTheme.PlaylistIcon + info := fyne.NewMenuItem(lang.L("Show info")+"...", func() { n.onShowTrackInfo() }) + info.Icon = theme.InfoIcon() share := fyne.NewMenuItem(lang.L("Share")+"...", func() { n.onShare() }) share.Icon = myTheme.ShareIcon - m := fyne.NewMenu("", favorite, unfavorite, n.ratingMenu, playlist, share) + m := fyne.NewMenu("", favorite, unfavorite, n.ratingMenu, playlist, info, share) n.menu = widget.NewPopUpMenu(m, fyne.CurrentApp().Driver().CanvasForObject(n)) } menuSize := n.menu.MinSize() diff --git a/ui/widgets/playqueuelist.go b/ui/widgets/playqueuelist.go index bb0ab32..f369127 100644 --- a/ui/widgets/playqueuelist.go +++ b/ui/widgets/playqueuelist.go @@ -1,12 +1,13 @@ package widgets import ( - "fyne.io/fyne/v2/lang" "image" "slices" "strconv" "sync" + "fyne.io/fyne/v2/lang" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" @@ -47,6 +48,7 @@ type PlayQueueList struct { OnSetRating func(trackIDs []string, rating int) OnRemoveFromQueue func(idxs []int) OnDownload func(tracks []*mediaprovider.Track, downloadName string) + OnShowTrackInfo func(track *mediaprovider.Track) OnShare func(tracks []*mediaprovider.Track) OnShowArtistPage func(artistID string) OnReorderItems func(idxs []int, reorderTo int) @@ -55,6 +57,7 @@ type PlayQueueList struct { menu *widget.PopUpMenu // ctx menu for when only tracks are selected radiosMenu *widget.PopUpMenu // ctx menu for when selection contains radios ratingSubmenu *fyne.MenuItem + infoMenuItem *fyne.MenuItem shareMenuItem *fyne.MenuItem nowPlayingID string @@ -259,6 +262,7 @@ func (p *PlayQueueList) onShowContextMenu(e *fyne.PointEvent, trackIdx int) { if allTracks { p.ensureTracksMenu() p.ratingSubmenu.Disabled = p.DisableRating + p.infoMenuItem.Disabled = len(selected) != 1 p.shareMenuItem.Disabled = p.DisableSharing || len(selected) != 1 menu = p.menu } else { @@ -290,6 +294,12 @@ func (p *PlayQueueList) ensureTracksMenu() { } }) download.Icon = theme.DownloadIcon() + p.infoMenuItem = fyne.NewMenuItem(lang.L("Show info")+"...", func() { + if p.OnShowTrackInfo != nil { + p.OnShowTrackInfo(p.selectedTracks()[0]) + } + }) + p.infoMenuItem.Icon = theme.InfoIcon() p.shareMenuItem = fyne.NewMenuItem(lang.L("Share")+"...", func() { if p.OnShare != nil { p.OnShare(p.selectedTracks()) @@ -316,6 +326,7 @@ func (p *PlayQueueList) ensureTracksMenu() { menuItems = append(menuItems, playlist, download, + p.infoMenuItem, p.shareMenuItem, fyne.NewMenuItemSeparator(), favorite,