add option to show album years in grid views

This commit is contained in:
Drew Weymouth
2024-06-27 17:44:41 -07:00
parent 2b39c6ba66
commit edf85a4162
15 changed files with 179 additions and 43 deletions
+7 -1
View File
@@ -72,6 +72,12 @@ func (a *albumsPageAdapter) SearchIter(query string, filter mediaprovider.AlbumF
return widgets.NewGridViewAlbumIterator(a.mp.SearchAlbums(query, filter))
}
func (a *albumsPageAdapter) ConnectGridActions(gv *widgets.GridView) {
func (a *albumsPageAdapter) InitGrid(gv *widgets.GridView) {
a.contr.ConnectAlbumGridActions(gv)
gv.ShowSuffix = a.cfg.ShowYears
}
func (a *albumsPageAdapter) RefreshGrid(gv *widgets.GridView) {
gv.ShowSuffix = a.cfg.ShowYears
gv.Refresh()
}
+5 -1
View File
@@ -68,7 +68,7 @@ func (a *artistsPageAdapter) SearchIter(query string, filter mediaprovider.Artis
return widgets.NewGridViewArtistIterator(a.mp.SearchArtists(query, filter))
}
func (a *artistsPageAdapter) ConnectGridActions(gv *widgets.GridView) {
func (a *artistsPageAdapter) InitGrid(gv *widgets.GridView) {
canShareArtists := false
if r, canShare := a.mp.(mediaprovider.SupportsSharing); canShare {
canShareArtists = r.CanShareArtists()
@@ -76,3 +76,7 @@ func (a *artistsPageAdapter) ConnectGridActions(gv *widgets.GridView) {
gv.DisableSharing = !canShareArtists
a.contr.ConnectArtistGridActions(gv)
}
func (a *artistsPageAdapter) RefreshGrid(gv *widgets.GridView) {
gv.Refresh()
}
+6
View File
@@ -195,6 +195,12 @@ func (b *BrowsingPane) ScrollDown() {
}
}
func (b *BrowsingPane) RefreshPage() {
if b.curPage != nil {
b.curPage.Refresh()
}
}
func (b *BrowsingPane) doSetPage(p Page) bool {
if b.curPage != nil && b.curPage.Route() == p.Route() {
return false
+8
View File
@@ -70,6 +70,7 @@ func NewFavoritesPage(cfg *backend.FavoritesPageConfig, pool *util.WidgetPool, c
} else {
a.albumGrid = widgets.NewGridView(iter, a.im, myTheme.AlbumIcon)
}
a.albumGrid.ShowSuffix = cfg.ShowAlbumYears
a.contr.ConnectAlbumGridActions(a.albumGrid)
if cfg.InitialView == "Artists" {
a.toggleBtns.SetActivatedButton(1)
@@ -285,6 +286,13 @@ func (a *FavoritesPage) SelectAll() {
}
}
func (a *FavoritesPage) Refresh() {
if a.albumGrid != nil {
a.albumGrid.ShowSuffix = a.cfg.ShowAlbumYears
}
a.BaseWidget.Refresh()
}
func (a *FavoritesPage) tracklistOrNil() *widgets.Tracklist {
if a.tracklistCtr != nil {
return a.tracklistCtr.Objects[0].(*widgets.Tracklist)
+10 -3
View File
@@ -14,6 +14,7 @@ import (
type genrePageAdapter struct {
genre string
cfg *backend.AlbumsPageConfig
contr *controller.Controller
mp mediaprovider.MediaProvider
pm *backend.PlaybackManager
@@ -21,8 +22,8 @@ type genrePageAdapter struct {
filterBtn *widgets.AlbumFilterButton
}
func NewGenrePage(genre string, pool *util.WidgetPool, contr *controller.Controller, pm *backend.PlaybackManager, mp mediaprovider.MediaProvider, im *backend.ImageManager) Page {
adapter := &genrePageAdapter{genre: genre, contr: contr, mp: mp, pm: pm}
func NewGenrePage(genre string, cfg *backend.AlbumsPageConfig, pool *util.WidgetPool, contr *controller.Controller, pm *backend.PlaybackManager, mp mediaprovider.MediaProvider, im *backend.ImageManager) Page {
adapter := &genrePageAdapter{genre: genre, cfg: cfg, contr: contr, mp: mp, pm: pm}
return NewGridViewPage(adapter, pool, mp, im)
}
@@ -68,6 +69,12 @@ func (a *genrePageAdapter) SearchIter(query string, filter mediaprovider.AlbumFi
return widgets.NewGridViewAlbumIterator(a.mp.SearchAlbums(query, filter))
}
func (g *genrePageAdapter) ConnectGridActions(gv *widgets.GridView) {
func (g *genrePageAdapter) InitGrid(gv *widgets.GridView) {
g.contr.ConnectAlbumGridActions(gv)
gv.ShowSuffix = g.cfg.ShowYears
}
func (g *genrePageAdapter) RefreshGrid(gv *widgets.GridView) {
gv.ShowSuffix = g.cfg.ShowYears
gv.Refresh()
}
+13 -4
View File
@@ -66,8 +66,13 @@ type GridViewPageAdapter[M, F any] interface {
// Returns the iterator for the given search query and filter.
SearchIter(query string, filter mediaprovider.MediaFilter[M, F]) widgets.GridViewIterator
// Function that connects the GridView callbacks to the appropriate action handlers.
ConnectGridActions(*widgets.GridView)
// Function that initialized the GridView with page-specific settings
// and connects the GridView callbacks to the appropriate action handlers.
InitGrid(*widgets.GridView)
// Function called when settings may have changed and the grid needs
// reconfiguring with possible settings changes.
RefreshGrid(*widgets.GridView)
}
type SortableGridViewPageAdapter interface {
@@ -124,7 +129,7 @@ func NewGridViewPage[M, F any](
gp.grid = widgets.NewGridView(iter, im, adapter.PlaceholderResource())
}
gp.grid.DisableSharing = !canShare
adapter.ConnectGridActions(gp.grid)
adapter.InitGrid(gp.grid)
gp.createSearchAndFilter()
gp.createContainer()
return gp
@@ -206,6 +211,10 @@ func (g *GridViewPage[M, F]) OnSearched(query string) {
g.searchText = query
}
func (g *GridViewPage[M, F]) Refresh() {
g.adapter.RefreshGrid(g.grid)
}
func (g *GridViewPage[M, F]) doSearch(query string) {
if g.searchText == "" {
g.gridState = g.grid.SaveToState()
@@ -294,7 +303,7 @@ func (s *savedGridViewPage[M, F]) Restore() Page {
} else {
gp.grid = widgets.NewGridViewFromState(state)
}
gp.adapter.ConnectGridActions(gp.grid)
gp.adapter.InitGrid(gp.grid)
gp.createSearchAndFilter()
gp.createContainer()
return gp
+1 -1
View File
@@ -44,7 +44,7 @@ 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.Genre:
return NewGenrePage(rte.Arg, r.widgetPool, r.Controller, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager)
return NewGenrePage(rte.Arg, &r.App.Config.AlbumsPage, 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: