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 { type artistPageState struct {
artistID string artistID string
pm *backend.PlaybackManager
sm *backend.ServerManager sm *backend.ServerManager
im *backend.ImageManager im *backend.ImageManager
contr controller.Controller contr controller.Controller
@@ -34,15 +35,16 @@ type ArtistPage struct {
artistPageState artistPageState
artistInfo *subsonic.ArtistID3
header *ArtistPageHeader header *ArtistPageHeader
container *fyne.Container 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{ a := &ArtistPage{artistPageState: artistPageState{
artistID: artistID, artistID: artistID,
pm: pm,
sm: sm, sm: sm,
im: im, im: im,
contr: contr, contr: contr,
@@ -60,10 +62,6 @@ func (a *ArtistPage) Route() controller.Route {
return controller.ArtistRoute(a.artistID) return controller.ArtistRoute(a.artistID)
} }
func (a *ArtistPage) SetPlayAlbumCallback(cb func(string, int)) {
a.OnPlayAlbum = cb
}
func (a *ArtistPage) Reload() { func (a *ArtistPage) Reload() {
go a.load() go a.load()
} }
@@ -74,8 +72,15 @@ func (a *ArtistPage) Save() SavedPage {
} }
func (a *ArtistPage) onPlayAlbum(albumID string) { func (a *ArtistPage) onPlayAlbum(albumID string) {
if a.OnPlayAlbum != nil { a.pm.PlayAlbum(albumID, 0)
a.OnPlayAlbum(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()) log.Printf("Failed to get artist: %s", err.Error())
return return
} }
a.artistInfo = artist
a.header.Update(artist) a.header.Update(artist)
ag := widgets.NewFixedAlbumGrid(artist.Album, a.im, true /*showYear*/) ag := widgets.NewFixedAlbumGrid(artist.Album, a.im, true /*showYear*/)
ag.OnPlayAlbum = a.onPlayAlbum ag.OnPlayAlbum = a.onPlayAlbum
@@ -109,7 +115,7 @@ func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer {
} }
func (s *artistPageState) Restore() Page { 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 { type ArtistPageHeader struct {
@@ -122,6 +128,7 @@ type ArtistPageHeader struct {
biographyDisp *widget.RichText biographyDisp *widget.RichText
similarArtists *fyne.Container similarArtists *fyne.Container
favoriteBtn *widgets.FavoriteButton favoriteBtn *widgets.FavoriteButton
playBtn *widget.Button
container *fyne.Container container *fyne.Container
} }
@@ -137,6 +144,7 @@ func NewArtistPageHeader(page *ArtistPage) *ArtistPageHeader {
} }
a.artistImage = widgets.NewImagePlaceholder(res.ResPeopleInvertPng, 225) a.artistImage = widgets.NewImagePlaceholder(res.ResPeopleInvertPng, 225)
a.favoriteBtn = widgets.NewFavoriteButton(func() { go a.toggleFavorited() }) a.favoriteBtn = widgets.NewFavoriteButton(func() { go a.toggleFavorited() })
a.playBtn = widget.NewButtonWithIcon("Play", theme.MediaPlayIcon(), page.playAllTracks)
a.biographyDisp.Wrapping = fyne.TextWrapWord a.biographyDisp.Wrapping = fyne.TextWrapWord
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.createContainer() a.createContainer()
@@ -209,7 +217,7 @@ func (a *ArtistPageHeader) createContainer() {
container.NewVBox( container.NewVBox(
container.New(&layouts.VboxCustomPadding{ExtraPad: -10}, container.New(&layouts.VboxCustomPadding{ExtraPad: -10},
a.titleDisp, a.biographyDisp, a.similarArtists), 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 { 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: case controller.Albums:
return NewAlbumsPage("Albums", rte.Arg, *r.Controller, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager) return NewAlbumsPage("Albums", rte.Arg, *r.Controller, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager)
case controller.Artist: 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: case controller.Artists:
return NewArtistsGenresPage(false, *r.Controller, r.App.ServerManager) return NewArtistsGenresPage(false, *r.Controller, r.App.ServerManager)
case controller.Favorites: case controller.Favorites: