Fix #136: add context menu to album and playlist grid views
This commit is contained in:
@@ -168,7 +168,7 @@ func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader {
|
||||
}
|
||||
a.miscLabel = widget.NewLabel("")
|
||||
playButton := widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), func() {
|
||||
go page.pm.PlayAlbum(page.albumID, 0)
|
||||
go page.pm.PlayAlbum(page.albumID, 0, false)
|
||||
})
|
||||
shuffleBtn := widget.NewButtonWithIcon(" Shuffle", res.ResShuffleInvertSvg, func() {
|
||||
page.pm.LoadTracks(page.tracklist.Tracks, false, true)
|
||||
|
||||
@@ -73,9 +73,7 @@ func NewAlbumsPage(cfg *backend.AlbumsPageConfig, contr *controller.Controller,
|
||||
a.sortOrder.Selected = cfg.SortOrder
|
||||
iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected))
|
||||
a.grid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), im)
|
||||
a.grid.OnPlay = a.onPlayAlbum
|
||||
a.grid.OnShowSecondaryPage = a.onShowArtistPage
|
||||
a.grid.OnShowItemPage = a.onShowAlbumPage
|
||||
contr.ConnectAlbumGridActions(a.grid)
|
||||
a.searcher = widgets.NewSearcher()
|
||||
a.searcher.OnSearched = a.OnSearched
|
||||
a.createContainer(false)
|
||||
@@ -182,9 +180,7 @@ func (a *AlbumsPage) Save() SavedPage {
|
||||
func (a *AlbumsPage) doSearch(query string) {
|
||||
if a.searchGrid == nil {
|
||||
a.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(a.lm.SearchIter(query)), a.im)
|
||||
a.searchGrid.OnPlay = a.onPlayAlbum
|
||||
a.searchGrid.OnShowItemPage = a.onShowAlbumPage
|
||||
a.searchGrid.OnShowSecondaryPage = a.onShowArtistPage
|
||||
a.contr.ConnectAlbumGridActions(a.searchGrid)
|
||||
} else {
|
||||
a.searchGrid.Reset(widgets.NewGridViewAlbumIterator(a.lm.SearchIter(query)))
|
||||
}
|
||||
@@ -192,18 +188,6 @@ func (a *AlbumsPage) doSearch(query string) {
|
||||
a.Refresh()
|
||||
}
|
||||
|
||||
func (a *AlbumsPage) onPlayAlbum(albumID string) {
|
||||
go a.pm.PlayAlbum(albumID, 0)
|
||||
}
|
||||
|
||||
func (a *AlbumsPage) onShowArtistPage(artistID string) {
|
||||
a.contr.NavigateTo(controller.ArtistRoute(artistID))
|
||||
}
|
||||
|
||||
func (a *AlbumsPage) onShowAlbumPage(albumID string) {
|
||||
a.contr.NavigateTo(controller.AlbumRoute(albumID))
|
||||
}
|
||||
|
||||
func (a *AlbumsPage) onSortOrderChanged(order string) {
|
||||
a.cfg.SortOrder = a.sortOrder.Selected
|
||||
iter := a.lm.AlbumsIter(backend.AlbumSortOrder(order))
|
||||
|
||||
@@ -124,10 +124,6 @@ func (a *ArtistPage) OnSongChange(track *subsonic.Child, lastScrobbledIfAny *sub
|
||||
}
|
||||
}
|
||||
|
||||
func (a *ArtistPage) onPlayAlbum(albumID string) {
|
||||
a.pm.PlayAlbum(albumID, 0)
|
||||
}
|
||||
|
||||
func (a *ArtistPage) playAllTracks() {
|
||||
if a.artistInfo != nil { // page loaded
|
||||
for i, album := range a.artistInfo.Album {
|
||||
@@ -141,10 +137,6 @@ func (a *ArtistPage) playArtistRadio() {
|
||||
go a.pm.PlaySimilarSongs(a.artistID)
|
||||
}
|
||||
|
||||
func (a *ArtistPage) onShowAlbumPage(albumID string) {
|
||||
a.contr.NavigateTo(controller.AlbumRoute(albumID))
|
||||
}
|
||||
|
||||
// should be called asynchronously
|
||||
func (a *ArtistPage) load() {
|
||||
artist, err := a.sm.Server.GetArtist(a.artistID)
|
||||
@@ -182,8 +174,7 @@ func (a *ArtistPage) showAlbumGrid() {
|
||||
}
|
||||
})
|
||||
a.albumGrid = widgets.NewFixedGridView(model, a.im)
|
||||
a.albumGrid.OnPlay = a.onPlayAlbum
|
||||
a.albumGrid.OnShowItemPage = a.onShowAlbumPage
|
||||
a.contr.ConnectAlbumGridActions(a.albumGrid)
|
||||
}
|
||||
a.container.Objects[0].(*fyne.Container).Objects[0] = a.albumGrid
|
||||
a.container.Objects[0].Refresh()
|
||||
|
||||
@@ -54,7 +54,7 @@ func NewFavoritesPage(cfg *backend.FavoritesPageConfig, contr *controller.Contro
|
||||
a.ExtendBaseWidget(a)
|
||||
a.createHeader(0, "")
|
||||
a.grid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(lm.StarredIter()), a.im)
|
||||
a.connectGridActions()
|
||||
a.contr.ConnectAlbumGridActions(a.grid)
|
||||
if cfg.InitialView == "Artists" {
|
||||
a.toggleBtns.SetActivatedButton(1)
|
||||
a.onShowFavoriteArtists()
|
||||
@@ -81,12 +81,6 @@ func (a *FavoritesPage) createHeader(activeBtnIdx int, searchText string) {
|
||||
a.searcher.Entry.Text = searchText
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) connectGridActions() {
|
||||
a.grid.OnPlay = a.onPlayAlbum
|
||||
a.grid.OnShowItemPage = a.onShowAlbumPage
|
||||
a.grid.OnShowSecondaryPage = a.onShowArtistPage
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) createContainer(initialView fyne.CanvasObject) {
|
||||
searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher.Entry, layout.NewSpacer())
|
||||
a.container = container.NewBorder(
|
||||
@@ -106,7 +100,6 @@ func restoreFavoritesPage(saved *savedFavoritesPage) *FavoritesPage {
|
||||
a.ExtendBaseWidget(a)
|
||||
a.createHeader(saved.activeToggleBtn, saved.searchText)
|
||||
a.grid = widgets.NewGridViewFromState(saved.gridState)
|
||||
a.connectGridActions()
|
||||
|
||||
if saved.searchText != "" {
|
||||
a.searchGrid = widgets.NewGridViewFromState(saved.searchGridState)
|
||||
@@ -221,9 +214,7 @@ func (a *FavoritesPage) doSearchAlbums(query string) {
|
||||
})
|
||||
if a.searchGrid == nil {
|
||||
a.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), a.im)
|
||||
a.searchGrid.OnPlay = a.onPlayAlbum
|
||||
a.searchGrid.OnShowItemPage = a.onShowAlbumPage
|
||||
a.searchGrid.OnShowSecondaryPage = a.onShowArtistPage
|
||||
a.contr.ConnectAlbumGridActions(a.searchGrid)
|
||||
} else {
|
||||
a.searchGrid.Reset(widgets.NewGridViewAlbumIterator(iter))
|
||||
}
|
||||
@@ -328,18 +319,6 @@ func (a *FavoritesPage) onShowFavoriteSongs() {
|
||||
}
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) onPlayAlbum(albumID string) {
|
||||
go a.pm.PlayAlbum(albumID, 0)
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) onShowAlbumPage(albumID string) {
|
||||
a.contr.NavigateTo(controller.AlbumRoute(albumID))
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) onShowArtistPage(artistID string) {
|
||||
a.contr.NavigateTo(controller.ArtistRoute(artistID))
|
||||
}
|
||||
|
||||
func (a *FavoritesPage) CreateRenderer() fyne.WidgetRenderer {
|
||||
a.ExtendBaseWidget(a)
|
||||
return widget.NewSimpleRenderer(a.container)
|
||||
|
||||
@@ -53,9 +53,7 @@ func NewGenrePage(genre string, contr *controller.Controller, pm *backend.Playba
|
||||
g.playRandom = widget.NewButtonWithIcon("Play random", res.ResShuffleInvertSvg, g.playRandomSongs)
|
||||
iter := g.lm.GenreIter(g.genre)
|
||||
g.grid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), g.im)
|
||||
g.grid.OnPlay = g.onPlayAlbum
|
||||
g.grid.OnShowSecondaryPage = g.onShowArtistPage
|
||||
g.grid.OnShowItemPage = g.onShowAlbumPage
|
||||
g.contr.ConnectAlbumGridActions(g.grid)
|
||||
g.searcher = widgets.NewSearcher()
|
||||
g.searcher.OnSearched = g.OnSearched
|
||||
g.createContainer(false)
|
||||
@@ -146,18 +144,6 @@ func (g *GenrePage) SearchWidget() fyne.Focusable {
|
||||
return g.searcher.Entry
|
||||
}
|
||||
|
||||
func (a *GenrePage) onPlayAlbum(albumID string) {
|
||||
go a.pm.PlayAlbum(albumID, 0)
|
||||
}
|
||||
|
||||
func (a *GenrePage) onShowArtistPage(artistID string) {
|
||||
a.contr.NavigateTo(controller.ArtistRoute(artistID))
|
||||
}
|
||||
|
||||
func (a *GenrePage) onShowAlbumPage(albumID string) {
|
||||
a.contr.NavigateTo(controller.AlbumRoute(albumID))
|
||||
}
|
||||
|
||||
func (g *GenrePage) OnSearched(query string) {
|
||||
g.searchText = query
|
||||
if query == "" {
|
||||
@@ -177,9 +163,7 @@ func (g *GenrePage) doSearch(query string) {
|
||||
})
|
||||
if g.searchGrid == nil {
|
||||
g.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), g.im)
|
||||
g.searchGrid.OnPlay = g.onPlayAlbum
|
||||
g.searchGrid.OnShowItemPage = g.onShowAlbumPage
|
||||
g.searchGrid.OnShowSecondaryPage = g.onShowArtistPage
|
||||
g.contr.ConnectAlbumGridActions(g.searchGrid)
|
||||
} else {
|
||||
g.searchGrid.Reset(widgets.NewGridViewAlbumIterator(iter))
|
||||
}
|
||||
|
||||
@@ -94,10 +94,23 @@ func (a *PlaylistsPage) createListView() {
|
||||
func (a *PlaylistsPage) createGridView(playlists []*subsonic.Playlist) {
|
||||
model := createPlaylistGridViewModel(playlists)
|
||||
a.gridView = widgets.NewFixedGridView(model, a.contr.App.ImageManager)
|
||||
a.gridView.OnPlay = func(id string) {
|
||||
a.contr.App.PlaybackManager.PlayPlaylist(id, 0)
|
||||
a.gridView.OnPlay = func(id string, shuffle bool) {
|
||||
go a.contr.App.PlaybackManager.PlayPlaylist(id, 0, shuffle)
|
||||
}
|
||||
a.gridView.OnAddToQueue = func(id string) {
|
||||
go a.contr.App.PlaybackManager.LoadPlaylist(id, true, false)
|
||||
}
|
||||
a.gridView.OnShowItemPage = a.showPlaylistPage
|
||||
a.gridView.OnAddToPlaylist = 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.DoAddTracksToPlaylistWorkflow(sharedutil.TracksToIDs(pl.Entry))
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
func (a *PlaylistsPage) showListView() {
|
||||
|
||||
Reference in New Issue
Block a user