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:
+19
-11
@@ -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 {
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user