refactoring package organization

This commit is contained in:
Drew Weymouth
2023-01-04 17:33:44 -08:00
parent 9ac497e25b
commit 7b3aca6027
8 changed files with 36 additions and 29 deletions
+66
View File
@@ -0,0 +1,66 @@
package browsing
import (
"supersonic/backend"
)
type PageName int
const (
Blank PageName = iota
Album
Albums
Artist
Artists
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}
}
type NavigationHandler interface {
SetPage(Page)
}
type Router struct {
App *backend.App
Nav NavigationHandler
}
func NewRouter(app *backend.App, nav NavigationHandler) Router {
return Router{
App: app,
Nav: nav,
}
}
func (r Router) CreatePage(rte Route) Page {
switch rte.Page {
case Album:
return NewAlbumPage(rte.Arg, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute)
case Albums:
return NewAlbumsPage("Albums", rte.Arg, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute)
case Artist:
return NewArtistPage(rte.Arg, r.App.ServerManager, r.App.ImageManager, r.OpenRoute)
}
return nil
}
func (r Router) OpenRoute(rte Route) {
r.Nav.SetPage(r.CreatePage(rte))
}