beginning of work on fullscreen page

This commit is contained in:
Drew Weymouth
2024-03-01 16:59:04 -08:00
parent 1914821283
commit e719782437
6 changed files with 206 additions and 12 deletions
+78
View File
@@ -0,0 +1,78 @@
package browsing
import (
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/backend/mediaprovider"
"github.com/dweymouth/supersonic/sharedutil"
"github.com/dweymouth/supersonic/ui/controller"
"github.com/dweymouth/supersonic/ui/util"
"github.com/dweymouth/supersonic/ui/widgets"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
type FullscreenPage struct {
widget.BaseWidget
fullscreenPageState
queue []*mediaprovider.Track
card *widgets.LargeNowPlayingCard
nowPlayingID string
}
type fullscreenPageState struct {
contr *controller.Controller
pool *util.WidgetPool
pm *backend.PlaybackManager
canRate bool
}
func NewFullscreenPage(
contr *controller.Controller,
pool *util.WidgetPool,
pm *backend.PlaybackManager,
canRate bool,
) *FullscreenPage {
a := &FullscreenPage{fullscreenPageState: fullscreenPageState{
contr: contr, pool: pool, pm: pm, canRate: canRate,
}}
a.ExtendBaseWidget(a)
a.card = widgets.NewLargeNowPlayingCard()
a.Reload()
return a
}
func (a *FullscreenPage) CreateRenderer() fyne.WidgetRenderer {
container := container.NewPadded()
return widget.NewSimpleRenderer(container)
}
func (a *FullscreenPage) Save() SavedPage {
nps := a.fullscreenPageState
return &nps
}
func (a *FullscreenPage) Route() controller.Route {
return controller.NowPlayingRoute("")
}
var _ CanShowNowPlaying = (*FullscreenPage)(nil)
func (a *FullscreenPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Track) {
a.nowPlayingID = sharedutil.TrackIDOrEmptyStr(song)
a.card.Update(song.Name, song.ArtistNames, song.ArtistIDs, song.Album)
}
func (a *FullscreenPage) Reload() {
a.queue = a.pm.GetPlayQueue()
}
func (s *fullscreenPageState) Restore() Page {
return NewFullscreenPage(s.contr, s.pool, s.pm, s.canRate)
}
+3 -1
View File
@@ -30,6 +30,7 @@ func NewRouter(app *backend.App, controller *controller.Controller, nav Navigati
}
func (r Router) CreatePage(rte controller.Route) Page {
_, canRate := r.App.ServerManager.Server.(mediaprovider.SupportsRating)
switch rte.Page {
case controller.Album:
return NewAlbumPage(rte.Arg, &r.App.Config.AlbumPage, r.widgetPool, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager, r.Controller)
@@ -41,12 +42,13 @@ func (r Router) CreatePage(rte controller.Route) Page {
return NewArtistsPage(r.Controller, r.widgetPool, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager)
case controller.Favorites:
return NewFavoritesPage(&r.App.Config.FavoritesPage, r.widgetPool, r.Controller, r.App.ServerManager.Server, r.App.PlaybackManager, r.App.ImageManager)
case controller.Fullscreen:
return NewFullscreenPage(r.Controller, r.widgetPool, r.App.PlaybackManager, canRate)
case controller.Genre:
return NewGenrePage(rte.Arg, r.widgetPool, r.Controller, r.App.PlaybackManager, r.App.ServerManager.Server, r.App.ImageManager)
case controller.Genres:
return NewGenresPage(r.Controller, r.App.ServerManager.Server)
case controller.NowPlaying:
_, canRate := r.App.ServerManager.Server.(mediaprovider.SupportsRating)
return NewNowPlayingPage(rte.Arg, r.Controller, r.widgetPool, &r.App.Config.NowPlayingPage, r.App.PlaybackManager, canRate)
case controller.Playlist:
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.widgetPool, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)