diff --git a/backend/config.go b/backend/config.go index da153be..dbe0930 100644 --- a/backend/config.go +++ b/backend/config.go @@ -24,6 +24,11 @@ type AlbumPageConfig struct { TracklistColumns []string } +type FavoritesPageConfig struct { + InitialView string + TracklistColumns []string +} + type NowPlayingPageConfig struct { TracklistColumns []string } @@ -40,6 +45,7 @@ type Config struct { Application AppConfig Servers []*ServerConfig AlbumPage AlbumPageConfig + FavoritesPage FavoritesPageConfig NowPlayingPage NowPlayingPageConfig PlaylistPage PlaylistPageConfig LocalPlayback LocalPlaybackConfig @@ -52,10 +58,14 @@ func DefaultConfig() *Config { WindowHeight: 800, }, AlbumPage: AlbumPageConfig{ - TracklistColumns: []string{"Artist", "Time", "Plays"}, + TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite"}, + }, + FavoritesPage: FavoritesPageConfig{ + TracklistColumns: []string{"Artist", "Album", "Time", "Plays"}, + InitialView: "Albums", }, NowPlayingPage: NowPlayingPageConfig{ - TracklistColumns: []string{"Artist", "Album", "Time"}, + TracklistColumns: []string{"Artist", "Album", "Time", "Plays"}, }, PlaylistPage: PlaylistPageConfig{ TracklistColumns: []string{"Artist", "Album", "Time", "Plays"}, diff --git a/ui/browsing/favoritespage.go b/ui/browsing/favoritespage.go index 1236612..b40eb74 100644 --- a/ui/browsing/favoritespage.go +++ b/ui/browsing/favoritespage.go @@ -20,6 +20,7 @@ import ( type FavoritesPage struct { widget.BaseWidget + cfg *backend.FavoritesPageConfig contr controller.Controller pm *backend.PlaybackManager im *backend.ImageManager @@ -41,8 +42,9 @@ type FavoritesPage struct { container *fyne.Container } -func NewFavoritesPage(contr controller.Controller, sm *backend.ServerManager, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager, nav func(Route)) *FavoritesPage { +func NewFavoritesPage(cfg *backend.FavoritesPageConfig, contr controller.Controller, sm *backend.ServerManager, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager, nav func(Route)) *FavoritesPage { a := &FavoritesPage{ + cfg: cfg, contr: contr, pm: pm, lm: lm, @@ -55,6 +57,13 @@ func NewFavoritesPage(contr controller.Controller, sm *backend.ServerManager, pm a.grid = widgets.NewAlbumGrid(a.lm.StarredIter(), a.im, false) a.connectGridActions() a.createContainer(false) + if cfg.InitialView == "Artists" { + a.toggleBtns.SetActivatedButton(1) + a.onShowFavoriteArtists() + } else if cfg.InitialView == "Songs" { + a.toggleBtns.SetActivatedButton(2) + a.onShowFavoriteSongs() + } return a } @@ -91,6 +100,7 @@ func (a *FavoritesPage) createContainer(searchGrid bool) { func restoreFavoritesPage(saved *savedFavoritesPage) *FavoritesPage { a := &FavoritesPage{ + cfg: saved.cfg, contr: saved.contr, pm: saved.pm, lm: saved.lm, @@ -158,7 +168,12 @@ func (a *FavoritesPage) Reload() { } func (a *FavoritesPage) Save() SavedPage { + if a.tracklistCtr != nil { + tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist) + a.cfg.TracklistColumns = tl.VisibleColumns() + } sf := &savedFavoritesPage{ + cfg: a.cfg, contr: a.contr, pm: a.pm, sm: a.sm, @@ -223,6 +238,7 @@ func (a *FavoritesPage) doSearchAlbums(query string) { } func (a *FavoritesPage) onShowFavoriteAlbums() { + a.cfg.InitialView = "Albums" // save setting a.searcher.Entry.Show() if a.searchText == "" { a.container.Objects[0] = a.grid @@ -233,7 +249,8 @@ func (a *FavoritesPage) onShowFavoriteAlbums() { } func (a *FavoritesPage) onShowFavoriteArtists() { - a.searcher.Entry.Hide() // disable search on artists for now + a.cfg.InitialView = "Artists" // save setting + a.searcher.Entry.Hide() // disable search on artists for now if a.artistListCtr == nil { if a.pendingViewSwitch { return @@ -277,7 +294,8 @@ func buildArtistListModel(artists []*subsonic.ArtistID3) []widgets.ArtistGenrePl } func (a *FavoritesPage) onShowFavoriteSongs() { - a.searcher.Entry.Hide() // disable search on songs for now + a.cfg.InitialView = "Songs" // save setting + a.searcher.Entry.Hide() // disable search on songs for now if a.tracklistCtr == nil { if a.pendingViewSwitch { return @@ -291,8 +309,7 @@ func (a *FavoritesPage) onShowFavoriteSongs() { } tracklist := widgets.NewTracklist(s.Song) tracklist.AutoNumber = true - // TODO: get visible columns from config - tracklist.SetVisibleColumns([]string{"Artist", "Album", "Plays"}) + tracklist.SetVisibleColumns(a.cfg.TracklistColumns) tracklist.SetNowPlaying(a.nowPlayingID) a.contr.ConnectTracklistActions(tracklist) a.tracklistCtr = container.New( @@ -326,6 +343,7 @@ func (a *FavoritesPage) CreateRenderer() fyne.WidgetRenderer { } type savedFavoritesPage struct { + cfg *backend.FavoritesPageConfig contr controller.Controller pm *backend.PlaybackManager sm *backend.ServerManager diff --git a/ui/browsing/router.go b/ui/browsing/router.go index a73079b..beeeb79 100644 --- a/ui/browsing/router.go +++ b/ui/browsing/router.go @@ -95,7 +95,7 @@ func (r Router) CreatePage(rte Route) Page { case Artists: return NewArtistsGenresPage(false, r.App.ServerManager, r.OpenRoute) case Favorites: - return NewFavoritesPage(r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute) + return NewFavoritesPage(&r.App.Config.FavoritesPage, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute) case Genre: return NewGenrePage(rte.Arg, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute) case Genres: diff --git a/ui/widgets/togglebuttongroup.go b/ui/widgets/togglebuttongroup.go index bdea9db..bf81d0e 100644 --- a/ui/widgets/togglebuttongroup.go +++ b/ui/widgets/togglebuttongroup.go @@ -43,19 +43,24 @@ func (t *ToggleButtonGroup) ActivatedButtonIndex() int { return t.activeBtnIdx } -func (t *ToggleButtonGroup) onTapped(btnIdx int) bool { +func (t *ToggleButtonGroup) SetActivatedButton(idx int) { + changed := t.activeBtnIdx != idx + t.activeBtnIdx = idx for i, b := range t.buttonContainer.Objects { - if i == btnIdx { + if i == idx { b.(*widget.Button).Importance = widget.HighImportance } else { b.(*widget.Button).Importance = widget.MediumImportance } } - changed := t.activeBtnIdx != btnIdx - t.activeBtnIdx = btnIdx if changed { t.Refresh() } +} + +func (t *ToggleButtonGroup) onTapped(btnIdx int) bool { + changed := t.activeBtnIdx != btnIdx + t.SetActivatedButton(btnIdx) return changed }