make artist and album hyperlinks in tracklist; refactor navigation to the controller package

This commit is contained in:
Drew Weymouth
2023-02-23 17:23:14 -08:00
parent 6682e3923e
commit d01ac697bd
16 changed files with 218 additions and 195 deletions
+5 -8
View File
@@ -38,7 +38,6 @@ type albumPageState struct {
im *backend.ImageManager
sm *backend.ServerManager
contr controller.Controller
nav func(Route)
}
func NewAlbumPage(
@@ -49,7 +48,6 @@ func NewAlbumPage(
lm *backend.LibraryManager,
im *backend.ImageManager,
contr controller.Controller,
nav func(Route),
) *AlbumPage {
a := &AlbumPage{
albumPageState: albumPageState{
@@ -59,7 +57,6 @@ func NewAlbumPage(
pm: pm,
lm: lm,
im: im,
nav: nav,
contr: contr,
},
}
@@ -90,8 +87,8 @@ func (a *AlbumPage) Save() SavedPage {
return &s
}
func (a *AlbumPage) Route() Route {
return AlbumRoute(a.albumID)
func (a *AlbumPage) Route() controller.Route {
return controller.AlbumRoute(a.albumID)
}
func (a *AlbumPage) OnSongChange(song *subsonic.Child, lastScrobbledIfAny *subsonic.Child) {
@@ -166,11 +163,11 @@ func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader {
}
a.artistLabel = widgets.NewCustomHyperlink()
a.artistLabel.OnTapped = func() {
page.nav(ArtistRoute(a.artistID))
page.contr.NavigateTo(controller.ArtistRoute(a.artistID))
}
a.genreLabel = widgets.NewCustomHyperlink()
a.genreLabel.OnTapped = func() {
page.nav(GenreRoute(a.genre))
page.contr.NavigateTo(controller.GenreRoute(a.genre))
}
a.miscLabel = widget.NewLabel("")
playButton := widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), func() {
@@ -249,5 +246,5 @@ func formatMiscLabelStr(a *subsonic.AlbumID3) string {
}
func (s *albumPageState) Restore() Page {
return NewAlbumPage(s.albumID, s.cfg, s.sm, s.pm, s.lm, s.im, s.contr, s.nav)
return NewAlbumPage(s.albumID, s.cfg, s.sm, s.pm, s.lm, s.im, s.contr)
}
+11 -10
View File
@@ -2,6 +2,7 @@ package browsing
import (
"supersonic/backend"
"supersonic/ui/controller"
"supersonic/ui/widgets"
"fyne.io/fyne/v2"
@@ -17,10 +18,10 @@ type AlbumsPage struct {
widget.BaseWidget
title string
contr controller.Controller
pm *backend.PlaybackManager
im *backend.ImageManager
lm *backend.LibraryManager
nav func(Route)
grid *widgets.AlbumGrid
searchGrid *widgets.AlbumGrid
searcher *widgets.Searcher
@@ -51,13 +52,13 @@ func (s *selectWidget) MinSize() fyne.Size {
return fyne.NewSize(170, s.height)
}
func NewAlbumsPage(title string, sortOrder string, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager, nav func(Route)) *AlbumsPage {
func NewAlbumsPage(title string, sortOrder string, contr controller.Controller, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager) *AlbumsPage {
a := &AlbumsPage{
title: title,
contr: contr,
pm: pm,
lm: lm,
im: im,
nav: nav,
}
a.ExtendBaseWidget(a)
@@ -99,10 +100,10 @@ func (a *AlbumsPage) createContainer(searchgrid bool) {
func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a := &AlbumsPage{
title: saved.title,
contr: saved.contr,
pm: saved.pm,
lm: saved.lm,
im: saved.im,
nav: saved.nav,
}
a.ExtendBaseWidget(a)
@@ -138,8 +139,8 @@ func (a *AlbumsPage) OnSearched(query string) {
a.doSearch(query)
}
func (a *AlbumsPage) Route() Route {
return AlbumsRoute(backend.AlbumSortOrder(a.sortOrder.Selected))
func (a *AlbumsPage) Route() controller.Route {
return controller.AlbumsRoute(backend.AlbumSortOrder(a.sortOrder.Selected))
}
var _ Searchable = (*AlbumsPage)(nil)
@@ -160,10 +161,10 @@ func (a *AlbumsPage) Reload() {
func (a *AlbumsPage) Save() SavedPage {
sa := &savedAlbumsPage{
title: a.title,
contr: a.contr,
pm: a.pm,
lm: a.lm,
im: a.im,
nav: a.nav,
searchText: a.searchText,
sortOrder: a.sortOrder.Selected,
gridState: a.grid.SaveToState(),
@@ -192,11 +193,11 @@ func (a *AlbumsPage) onPlayAlbum(albumID string) {
}
func (a *AlbumsPage) onShowArtistPage(artistID string) {
a.nav(ArtistRoute(artistID))
a.contr.NavigateTo(controller.ArtistRoute(artistID))
}
func (a *AlbumsPage) onShowAlbumPage(albumID string) {
a.nav(AlbumRoute(albumID))
a.contr.NavigateTo(controller.AlbumRoute(albumID))
}
func (a *AlbumsPage) onSortOrderChanged(order string) {
@@ -215,10 +216,10 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
type savedAlbumsPage struct {
title string
searchText string
contr controller.Controller
pm *backend.PlaybackManager
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
sortOrder string
gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
+8 -12
View File
@@ -26,7 +26,6 @@ type artistPageState struct {
artistID string
sm *backend.ServerManager
im *backend.ImageManager
nav func(Route)
contr controller.Controller
}
@@ -41,16 +40,15 @@ type ArtistPage struct {
OnPlayAlbum func(string, int)
}
func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.ImageManager, contr controller.Controller, nav func(Route)) *ArtistPage {
func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.ImageManager, contr controller.Controller) *ArtistPage {
a := &ArtistPage{artistPageState: artistPageState{
artistID: artistID,
sm: sm,
im: im,
nav: nav,
contr: contr,
}}
a.ExtendBaseWidget(a)
a.header = NewArtistPageHeader(a, nav)
a.header = NewArtistPageHeader(a)
a.container = container.NewBorder(
container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 15, PadBottom: 10}, a.header),
nil, nil, nil, layout.NewSpacer())
@@ -58,8 +56,8 @@ func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.Image
return a
}
func (a *ArtistPage) Route() Route {
return ArtistRoute(a.artistID)
func (a *ArtistPage) Route() controller.Route {
return controller.ArtistRoute(a.artistID)
}
func (a *ArtistPage) SetPlayAlbumCallback(cb func(string, int)) {
@@ -82,7 +80,7 @@ func (a *ArtistPage) onPlayAlbum(albumID string) {
}
func (a *ArtistPage) onShowAlbumPage(albumID string) {
a.nav(AlbumRoute(albumID))
a.contr.NavigateTo(controller.AlbumRoute(albumID))
}
// should be called asynchronously
@@ -111,13 +109,12 @@ func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer {
}
func (s *artistPageState) Restore() Page {
return NewArtistPage(s.artistID, s.sm, s.im, s.contr, s.nav)
return NewArtistPage(s.artistID, s.sm, s.im, s.contr)
}
type ArtistPageHeader struct {
widget.BaseWidget
nav func(Route)
artistID string
artistPage *ArtistPage
artistImage *widgets.ImagePlaceholder
@@ -128,9 +125,8 @@ type ArtistPageHeader struct {
container *fyne.Container
}
func NewArtistPageHeader(page *ArtistPage, nav func(Route)) *ArtistPageHeader {
func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
a := &ArtistPageHeader{
nav: nav,
artistPage: page,
titleDisp: widget.NewRichTextWithText(""),
biographyDisp: widget.NewRichTextWithText("Artist biography not available."),
@@ -181,7 +177,7 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) {
h.NoTruncate = true
h.SetText(art.Name)
h.OnTapped = func(id string) func() {
return func() { a.nav(ArtistRoute(id)) }
return func() { a.artistPage.contr.NavigateTo(controller.ArtistRoute(id)) }
}(art.ID)
a.similarArtists.Add(h)
}
+12 -11
View File
@@ -3,6 +3,7 @@ package browsing
import (
"log"
"supersonic/backend"
"supersonic/ui/controller"
"supersonic/ui/layouts"
"supersonic/ui/widgets"
"time"
@@ -20,22 +21,22 @@ type ArtistsGenresPage struct {
widget.BaseWidget
isGenresPage bool
contr controller.Controller
sm *backend.ServerManager
nav func(Route)
titleDisp *widget.RichText
container *fyne.Container
list *widgets.ArtistGenrePlaylist
}
func NewArtistsGenresPage(isGenresPage bool, sm *backend.ServerManager, nav func(Route)) *ArtistsGenresPage {
func NewArtistsGenresPage(isGenresPage bool, contr controller.Controller, sm *backend.ServerManager) *ArtistsGenresPage {
title := "Artists"
if isGenresPage {
title = "Genres"
}
a := &ArtistsGenresPage{
isGenresPage: isGenresPage,
contr: contr,
sm: sm,
nav: nav,
titleDisp: widget.NewRichTextWithText(title),
}
a.ExtendBaseWidget(a)
@@ -45,9 +46,9 @@ func NewArtistsGenresPage(isGenresPage bool, sm *backend.ServerManager, nav func
a.list.ShowTrackCount = isGenresPage
a.list.OnNavTo = func(id string) {
if a.isGenresPage {
nav(GenreRoute(id))
a.contr.NavigateTo(controller.GenreRoute(id))
} else {
nav(ArtistRoute(id))
a.contr.NavigateTo(controller.ArtistRoute(id))
}
}
a.buildContainer()
@@ -73,11 +74,11 @@ func (a *ArtistsGenresPage) load() {
a.Refresh()
}
func (a *ArtistsGenresPage) Route() Route {
func (a *ArtistsGenresPage) Route() controller.Route {
if a.isGenresPage {
return GenresRoute()
return controller.GenresRoute()
}
return ArtistsRoute()
return controller.ArtistsRoute()
}
func (a *ArtistsGenresPage) Reload() {
@@ -87,19 +88,19 @@ func (a *ArtistsGenresPage) Reload() {
func (a *ArtistsGenresPage) Save() SavedPage {
return &savedArtistsGenresPage{
isGenresPage: a.isGenresPage,
contr: a.contr,
sm: a.sm,
nav: a.nav,
}
}
type savedArtistsGenresPage struct {
isGenresPage bool
contr controller.Controller
sm *backend.ServerManager
nav func(Route)
}
func (s *savedArtistsGenresPage) Restore() Page {
return NewArtistsGenresPage(s.isGenresPage, s.sm, s.nav)
return NewArtistsGenresPage(s.isGenresPage, s.contr, s.sm)
}
func (a *ArtistsGenresPage) buildArtistListModel(artists *subsonic.ArtistsID3) []widgets.ArtistGenrePlaylistItemModel {
+3 -2
View File
@@ -3,6 +3,7 @@ package browsing
import (
"image/color"
"supersonic/backend"
"supersonic/ui/controller"
"supersonic/ui/layouts"
"fyne.io/fyne/v2"
@@ -19,7 +20,7 @@ type Page interface {
Save() SavedPage
Reload()
Route() Route
Route() controller.Route
}
type SavedPage interface {
@@ -216,7 +217,7 @@ var _ Page = (*blankPage)(nil)
func (p *blankPage) Reload() {}
func (p *blankPage) Route() Route { return Route{Page: Blank} }
func (p *blankPage) Route() controller.Route { return controller.Route{Page: controller.Blank} }
func (p *blankPage) Save() SavedPage { return p }
+6 -11
View File
@@ -26,7 +26,6 @@ type FavoritesPage struct {
im *backend.ImageManager
sm *backend.ServerManager
lm *backend.LibraryManager
nav func(Route)
searchText string
nowPlayingID string
@@ -42,7 +41,7 @@ type FavoritesPage struct {
container *fyne.Container
}
func NewFavoritesPage(cfg *backend.FavoritesPageConfig, 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) *FavoritesPage {
a := &FavoritesPage{
cfg: cfg,
contr: contr,
@@ -50,7 +49,6 @@ func NewFavoritesPage(cfg *backend.FavoritesPageConfig, contr controller.Control
lm: lm,
sm: sm,
im: im,
nav: nav,
}
a.ExtendBaseWidget(a)
a.createHeader(0, "")
@@ -106,7 +104,6 @@ func restoreFavoritesPage(saved *savedFavoritesPage) *FavoritesPage {
lm: saved.lm,
sm: saved.sm,
im: saved.im,
nav: saved.nav,
}
a.ExtendBaseWidget(a)
a.createHeader(saved.activeToggleBtn, saved.searchText)
@@ -126,8 +123,8 @@ func restoreFavoritesPage(saved *savedFavoritesPage) *FavoritesPage {
return a
}
func (a *FavoritesPage) Route() Route {
return FavoritesRoute()
func (a *FavoritesPage) Route() controller.Route {
return controller.FavoritesRoute()
}
func (a *FavoritesPage) Reload() {
@@ -179,7 +176,6 @@ func (a *FavoritesPage) Save() SavedPage {
sm: a.sm,
im: a.im,
lm: a.lm,
nav: a.nav,
searchText: a.searchText,
gridState: a.grid.SaveToState(),
activeToggleBtn: a.toggleBtns.ActivatedButtonIndex(),
@@ -266,7 +262,7 @@ func (a *FavoritesPage) onShowFavoriteArtists() {
artistList := widgets.NewArtistGenrePlaylist(model)
artistList.ShowAlbumCount = true
artistList.OnNavTo = func(artistID string) {
a.nav(ArtistRoute(artistID))
a.contr.NavigateTo(controller.ArtistRoute(artistID))
}
a.artistListCtr = container.New(
&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 5, PadBottom: 15},
@@ -330,11 +326,11 @@ func (a *FavoritesPage) onPlayAlbum(albumID string) {
}
func (a *FavoritesPage) onShowAlbumPage(albumID string) {
a.nav(AlbumRoute(albumID))
a.contr.NavigateTo(controller.AlbumRoute(albumID))
}
func (a *FavoritesPage) onShowArtistPage(artistID string) {
a.nav(ArtistRoute(artistID))
a.contr.NavigateTo(controller.ArtistRoute(artistID))
}
func (a *FavoritesPage) CreateRenderer() fyne.WidgetRenderer {
@@ -353,7 +349,6 @@ type savedFavoritesPage struct {
searchGridState widgets.AlbumGridState
searchText string
activeToggleBtn int
nav func(Route)
}
func (s *savedFavoritesPage) Restore() Page {
+11 -10
View File
@@ -2,6 +2,7 @@ package browsing
import (
"supersonic/backend"
"supersonic/ui/controller"
"supersonic/ui/widgets"
"fyne.io/fyne/v2"
@@ -17,10 +18,10 @@ type GenrePage struct {
widget.BaseWidget
genre string
contr controller.Controller
im *backend.ImageManager
pm *backend.PlaybackManager
lm *backend.LibraryManager
nav func(Route)
grid *widgets.AlbumGrid
searchGrid *widgets.AlbumGrid
searcher *widgets.Searcher
@@ -32,13 +33,13 @@ type GenrePage struct {
container *fyne.Container
}
func NewGenrePage(genre string, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager, nav func(Route)) *GenrePage {
func NewGenrePage(genre string, contr controller.Controller, pm *backend.PlaybackManager, lm *backend.LibraryManager, im *backend.ImageManager) *GenrePage {
g := &GenrePage{
genre: genre,
contr: contr,
pm: pm,
lm: lm,
im: im,
nav: nav,
}
g.ExtendBaseWidget(g)
@@ -76,10 +77,10 @@ func (g *GenrePage) createContainer(searchGrid bool) {
func restoreGenrePage(saved *savedGenrePage) *GenrePage {
g := &GenrePage{
genre: saved.genre,
contr: saved.contr,
pm: saved.pm,
lm: saved.lm,
im: saved.im,
nav: saved.nav,
}
g.ExtendBaseWidget(g)
@@ -103,8 +104,8 @@ func (g *GenrePage) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(g.container)
}
func (a *GenrePage) Route() Route {
return GenreRoute(a.genre)
func (a *GenrePage) Route() controller.Route {
return controller.GenreRoute(a.genre)
}
func (a *GenrePage) SetPlayAlbumCallback(cb func(string, int)) {
@@ -124,10 +125,10 @@ func (g *GenrePage) Save() SavedPage {
sg := &savedGenrePage{
genre: g.genre,
searchText: g.searchText,
contr: g.contr,
pm: g.pm,
lm: g.lm,
im: g.im,
nav: g.nav,
gridState: g.grid.SaveToState(),
}
if g.searchGrid != nil {
@@ -147,11 +148,11 @@ func (a *GenrePage) onPlayAlbum(albumID string) {
}
func (a *GenrePage) onShowArtistPage(artistID string) {
a.nav(ArtistRoute(artistID))
a.contr.NavigateTo(controller.ArtistRoute(artistID))
}
func (a *GenrePage) onShowAlbumPage(albumID string) {
a.nav(AlbumRoute(albumID))
a.contr.NavigateTo(controller.AlbumRoute(albumID))
}
func (g *GenrePage) OnSearched(query string) {
@@ -186,10 +187,10 @@ func (g *GenrePage) doSearch(query string) {
type savedGenrePage struct {
genre string
searchText string
contr controller.Controller
pm *backend.PlaybackManager
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
}
+4 -6
View File
@@ -29,7 +29,6 @@ type nowPlayingPageState struct {
conf *backend.NowPlayingPageConfig
sm *backend.ServerManager
pm *backend.PlaybackManager
nav func(Route)
}
func NewNowPlayingPage(
@@ -37,9 +36,8 @@ func NewNowPlayingPage(
conf *backend.NowPlayingPageConfig,
sm *backend.ServerManager,
pm *backend.PlaybackManager,
nav func(Route),
) *NowPlayingPage {
a := &NowPlayingPage{nowPlayingPageState: nowPlayingPageState{contr: contr, conf: conf, sm: sm, pm: pm, nav: nav}}
a := &NowPlayingPage{nowPlayingPageState: nowPlayingPageState{contr: contr, conf: conf, sm: sm, pm: pm}}
a.ExtendBaseWidget(a)
a.tracklist = widgets.NewTracklist(nil)
a.tracklist.SetVisibleColumns(conf.TracklistColumns)
@@ -69,8 +67,8 @@ func (a *NowPlayingPage) Save() SavedPage {
return &nps
}
func (a *NowPlayingPage) Route() Route {
return NowPlayingRoute()
func (a *NowPlayingPage) Route() controller.Route {
return controller.NowPlayingRoute()
}
func (a *NowPlayingPage) Tapped(*fyne.PointEvent) {
@@ -113,5 +111,5 @@ func (a *NowPlayingPage) load() {
}
func (s *nowPlayingPageState) Restore() Page {
return NewNowPlayingPage(s.contr, s.conf, s.sm, s.pm, s.nav)
return NewNowPlayingPage(s.contr, s.conf, s.sm, s.pm)
}
+3 -5
View File
@@ -36,7 +36,6 @@ type playlistPageState struct {
sm *backend.ServerManager
pm *backend.PlaybackManager
im *backend.ImageManager
nav func(Route)
}
func NewPlaylistPage(
@@ -46,7 +45,6 @@ func NewPlaylistPage(
sm *backend.ServerManager,
pm *backend.PlaybackManager,
im *backend.ImageManager,
nav func(Route),
) *PlaylistPage {
a := &PlaylistPage{playlistPageState: playlistPageState{playlistID: playlistID, conf: conf, contr: contr, sm: sm, pm: pm, im: im}}
a.ExtendBaseWidget(a)
@@ -77,8 +75,8 @@ func (a *PlaylistPage) Save() SavedPage {
return &p
}
func (a *PlaylistPage) Route() Route {
return PlaylistRoute(a.playlistID)
func (a *PlaylistPage) Route() controller.Route {
return controller.PlaylistRoute(a.playlistID)
}
func (a *PlaylistPage) OnSongChange(song *subsonic.Child, lastScrobbledIfAny *subsonic.Child) {
@@ -211,5 +209,5 @@ func (a *PlaylistPageHeader) formatPlaylistTrackTimeStr(p *subsonic.Playlist) st
}
func (s *playlistPageState) Restore() Page {
return NewPlaylistPage(s.playlistID, s.conf, s.contr, s.sm, s.pm, s.im, s.nav)
return NewPlaylistPage(s.playlistID, s.conf, s.contr, s.sm, s.pm, s.im)
}
+12 -11
View File
@@ -4,6 +4,7 @@ import (
"log"
"strconv"
"supersonic/backend"
"supersonic/ui/controller"
"supersonic/ui/layouts"
"supersonic/ui/widgets"
@@ -17,24 +18,24 @@ import (
type PlaylistsPage struct {
widget.BaseWidget
contr controller.Controller
sm *backend.ServerManager
nav func(Route)
titleDisp *widget.RichText
container *fyne.Container
list *PlaylistList
}
func NewPlaylistsPage(sm *backend.ServerManager, nav func(Route)) *PlaylistsPage {
func NewPlaylistsPage(contr controller.Controller, sm *backend.ServerManager) *PlaylistsPage {
a := &PlaylistsPage{
sm: sm,
nav: nav,
contr: contr,
titleDisp: widget.NewRichTextWithText("Playlists"),
}
a.ExtendBaseWidget(a)
a.titleDisp.Segments[0].(*widget.TextSegment).Style.SizeName = theme.SizeNameHeadingText
a.list = NewPlaylistList()
a.list.OnNavTo = func(id string) {
nav(PlaylistRoute(id))
a.contr.NavigateTo(controller.PlaylistRoute(id))
}
a.buildContainer()
go a.loadAsync()
@@ -50,8 +51,8 @@ func (a *PlaylistsPage) loadAsync() {
a.list.Refresh()
}
func (a *PlaylistsPage) Route() Route {
return PlaylistsRoute()
func (a *PlaylistsPage) Route() controller.Route {
return controller.PlaylistsRoute()
}
func (a *PlaylistsPage) Reload() {
@@ -60,18 +61,18 @@ func (a *PlaylistsPage) Reload() {
func (a *PlaylistsPage) Save() SavedPage {
return &savedPlaylistsPage{
sm: a.sm,
nav: a.nav,
contr: a.contr,
sm: a.sm,
}
}
type savedPlaylistsPage struct {
sm *backend.ServerManager
nav func(Route)
contr controller.Controller
sm *backend.ServerManager
}
func (s *savedPlaylistsPage) Restore() Page {
return NewPlaylistsPage(s.sm, s.nav)
return NewPlaylistsPage(s.contr, s.sm)
}
func (a *PlaylistsPage) buildContainer() {
+24 -84
View File
@@ -5,77 +5,17 @@ import (
"supersonic/ui/controller"
)
type PageName int
const (
Blank PageName = iota
Album
Albums
Artist
Artists
Genre
Genres
Favorites
NowPlaying
Playlist
Playlists
)
type Route struct {
Page PageName
Arg string
}
func AlbumsRoute(sortOrder backend.AlbumSortOrder) Route {
return Route{Page: Albums, Arg: string(sortOrder)}
}
func ArtistRoute(artistID string) Route {
return Route{Page: Artist, Arg: artistID}
}
func AlbumRoute(albumID string) Route {
return Route{Page: Album, Arg: albumID}
}
func FavoritesRoute() Route {
return Route{Page: Favorites}
}
func GenreRoute(genre string) Route {
return Route{Page: Genre, Arg: genre}
}
func GenresRoute() Route {
return Route{Page: Genres}
}
func PlaylistRoute(id string) Route {
return Route{Page: Playlist, Arg: id}
}
func PlaylistsRoute() Route {
return Route{Page: Playlists}
}
func ArtistsRoute() Route {
return Route{Page: Artists}
}
func NowPlayingRoute() Route {
return Route{Page: NowPlaying}
}
type NavigationHandler interface {
SetPage(Page)
}
type Router struct {
App *backend.App
Controller controller.Controller
Controller *controller.Controller
Nav NavigationHandler
}
func NewRouter(app *backend.App, controller controller.Controller, nav NavigationHandler) Router {
func NewRouter(app *backend.App, controller *controller.Controller, nav NavigationHandler) Router {
r := Router{
App: app,
Controller: controller,
@@ -84,32 +24,32 @@ func NewRouter(app *backend.App, controller controller.Controller, nav Navigatio
return r
}
func (r Router) CreatePage(rte Route) Page {
func (r Router) CreatePage(rte controller.Route) Page {
switch rte.Page {
case Album:
return NewAlbumPage(rte.Arg, &r.App.Config.AlbumPage, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.Controller, r.OpenRoute)
case Albums:
return NewAlbumsPage("Albums", rte.Arg, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute)
case Artist:
return NewArtistPage(rte.Arg, r.App.ServerManager, r.App.ImageManager, r.Controller, r.OpenRoute)
case Artists:
return NewArtistsGenresPage(false, r.App.ServerManager, r.OpenRoute)
case Favorites:
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:
return NewArtistsGenresPage(true, r.App.ServerManager, r.OpenRoute)
case NowPlaying:
return NewNowPlayingPage(r.Controller, &r.App.Config.NowPlayingPage, r.App.ServerManager, r.App.PlaybackManager, r.OpenRoute)
case Playlist:
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager, r.OpenRoute)
case Playlists:
return NewPlaylistsPage(r.App.ServerManager, r.OpenRoute)
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)
case controller.Artist:
return NewArtistPage(rte.Arg, r.App.ServerManager, r.App.ImageManager, *r.Controller)
case controller.Artists:
return NewArtistsGenresPage(false, *r.Controller, r.App.ServerManager)
case controller.Favorites:
return NewFavoritesPage(&r.App.Config.FavoritesPage, *r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager)
case controller.Genre:
return NewGenrePage(rte.Arg, *r.Controller, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager)
case controller.Genres:
return NewArtistsGenresPage(true, *r.Controller, r.App.ServerManager)
case controller.NowPlaying:
return NewNowPlayingPage(*r.Controller, &r.App.Config.NowPlayingPage, r.App.ServerManager, r.App.PlaybackManager)
case controller.Playlist:
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, *r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)
case controller.Playlists:
return NewPlaylistsPage(*r.Controller, r.App.ServerManager)
}
return nil
}
func (r Router) OpenRoute(rte Route) {
func (r Router) NavigateTo(rte controller.Route) {
r.Nav.SetPage(r.CreatePage(rte))
}