make artist/album in now playing card navigable
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user