Albums page: remember last sort order
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user