add play button to artist page to play discography; fix regression where green play btn on album cover would not play

This commit is contained in:
Drew Weymouth
2023-03-01 16:10:51 -08:00
parent bb38592d4f
commit 27ed8216f3
2 changed files with 20 additions and 12 deletions
+19 -11
View File
@@ -24,6 +24,7 @@ var _ fyne.Widget = (*ArtistPage)(nil)
type artistPageState struct {
artistID string
pm *backend.PlaybackManager
sm *backend.ServerManager
im *backend.ImageManager
contr controller.Controller
@@ -34,15 +35,16 @@ type ArtistPage struct {
artistPageState
artistInfo *subsonic.ArtistID3
header *ArtistPageHeader
container *fyne.Container
OnPlayAlbum func(string, int)
}
func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.ImageManager, contr controller.Controller) *ArtistPage {
func NewArtistPage(artistID string, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr controller.Controller) *ArtistPage {
a := &ArtistPage{artistPageState: artistPageState{
artistID: artistID,
pm: pm,
sm: sm,
im: im,
contr: contr,
@@ -60,10 +62,6 @@ func (a *ArtistPage) Route() controller.Route {
return controller.ArtistRoute(a.artistID)
}
func (a *ArtistPage) SetPlayAlbumCallback(cb func(string, int)) {
a.OnPlayAlbum = cb
}
func (a *ArtistPage) Reload() {
go a.load()
}
@@ -74,8 +72,15 @@ func (a *ArtistPage) Save() SavedPage {
}
func (a *ArtistPage) onPlayAlbum(albumID string) {
if a.OnPlayAlbum != nil {
a.OnPlayAlbum(albumID, 0)
a.pm.PlayAlbum(albumID, 0)
}
func (a *ArtistPage) playAllTracks() {
if a.artistInfo != nil { // page loaded
for i, album := range a.artistInfo.Album {
a.pm.LoadAlbum(album.ID, i > 0 /*append*/, false /*shuffle*/)
}
a.pm.PlayFromBeginning()
}
}
@@ -90,6 +95,7 @@ func (a *ArtistPage) load() {
log.Printf("Failed to get artist: %s", err.Error())
return
}
a.artistInfo = artist
a.header.Update(artist)
ag := widgets.NewFixedAlbumGrid(artist.Album, a.im, true /*showYear*/)
ag.OnPlayAlbum = a.onPlayAlbum
@@ -109,7 +115,7 @@ func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer {
}
func (s *artistPageState) Restore() Page {
return NewArtistPage(s.artistID, s.sm, s.im, s.contr)
return NewArtistPage(s.artistID, s.pm, s.sm, s.im, s.contr)
}
type ArtistPageHeader struct {
@@ -122,6 +128,7 @@ type ArtistPageHeader struct {
biographyDisp *widget.RichText
similarArtists *fyne.Container
favoriteBtn *widgets.FavoriteButton
playBtn *widget.Button
container *fyne.Container
}
@@ -137,6 +144,7 @@ func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
}
a.artistImage = widgets.NewImagePlaceholder(res.ResPeopleInvertPng, 225)
a.favoriteBtn = widgets.NewFavoriteButton(func() { go a.toggleFavorited() })
a.playBtn = widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), page.playAllTracks)
a.biographyDisp.Wrapping = fyne.TextWrapWord
a.ExtendBaseWidget(a)
a.createContainer()
@@ -209,7 +217,7 @@ func (a *ArtistPageHeader) createContainer() {
container.NewVBox(
container.New(&layouts.VboxCustomPadding{ExtraPad: -10},
a.titleDisp, a.biographyDisp, a.similarArtists),
container.NewHBox(widgets.NewHSpace(2), a.favoriteBtn)))
container.NewHBox(widgets.NewHSpace(2), a.favoriteBtn, a.playBtn)))
}
func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer {
+1 -1
View File
@@ -31,7 +31,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
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)
return NewArtistPage(rte.Arg, r.App.PlaybackManager, r.App.ServerManager, r.App.ImageManager, *r.Controller)
case controller.Artists:
return NewArtistsGenresPage(false, *r.Controller, r.App.ServerManager)
case controller.Favorites: