Albums page: remember last sort order

This commit is contained in:
Drew Weymouth
2023-03-02 20:49:00 -08:00
parent 595d9116f0
commit 37928881c0
6 changed files with 38 additions and 19 deletions
+8
View File
@@ -24,6 +24,10 @@ type AlbumPageConfig struct {
TracklistColumns []string TracklistColumns []string
} }
type AlbumsPageConfig struct {
SortOrder string
}
type FavoritesPageConfig struct { type FavoritesPageConfig struct {
InitialView string InitialView string
TracklistColumns []string TracklistColumns []string
@@ -45,6 +49,7 @@ type Config struct {
Application AppConfig Application AppConfig
Servers []*ServerConfig Servers []*ServerConfig
AlbumPage AlbumPageConfig AlbumPage AlbumPageConfig
AlbumsPage AlbumsPageConfig
FavoritesPage FavoritesPageConfig FavoritesPage FavoritesPageConfig
NowPlayingPage NowPlayingPageConfig NowPlayingPage NowPlayingPageConfig
PlaylistPage PlaylistPageConfig PlaylistPage PlaylistPageConfig
@@ -60,6 +65,9 @@ func DefaultConfig() *Config {
AlbumPage: AlbumPageConfig{ AlbumPage: AlbumPageConfig{
TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite"}, TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite"},
}, },
AlbumsPage: AlbumsPageConfig{
SortOrder: string(AlbumSortRecentlyAdded),
},
FavoritesPage: FavoritesPageConfig{ FavoritesPage: FavoritesPageConfig{
TracklistColumns: []string{"Artist", "Album", "Time", "Plays"}, TracklistColumns: []string{"Artist", "Album", "Time", "Plays"},
InitialView: "Albums", InitialView: "Albums",
+9
View File
@@ -2,6 +2,15 @@ package sharedutil
import "github.com/dweymouth/go-subsonic/subsonic" import "github.com/dweymouth/go-subsonic/subsonic"
func StringSliceContains(slice []string, str string) bool {
for _, s := range slice {
if s == str {
return true
}
}
return false
}
func FindTrackByID(id string, tracks []*subsonic.Child) *subsonic.Child { func FindTrackByID(id string, tracks []*subsonic.Child) *subsonic.Child {
for _, tr := range tracks { for _, tr := range tracks {
if id == tr.ID { if id == tr.ID {
+16 -12
View File
@@ -2,6 +2,7 @@ package browsing
import ( import (
"supersonic/backend" "supersonic/backend"
"supersonic/sharedutil"
"supersonic/ui/controller" "supersonic/ui/controller"
"supersonic/ui/widgets" "supersonic/ui/widgets"
@@ -17,7 +18,7 @@ var _ fyne.Widget = (*AlbumsPage)(nil)
type AlbumsPage struct { type AlbumsPage struct {
widget.BaseWidget widget.BaseWidget
title string cfg *backend.AlbumsPageConfig
contr controller.Controller contr controller.Controller
pm *backend.PlaybackManager pm *backend.PlaybackManager
im *backend.ImageManager im *backend.ImageManager
@@ -52,9 +53,9 @@ func (s *selectWidget) MinSize() fyne.Size {
return fyne.NewSize(170, s.height) return fyne.NewSize(170, s.height)
} }
func NewAlbumsPage(title string, sortOrder string, contr controller.Controller, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager) *AlbumsPage { func NewAlbumsPage(cfg *backend.AlbumsPageConfig, contr controller.Controller, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager) *AlbumsPage {
a := &AlbumsPage{ a := &AlbumsPage{
title: title, cfg: cfg,
contr: contr, contr: contr,
pm: pm, pm: pm,
lm: lm, lm: lm,
@@ -62,13 +63,15 @@ func NewAlbumsPage(title string, sortOrder string, contr controller.Controller,
} }
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.titleDisp = widget.NewRichTextWithText(title) a.titleDisp = widget.NewRichTextWithText("Albums")
a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{ a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText, SizeName: theme.SizeNameHeadingText,
} }
a.sortOrder = NewSelect(backend.AlbumSortOrders, nil) a.sortOrder = NewSelect(backend.AlbumSortOrders, a.onSortOrderChanged)
a.sortOrder.Selected = sortOrder if !sharedutil.StringSliceContains(backend.AlbumSortOrders, cfg.SortOrder) {
a.sortOrder.OnChanged = a.onSortOrderChanged cfg.SortOrder = string(backend.AlbumSortRecentlyAdded)
}
a.sortOrder.Selected = cfg.SortOrder
iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected)) iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected))
a.grid = widgets.NewAlbumGrid(iter, im, false /*showYear*/) a.grid = widgets.NewAlbumGrid(iter, im, false /*showYear*/)
a.grid.OnPlayAlbum = a.onPlayAlbum a.grid.OnPlayAlbum = a.onPlayAlbum
@@ -99,7 +102,7 @@ func (a *AlbumsPage) createContainer(searchgrid bool) {
func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage { func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a := &AlbumsPage{ a := &AlbumsPage{
title: saved.title, cfg: saved.cfg,
contr: saved.contr, contr: saved.contr,
pm: saved.pm, pm: saved.pm,
lm: saved.lm, lm: saved.lm,
@@ -107,7 +110,7 @@ func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
} }
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.titleDisp = widget.NewRichTextWithText(a.title) a.titleDisp = widget.NewRichTextWithText("Albums")
a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{ a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText, SizeName: theme.SizeNameHeadingText,
} }
@@ -140,7 +143,7 @@ func (a *AlbumsPage) OnSearched(query string) {
} }
func (a *AlbumsPage) Route() controller.Route { func (a *AlbumsPage) Route() controller.Route {
return controller.AlbumsRoute(backend.AlbumSortOrder(a.sortOrder.Selected)) return controller.AlbumsRoute()
} }
var _ Searchable = (*AlbumsPage)(nil) var _ Searchable = (*AlbumsPage)(nil)
@@ -160,7 +163,7 @@ func (a *AlbumsPage) Reload() {
func (a *AlbumsPage) Save() SavedPage { func (a *AlbumsPage) Save() SavedPage {
sa := &savedAlbumsPage{ sa := &savedAlbumsPage{
title: a.title, cfg: a.cfg,
contr: a.contr, contr: a.contr,
pm: a.pm, pm: a.pm,
lm: a.lm, lm: a.lm,
@@ -201,6 +204,7 @@ func (a *AlbumsPage) onShowAlbumPage(albumID string) {
} }
func (a *AlbumsPage) onSortOrderChanged(order string) { func (a *AlbumsPage) onSortOrderChanged(order string) {
a.cfg.SortOrder = a.sortOrder.Selected
a.grid.Reset(a.lm.AlbumsIter(backend.AlbumSortOrder(order))) a.grid.Reset(a.lm.AlbumsIter(backend.AlbumSortOrder(order)))
if a.searchText == "" { if a.searchText == "" {
a.container.Objects[0] = a.grid a.container.Objects[0] = a.grid
@@ -214,8 +218,8 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
} }
type savedAlbumsPage struct { type savedAlbumsPage struct {
title string
searchText string searchText string
cfg *backend.AlbumsPageConfig
contr controller.Controller contr controller.Controller
pm *backend.PlaybackManager pm *backend.PlaybackManager
lm *backend.LibraryManager lm *backend.LibraryManager
+1 -1
View File
@@ -29,7 +29,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
case controller.Album: case controller.Album:
return NewAlbumPage(rte.Arg, &r.App.Config.AlbumPage, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, *r.Controller) return NewAlbumPage(rte.Arg, &r.App.Config.AlbumPage, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, *r.Controller)
case controller.Albums: case controller.Albums:
return NewAlbumsPage("Albums", rte.Arg, *r.Controller, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager) return NewAlbumsPage(&r.App.Config.AlbumsPage, *r.Controller, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager)
case controller.Artist: case controller.Artist:
return NewArtistPage(rte.Arg, r.App.PlaybackManager, r.App.ServerManager, r.App.ImageManager, *r.Controller) return NewArtistPage(rte.Arg, r.App.PlaybackManager, r.App.ServerManager, r.App.ImageManager, *r.Controller)
case controller.Artists: case controller.Artists:
+2 -4
View File
@@ -1,7 +1,5 @@
package controller package controller
import "supersonic/backend"
type PageName int type PageName int
const ( const (
@@ -23,8 +21,8 @@ type Route struct {
Arg string Arg string
} }
func AlbumsRoute(sortOrder backend.AlbumSortOrder) Route { func AlbumsRoute() Route {
return Route{Page: Albums, Arg: string(sortOrder)} return Route{Page: Albums}
} }
func ArtistRoute(artistID string) Route { func ArtistRoute(artistID string) Route {
+2 -2
View File
@@ -43,7 +43,7 @@ type MainWindow struct {
} }
var ( var (
HomePage = controller.AlbumsRoute(backend.AlbumSortRecentlyAdded) HomePage = controller.AlbumsRoute()
) )
func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App, size fyne.Size) MainWindow { func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App, size fyne.Size) MainWindow {
@@ -97,7 +97,7 @@ func (m *MainWindow) addNavigationButtons() {
m.Router.NavigateTo(controller.FavoritesRoute()) m.Router.NavigateTo(controller.FavoritesRoute())
}) })
m.BrowsingPane.AddNavigationButton(res.ResDiscInvertPng, func() { m.BrowsingPane.AddNavigationButton(res.ResDiscInvertPng, func() {
m.Router.NavigateTo(controller.AlbumsRoute(backend.AlbumSortRecentlyAdded)) m.Router.NavigateTo(controller.AlbumsRoute())
}) })
m.BrowsingPane.AddNavigationButton(res.ResPeopleInvertPng, func() { m.BrowsingPane.AddNavigationButton(res.ResPeopleInvertPng, func() {
m.Router.NavigateTo(controller.ArtistsRoute()) m.Router.NavigateTo(controller.ArtistsRoute())