Refactor and temporarily disable sharing artists
This commit is contained in:
+10
-13
@@ -94,9 +94,9 @@ func newAlbumPage(
|
||||
a.tracklist.SetVisibleColumns(a.cfg.TracklistColumns)
|
||||
a.tracklist.SetSorting(sort)
|
||||
_, canRate := a.mp.(mediaprovider.SupportsRating)
|
||||
_, canShare := a.mp.(mediaprovider.SupportsRating)
|
||||
_, canShare := a.mp.(mediaprovider.SupportsSharing)
|
||||
a.tracklist.Options.DisableRating = !canRate
|
||||
a.tracklist.Options.HideSharing = !canShare
|
||||
a.tracklist.Options.DisableSharing = !canShare
|
||||
a.tracklist.OnVisibleColumnsChanged = func(cols []string) {
|
||||
a.cfg.TracklistColumns = cols
|
||||
}
|
||||
@@ -185,6 +185,7 @@ type AlbumPageHeader struct {
|
||||
artistLabelSpace *util.HSpace // TODO: remove when no longer needed
|
||||
genreLabel *widgets.MultiHyperlink
|
||||
miscLabel *widget.Label
|
||||
shareMenuItem *fyne.MenuItem
|
||||
|
||||
toggleFavButton *widgets.FavoriteButton
|
||||
|
||||
@@ -248,19 +249,15 @@ func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader {
|
||||
a.page.contr.ShowAlbumInfoDialog(a.albumID, a.titleLabel.String(), a.cover.Image())
|
||||
})
|
||||
info.Icon = theme.InfoIcon()
|
||||
menuItems := []*fyne.MenuItem{queue, playlist, download, info}
|
||||
|
||||
_, canShare := page.mp.(mediaprovider.SupportsSharing)
|
||||
if canShare {
|
||||
share := fyne.NewMenuItem("Share...", func() {
|
||||
a.page.contr.ShowShareDialog(a.albumID)
|
||||
})
|
||||
share.Icon = myTheme.ShareIcon
|
||||
menuItems = append(menuItems, share)
|
||||
}
|
||||
menu := fyne.NewMenu("", menuItems...)
|
||||
a.shareMenuItem = fyne.NewMenuItem("Share...", func() {
|
||||
a.page.contr.ShowShareDialog(a.albumID)
|
||||
})
|
||||
a.shareMenuItem.Icon = myTheme.ShareIcon
|
||||
menu := fyne.NewMenu("", queue, playlist, download, info, a.shareMenuItem)
|
||||
pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a))
|
||||
}
|
||||
_, canShare := page.mp.(mediaprovider.SupportsSharing)
|
||||
a.shareMenuItem.Disabled = !canShare
|
||||
pos := fyne.CurrentApp().Driver().AbsolutePositionForObject(menuBtn)
|
||||
pop.ShowAtPosition(fyne.NewPos(pos.X, pos.Y+menuBtn.Size().Height))
|
||||
}
|
||||
|
||||
+22
-18
@@ -239,7 +239,7 @@ func (a *ArtistPage) showTopTracks() {
|
||||
_, canRate := a.mp.(mediaprovider.SupportsRating)
|
||||
_, canShare := a.mp.(mediaprovider.SupportsSharing)
|
||||
tl.Options.DisableRating = !canRate
|
||||
tl.Options.HideSharing = !canShare
|
||||
tl.Options.DisableSharing = !canShare
|
||||
tl.SetVisibleColumns(a.cfg.TracklistColumns)
|
||||
tl.SetSorting(a.trackSort)
|
||||
tl.OnVisibleColumnsChanged = func(cols []string) {
|
||||
@@ -296,6 +296,7 @@ type ArtistPageHeader struct {
|
||||
playRadioBtn *widget.Button
|
||||
menuBtn *widget.Button
|
||||
container *fyne.Container
|
||||
shareMenuItem *fyne.MenuItem
|
||||
}
|
||||
|
||||
func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
|
||||
@@ -322,23 +323,26 @@ func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
|
||||
})
|
||||
a.playRadioBtn = widget.NewButtonWithIcon("Play Artist Radio", myTheme.ShuffleIcon, a.artistPage.playArtistRadio)
|
||||
|
||||
_, canShare := a.artistPage.mp.(mediaprovider.SupportsSharing)
|
||||
if canShare {
|
||||
var pop *widget.PopUpMenu
|
||||
a.menuBtn = widget.NewButtonWithIcon("", theme.MoreHorizontalIcon(), nil)
|
||||
a.menuBtn.OnTapped = func() {
|
||||
if pop == nil {
|
||||
share := fyne.NewMenuItem("Share...", func() {
|
||||
a.artistPage.contr.ShowShareDialog(a.artistID)
|
||||
})
|
||||
share.Icon = myTheme.ShareIcon
|
||||
menu := fyne.NewMenu("", share)
|
||||
pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a))
|
||||
}
|
||||
pos := fyne.CurrentApp().Driver().AbsolutePositionForObject(a.menuBtn)
|
||||
pop.ShowAtPosition(fyne.NewPos(pos.X, pos.Y+a.menuBtn.Size().Height))
|
||||
}
|
||||
}
|
||||
// TODO: Uncomment when at least one media provider supports sharing artists.
|
||||
// a.shareMenuItem = fyne.NewMenuItem("Share...", func() {
|
||||
// a.artistPage.contr.ShowShareDialog(a.artistID)
|
||||
// })
|
||||
// a.shareMenuItem.Icon = myTheme.ShareIcon
|
||||
// var pop *widget.PopUpMenu
|
||||
// a.menuBtn = widget.NewButtonWithIcon("", theme.MoreHorizontalIcon(), nil)
|
||||
// a.menuBtn.OnTapped = func() {
|
||||
// if pop == nil {
|
||||
// menu := fyne.NewMenu("", a.shareMenuItem)
|
||||
// pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a))
|
||||
// }
|
||||
// pos := fyne.CurrentApp().Driver().AbsolutePositionForObject(a.menuBtn)
|
||||
// pop.ShowAtPosition(fyne.NewPos(pos.X, pos.Y+a.menuBtn.Size().Height))
|
||||
// }
|
||||
// canShareArtists := false
|
||||
// if r, canShare := a.artistPage.mp.(mediaprovider.SupportsSharing); canShare {
|
||||
// canShareArtists = r.CanShareArtists()
|
||||
// }
|
||||
// a.shareMenuItem.Disabled = !canShareArtists
|
||||
|
||||
a.biographyDisp.Wrapping = fyne.TextWrapWord
|
||||
a.biographyDisp.Truncation = fyne.TextTruncateEllipsis
|
||||
|
||||
@@ -86,6 +86,11 @@ func newArtistsPage(
|
||||
} else {
|
||||
a.grid = widgets.NewFixedGridView(nil, a.im, myTheme.ArtistIcon)
|
||||
}
|
||||
canShareArtists := false
|
||||
if r, canShare := mp.(mediaprovider.SupportsSharing); canShare {
|
||||
canShareArtists = r.CanShareArtists()
|
||||
}
|
||||
a.grid.DisableSharing = !canShareArtists
|
||||
a.contr.ConnectArtistGridActions(a.grid)
|
||||
|
||||
searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher, layout.NewSpacer())
|
||||
|
||||
@@ -336,6 +336,11 @@ func (a *FavoritesPage) onShowFavoriteArtists() {
|
||||
} else {
|
||||
a.artistGrid = widgets.NewFixedGridView(model, a.im, myTheme.ArtistIcon)
|
||||
}
|
||||
canShareArtists := false
|
||||
if r, canShare := a.mp.(mediaprovider.SupportsSharing); canShare {
|
||||
canShareArtists = r.CanShareArtists()
|
||||
}
|
||||
a.artistGrid.DisableSharing = !canShareArtists
|
||||
a.contr.ConnectArtistGridActions(a.artistGrid)
|
||||
a.container.Objects[0] = a.artistGrid
|
||||
a.Refresh()
|
||||
@@ -397,7 +402,7 @@ func (a *FavoritesPage) onShowFavoriteSongs() {
|
||||
_, canRate := a.mp.(mediaprovider.SupportsRating)
|
||||
_, canShare := a.mp.(mediaprovider.SupportsSharing)
|
||||
tracklist.Options.DisableRating = !canRate
|
||||
tracklist.Options.HideSharing = !canShare
|
||||
tracklist.Options.DisableSharing = !canShare
|
||||
tracklist.SetVisibleColumns(a.cfg.TracklistColumns)
|
||||
tracklist.SetSorting(a.trackSort)
|
||||
tracklist.OnVisibleColumnsChanged = func(cols []string) {
|
||||
|
||||
@@ -112,6 +112,7 @@ func NewGridViewPage(
|
||||
gp.ExtendBaseWidget(gp)
|
||||
gp.createTitleAndSort()
|
||||
|
||||
_, canShare := mp.(mediaprovider.SupportsSharing)
|
||||
iter := adapter.Iter(gp.getSortOrder(), gp.getFilter())
|
||||
if g := pool.Obtain(util.WidgetTypeGridView); g != nil {
|
||||
gp.grid = g.(*widgets.GridView)
|
||||
@@ -120,6 +121,7 @@ func NewGridViewPage(
|
||||
} else {
|
||||
gp.grid = widgets.NewGridView(iter, im, adapter.PlaceholderResource())
|
||||
}
|
||||
gp.grid.DisableSharing = !canShare
|
||||
adapter.ConnectGridActions(gp.grid)
|
||||
gp.createSearchAndFilter()
|
||||
gp.createContainer()
|
||||
|
||||
@@ -43,11 +43,12 @@ type NowPlayingPage struct {
|
||||
}
|
||||
|
||||
type nowPlayingPageState struct {
|
||||
contr *controller.Controller
|
||||
pool *util.WidgetPool
|
||||
pm *backend.PlaybackManager
|
||||
im *backend.ImageManager
|
||||
canRate bool
|
||||
contr *controller.Controller
|
||||
pool *util.WidgetPool
|
||||
pm *backend.PlaybackManager
|
||||
im *backend.ImageManager
|
||||
canRate bool
|
||||
canShare bool
|
||||
}
|
||||
|
||||
func NewNowPlayingPage(
|
||||
@@ -56,9 +57,10 @@ func NewNowPlayingPage(
|
||||
im *backend.ImageManager,
|
||||
pm *backend.PlaybackManager,
|
||||
canRate bool,
|
||||
canShare bool,
|
||||
) *NowPlayingPage {
|
||||
a := &NowPlayingPage{nowPlayingPageState: nowPlayingPageState{
|
||||
contr: contr, pool: pool, im: im, pm: pm, canRate: canRate,
|
||||
contr: contr, pool: pool, im: im, pm: pm, canRate: canRate, canShare: canShare,
|
||||
}}
|
||||
a.ExtendBaseWidget(a)
|
||||
|
||||
@@ -82,8 +84,15 @@ func NewNowPlayingPage(
|
||||
}
|
||||
|
||||
a.queueList = widgets.NewPlayQueueList(a.im)
|
||||
a.queueList.DisableRating = !canRate
|
||||
a.queueList.DisableSharing = !canShare
|
||||
a.queueList.OnReorderTracks = a.doSetNewTrackOrder
|
||||
a.queueList.OnDownload = contr.ShowDownloadDialog
|
||||
a.queueList.OnShare = func(tracks []*mediaprovider.Track) {
|
||||
if len(tracks) > 0 {
|
||||
a.contr.ShowShareDialog(tracks[0].ID)
|
||||
}
|
||||
}
|
||||
a.queueList.OnAddToPlaylist = contr.DoAddTracksToPlaylistWorkflow
|
||||
a.queueList.OnPlayTrackAt = func(tracknum int) {
|
||||
_ = a.pm.PlayTrackAt(tracknum)
|
||||
@@ -199,7 +208,7 @@ func (s *nowPlayingPageState) Restore() Page {
|
||||
page.Reload()
|
||||
return page
|
||||
}
|
||||
return NewNowPlayingPage(s.contr, s.pool, s.im, s.pm, s.canRate)
|
||||
return NewNowPlayingPage(s.contr, s.pool, s.im, s.pm, s.canRate, s.canShare)
|
||||
}
|
||||
|
||||
var _ CanShowPlayTime = (*NowPlayingPage)(nil)
|
||||
|
||||
@@ -91,8 +91,8 @@ func newPlaylistPage(
|
||||
remove := fyne.NewMenuItem("Remove from playlist", a.onRemoveSelectedFromPlaylist)
|
||||
remove.Icon = theme.ContentClearIcon()
|
||||
a.tracklist.Options = widgets.TracklistOptions{
|
||||
DisableRating: !canRate,
|
||||
HideSharing: !canShare,
|
||||
DisableRating: !canRate,
|
||||
DisableSharing: !canShare,
|
||||
AuxiliaryMenuItems: []*fyne.MenuItem{
|
||||
util.NewReorderTracksSubmenu(a.doSetNewTrackOrder),
|
||||
remove,
|
||||
|
||||
@@ -31,6 +31,7 @@ func NewRouter(app *backend.App, controller *controller.Controller, nav Navigati
|
||||
|
||||
func (r Router) CreatePage(rte controller.Route) Page {
|
||||
_, canRate := r.App.ServerManager.Server.(mediaprovider.SupportsRating)
|
||||
_, canShare := r.App.ServerManager.Server.(mediaprovider.SupportsSharing)
|
||||
switch rte.Page {
|
||||
case controller.Album:
|
||||
return NewAlbumPage(rte.Arg, &r.App.Config.AlbumPage, r.widgetPool, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager, r.Controller)
|
||||
@@ -43,13 +44,13 @@ func (r Router) CreatePage(rte controller.Route) Page {
|
||||
case controller.Favorites:
|
||||
return NewFavoritesPage(&r.App.Config.FavoritesPage, r.widgetPool, r.Controller, r.App.ServerManager.Server, r.App.PlaybackManager, r.App.ImageManager)
|
||||
case controller.Fullscreen:
|
||||
return NewNowPlayingPage(r.Controller, r.widgetPool, r.App.ImageManager, r.App.PlaybackManager, canRate)
|
||||
return NewNowPlayingPage(r.Controller, r.widgetPool, r.App.ImageManager, r.App.PlaybackManager, canRate, canShare)
|
||||
case controller.Genre:
|
||||
return NewGenrePage(rte.Arg, r.widgetPool, r.Controller, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager)
|
||||
case controller.Genres:
|
||||
return NewGenresPage(r.Controller, r.App.ServerManager.Server)
|
||||
case controller.NowPlaying:
|
||||
return NewNowPlayingPage(r.Controller, r.widgetPool, r.App.ImageManager, r.App.PlaybackManager, canRate)
|
||||
return NewNowPlayingPage(r.Controller, r.widgetPool, r.App.ImageManager, r.App.PlaybackManager, canRate, canShare)
|
||||
case controller.Playlist:
|
||||
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.widgetPool, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)
|
||||
case controller.Playlists:
|
||||
|
||||
@@ -53,7 +53,7 @@ func NewTracksPage(contr *controller.Controller, conf *backend.TracksPageConfig,
|
||||
t.tracklist.Options = widgets.TracklistOptions{
|
||||
DisableSorting: true,
|
||||
DisableRating: !t.canRate,
|
||||
HideSharing: !t.canShare,
|
||||
DisableSharing: !t.canShare,
|
||||
AutoNumber: true,
|
||||
}
|
||||
t.tracklist.SetVisibleColumns(conf.TracklistColumns)
|
||||
@@ -140,7 +140,7 @@ func (t *TracksPage) doSearch(query string) {
|
||||
AutoNumber: true,
|
||||
DisableSorting: true,
|
||||
DisableRating: !t.canRate,
|
||||
HideSharing: !t.canShare,
|
||||
DisableSharing: !t.canShare,
|
||||
}
|
||||
t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns)
|
||||
t.searchTracklist.SetNowPlaying(t.nowPlayingID)
|
||||
|
||||
Reference in New Issue
Block a user