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
}
type AlbumsPageConfig struct {
SortOrder string
}
type FavoritesPageConfig struct {
InitialView string
TracklistColumns []string
@@ -45,6 +49,7 @@ type Config struct {
Application AppConfig
Servers []*ServerConfig
AlbumPage AlbumPageConfig
AlbumsPage AlbumsPageConfig
FavoritesPage FavoritesPageConfig
NowPlayingPage NowPlayingPageConfig
PlaylistPage PlaylistPageConfig
@@ -60,6 +65,9 @@ func DefaultConfig() *Config {
AlbumPage: AlbumPageConfig{
TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite"},
},
AlbumsPage: AlbumsPageConfig{
SortOrder: string(AlbumSortRecentlyAdded),
},
FavoritesPage: FavoritesPageConfig{
TracklistColumns: []string{"Artist", "Album", "Time", "Plays"},
InitialView: "Albums",
+9
View File
@@ -2,6 +2,15 @@ package sharedutil
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 {
for _, tr := range tracks {
if id == tr.ID {
+16 -12
View File
@@ -2,6 +2,7 @@ package browsing
import (
"supersonic/backend"
"supersonic/sharedutil"
"supersonic/ui/controller"
"supersonic/ui/widgets"
@@ -17,7 +18,7 @@ var _ fyne.Widget = (*AlbumsPage)(nil)
type AlbumsPage struct {
widget.BaseWidget
title string
cfg *backend.AlbumsPageConfig
contr controller.Controller
pm *backend.PlaybackManager
im *backend.ImageManager
@@ -52,9 +53,9 @@ func (s *selectWidget) MinSize() fyne.Size {
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{
title: title,
cfg: cfg,
contr: contr,
pm: pm,
lm: lm,
@@ -62,13 +63,15 @@ func NewAlbumsPage(title string, sortOrder string, contr controller.Controller,
}
a.ExtendBaseWidget(a)
a.titleDisp = widget.NewRichTextWithText(title)
a.titleDisp = widget.NewRichTextWithText("Albums")
a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText,
}
a.sortOrder = NewSelect(backend.AlbumSortOrders, nil)
a.sortOrder.Selected = sortOrder
a.sortOrder.OnChanged = a.onSortOrderChanged
a.sortOrder = NewSelect(backend.AlbumSortOrders, a.onSortOrderChanged)
if !sharedutil.StringSliceContains(backend.AlbumSortOrders, cfg.SortOrder) {
cfg.SortOrder = string(backend.AlbumSortRecentlyAdded)
}
a.sortOrder.Selected = cfg.SortOrder
iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected))
a.grid = widgets.NewAlbumGrid(iter, im, false /*showYear*/)
a.grid.OnPlayAlbum = a.onPlayAlbum
@@ -99,7 +102,7 @@ func (a *AlbumsPage) createContainer(searchgrid bool) {
func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a := &AlbumsPage{
title: saved.title,
cfg: saved.cfg,
contr: saved.contr,
pm: saved.pm,
lm: saved.lm,
@@ -107,7 +110,7 @@ func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
}
a.ExtendBaseWidget(a)
a.titleDisp = widget.NewRichTextWithText(a.title)
a.titleDisp = widget.NewRichTextWithText("Albums")
a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText,
}
@@ -140,7 +143,7 @@ func (a *AlbumsPage) OnSearched(query string) {
}
func (a *AlbumsPage) Route() controller.Route {
return controller.AlbumsRoute(backend.AlbumSortOrder(a.sortOrder.Selected))
return controller.AlbumsRoute()
}
var _ Searchable = (*AlbumsPage)(nil)
@@ -160,7 +163,7 @@ func (a *AlbumsPage) Reload() {
func (a *AlbumsPage) Save() SavedPage {
sa := &savedAlbumsPage{
title: a.title,
cfg: a.cfg,
contr: a.contr,
pm: a.pm,
lm: a.lm,
@@ -201,6 +204,7 @@ func (a *AlbumsPage) onShowAlbumPage(albumID string) {
}
func (a *AlbumsPage) onSortOrderChanged(order string) {
a.cfg.SortOrder = a.sortOrder.Selected
a.grid.Reset(a.lm.AlbumsIter(backend.AlbumSortOrder(order)))
if a.searchText == "" {
a.container.Objects[0] = a.grid
@@ -214,8 +218,8 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
}
type savedAlbumsPage struct {
title string
searchText string
cfg *backend.AlbumsPageConfig
contr controller.Controller
pm *backend.PlaybackManager
lm *backend.LibraryManager
+1 -1
View File
@@ -29,7 +29,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
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)
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:
return NewArtistPage(rte.Arg, r.App.PlaybackManager, r.App.ServerManager, r.App.ImageManager, *r.Controller)
case controller.Artists:
+2 -4
View File
@@ -1,7 +1,5 @@
package controller
import "supersonic/backend"
type PageName int
const (
@@ -23,8 +21,8 @@ type Route struct {
Arg string
}
func AlbumsRoute(sortOrder backend.AlbumSortOrder) Route {
return Route{Page: Albums, Arg: string(sortOrder)}
func AlbumsRoute() Route {
return Route{Page: Albums}
}
func ArtistRoute(artistID string) Route {
+2 -2
View File
@@ -43,7 +43,7 @@ type MainWindow struct {
}
var (
HomePage = controller.AlbumsRoute(backend.AlbumSortRecentlyAdded)
HomePage = controller.AlbumsRoute()
)
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.BrowsingPane.AddNavigationButton(res.ResDiscInvertPng, func() {
m.Router.NavigateTo(controller.AlbumsRoute(backend.AlbumSortRecentlyAdded))
m.Router.NavigateTo(controller.AlbumsRoute())
})
m.BrowsingPane.AddNavigationButton(res.ResPeopleInvertPng, func() {
m.Router.NavigateTo(controller.ArtistsRoute())