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
+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))
}