make artist/album in now playing card navigable

This commit is contained in:
Drew Weymouth
2023-01-03 16:59:16 -08:00
parent f2268ca6f8
commit 4912e6d180
7 changed files with 46 additions and 21 deletions
+4
View File
@@ -45,6 +45,10 @@ func (a *AlbumPage) SetPlayAlbumCallback(cb func(string, int)) {
a.OnPlayAlbum = cb
}
func (a *AlbumPage) Route() Route {
return AlbumRoute(a.albumID)
}
func (a *AlbumPage) onPlayTrackAt(tracknum int) {
if a.OnPlayAlbum != nil {
a.OnPlayAlbum(a.albumID, tracknum)
+4
View File
@@ -102,6 +102,10 @@ func (a *AlbumsPage) OnSearched(query string) {
a.Refresh()
}
func (a *AlbumsPage) Route() Route {
return AlbumsRoute(backend.AlbumSortOrder(a.sortOrder.Selected))
}
func (a *AlbumsPage) SetPlayAlbumCallback(cb func(string, int)) {
a.OnPlayAlbum = cb
}
+4
View File
@@ -44,6 +44,10 @@ func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.Image
return a
}
func (a *ArtistPage) Route() Route {
return ArtistRoute(a.artistID)
}
func (a *ArtistPage) SetPlayAlbumCallback(cb func(string, int)) {
a.OnPlayAlbum = cb
}
+8 -3
View File
@@ -55,8 +55,7 @@ func (b *bottomPanelLayout) Layout(_ []fyne.CanvasObject, size fyne.Size) {
type BottomPanel struct {
widget.BaseWidget
ImageManager *backend.ImageManager
ImageManager *backend.ImageManager
playbackManager *backend.PlaybackManager
NowPlaying *widgets.NowPlayingCard
@@ -67,7 +66,7 @@ type BottomPanel struct {
var _ fyne.Widget = (*BottomPanel)(nil)
func NewBottomPanel(p *player.Player) *BottomPanel {
func NewBottomPanel(p *player.Player, nav func(Route)) *BottomPanel {
bp := &BottomPanel{}
bp.ExtendBaseWidget(bp)
p.OnPaused(func() {
@@ -81,6 +80,12 @@ func NewBottomPanel(p *player.Player) *BottomPanel {
})
bp.NowPlaying = widgets.NewNowPlayingCard()
bp.NowPlaying.OnAlbumNameTapped(func() {
nav(AlbumRoute(bp.playbackManager.NowPlaying().AlbumID))
})
bp.NowPlaying.OnArtistNameTapped(func() {
nav(ArtistRoute(bp.playbackManager.NowPlaying().ArtistID))
})
bp.Controls = widgets.NewPlayerControls()
bp.Controls.OnPlayPause(func() {
p.PlayPause()
+11 -9
View File
@@ -17,6 +17,8 @@ import (
type Page interface {
fyne.CanvasObject
Route() Route
}
type Searchable interface {
@@ -48,10 +50,6 @@ type BrowsingPane struct {
container *fyne.Container
}
type blankPage struct {
layout.Spacer
}
func NewBrowsingPane(app *backend.App) *BrowsingPane {
b := &BrowsingPane{app: app}
b.ExtendBaseWidget(b)
@@ -59,10 +57,9 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
b.searchBar.OnTextChanged = b.onSearchTextChanged
b.back = widget.NewButtonWithIcon("", theme.NavigateBackIcon(), b.GoBack)
b.forward = widget.NewButtonWithIcon("", theme.NavigateNextIcon(), b.GoForward)
b.curPage = &blankPage{}
b.pageContainer = container.NewMax(
canvas.NewRectangle(color.RGBA{R: 24, G: 24, B: 24, A: 255}),
b.curPage)
layout.NewSpacer())
b.container = container.NewBorder(
container.NewHBox(b.back, b.forward, b.searchBar),
nil, nil, nil, b.pageContainer)
@@ -70,11 +67,15 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
}
func (b *BrowsingPane) SetPage(p Page) {
b.addPageToHistory(p)
b.doSetPage(p)
if b.doSetPage(p) {
b.addPageToHistory(p)
}
}
func (b *BrowsingPane) doSetPage(p Page) {
func (b *BrowsingPane) doSetPage(p Page) bool {
if b.curPage != nil && b.curPage.Route() == p.Route() {
return false
}
b.curPage = p
if pa, ok := p.(CanPlayAlbum); ok {
pa.SetPlayAlbumCallback(func(albumID string, firstTrack int) {
@@ -85,6 +86,7 @@ func (b *BrowsingPane) doSetPage(p Page) {
b.searchBar.Hidden = !s
b.pageContainer.Objects[1] = p
b.Refresh()
return true
}
func (b *BrowsingPane) addPageToHistory(p Page) {
+1 -1
View File
@@ -24,9 +24,9 @@ func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App) MainWindo
m := MainWindow{
Window: fyneApp.NewWindow(appName),
BrowsingPane: NewBrowsingPane(app),
BottomPanel: NewBottomPanel(app.Player),
}
m.Router = NewRouter(app, m.BrowsingPane)
m.BottomPanel = NewBottomPanel(app.Player, m.Router.OpenRoute)
m.BottomPanel.SetPlaybackManager(app.PlaybackManager)
m.BottomPanel.ImageManager = app.ImageManager
m.container = container.NewBorder(nil, m.BottomPanel, nil, nil, m.BrowsingPane)
+14 -8
View File
@@ -15,8 +15,8 @@ type NowPlayingCard struct {
widget.BaseWidget
trackName *widget.Label
artistName *widget.Label
albumName *widget.Label
artistName *CustomHyperlink
albumName *CustomHyperlink
cover *canvas.Image
c fyne.CanvasObject
@@ -25,15 +25,13 @@ type NowPlayingCard struct {
func NewNowPlayingCard() *NowPlayingCard {
n := &NowPlayingCard{
trackName: widget.NewLabel(""),
artistName: widget.NewLabel(""),
albumName: widget.NewLabel(""),
artistName: NewCustomHyperlink(),
albumName: NewCustomHyperlink(),
cover: &canvas.Image{},
}
n.ExtendBaseWidget(n)
n.trackName.Wrapping = fyne.TextTruncate
n.trackName.TextStyle = fyne.TextStyle{Bold: true}
n.artistName.Wrapping = fyne.TextTruncate
n.albumName.Wrapping = fyne.TextTruncate
n.cover.SetMinSize(fyne.NewSize(100, 100))
n.cover.FillMode = canvas.ImageFillContain
@@ -47,8 +45,16 @@ func (n *NowPlayingCard) CreateRenderer() fyne.WidgetRenderer {
func (n *NowPlayingCard) Update(track, artist, album string, cover image.Image) {
n.trackName.Text = track
n.artistName.Text = artist
n.albumName.Text = album
n.artistName.SetText(artist)
n.albumName.SetText(album)
n.cover.Image = cover
n.c.Refresh()
}
func (n *NowPlayingCard) OnArtistNameTapped(f func()) {
n.artistName.OnTapped = f
}
func (n *NowPlayingCard) OnAlbumNameTapped(f func()) {
n.albumName.OnTapped = f
}