save artist page view settings in config

This commit is contained in:
Drew Weymouth
2023-03-09 17:49:15 -08:00
parent 4abb3843a2
commit a6aae2b8a8
3 changed files with 34 additions and 6 deletions
+10
View File
@@ -29,6 +29,11 @@ type AlbumsPageConfig struct {
SortOrder string
}
type ArtistPageConfig struct {
InitialView string
TracklistColumns []string
}
type FavoritesPageConfig struct {
InitialView string
TracklistColumns []string
@@ -51,6 +56,7 @@ type Config struct {
Servers []*ServerConfig
AlbumPage AlbumPageConfig
AlbumsPage AlbumsPageConfig
ArtistPage ArtistPageConfig
FavoritesPage FavoritesPageConfig
NowPlayingPage NowPlayingPageConfig
PlaylistPage PlaylistPageConfig
@@ -69,6 +75,10 @@ func DefaultConfig() *Config {
AlbumsPage: AlbumsPageConfig{
SortOrder: string(AlbumSortRecentlyAdded),
},
ArtistPage: ArtistPageConfig{
InitialView: "Discography",
TracklistColumns: []string{"Album", "Time", "Plays", "Favorite"},
},
FavoritesPage: FavoritesPageConfig{
TracklistColumns: []string{"Artist", "Album", "Time", "Plays"},
InitialView: "Albums",
+23 -5
View File
@@ -27,6 +27,7 @@ type artistPageState struct {
artistID string
activeView int
cfg *backend.ArtistPageConfig
pm *backend.PlaybackManager
sm *backend.ServerManager
im *backend.ImageManager
@@ -47,13 +48,18 @@ type ArtistPage struct {
container *fyne.Container
}
func NewArtistPage(artistID string, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller) *ArtistPage {
return newArtistPage(artistID, pm, sm, im, contr, 0)
func NewArtistPage(artistID string, cfg *backend.ArtistPageConfig, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller) *ArtistPage {
activeView := 0
if cfg.InitialView == "Top Tracks" {
activeView = 1
}
return newArtistPage(artistID, cfg, pm, sm, im, contr, activeView)
}
func newArtistPage(artistID string, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller, activeView int) *ArtistPage {
func newArtistPage(artistID string, cfg *backend.ArtistPageConfig, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller, activeView int) *ArtistPage {
a := &ArtistPage{artistPageState: artistPageState{
artistID: artistID,
cfg: cfg,
pm: pm,
sm: sm,
im: im,
@@ -87,6 +93,13 @@ func (a *ArtistPage) Reload() {
}
func (a *ArtistPage) Save() SavedPage {
// TODO: find a better place to update the tracklist columns preference
// If user changes columns but doesn't navigate to another page,
// we won't be persisting the change
if a.tracklistCtr != nil {
tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist)
a.cfg.TracklistColumns = tl.VisibleColumns()
}
s := a.artistPageState
return &s
}
@@ -159,7 +172,7 @@ func (a *ArtistPage) showTopTracks() {
}
tl := widgets.NewTracklist(ts)
tl.AutoNumber = true
tl.SetVisibleColumns([]string{"Album", "Time", "Year", "Plays"})
tl.SetVisibleColumns(a.cfg.TracklistColumns)
tl.SetNowPlaying(a.nowPlayingID)
a.contr.ConnectTracklistActions(tl)
a.tracklistCtr = container.New(
@@ -179,6 +192,11 @@ func (a *ArtistPage) onViewChange(num int) {
go a.showTopTracks()
}
a.activeView = num
if num == 1 {
a.cfg.InitialView = "Top Tracks"
} else {
a.cfg.InitialView = "Discography"
}
}
func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer {
@@ -187,7 +205,7 @@ func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer {
}
func (s *artistPageState) Restore() Page {
return newArtistPage(s.artistID, s.pm, s.sm, s.im, s.contr, s.activeView)
return newArtistPage(s.artistID, s.cfg, s.pm, s.sm, s.im, s.contr, s.activeView)
}
type ArtistPageHeader struct {
+1 -1
View File
@@ -31,7 +31,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
case controller.Albums:
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)
return NewArtistPage(rte.Arg, &r.App.Config.ArtistPage, r.App.PlaybackManager, r.App.ServerManager, r.App.ImageManager, r.Controller)
case controller.Artists:
return NewArtistsGenresPage(false, r.Controller, r.App.ServerManager)
case controller.Favorites: