add favorite button to artist page

This commit is contained in:
Drew Weymouth
2023-02-21 18:18:30 -08:00
parent 4de0f9d5db
commit 3bf8266e67
+15 -1
View File
@@ -124,6 +124,7 @@ type ArtistPageHeader struct {
titleDisp *widget.RichText titleDisp *widget.RichText
biographyDisp *widget.RichText biographyDisp *widget.RichText
similarArtists *fyne.Container similarArtists *fyne.Container
favoriteBtn *widgets.FavoriteButton
container *fyne.Container container *fyne.Container
} }
@@ -139,6 +140,7 @@ func NewArtistPageHeader(page *ArtistPage, nav func(Route)) *ArtistPageHeader {
SizeName: theme.SizeNameHeadingText, SizeName: theme.SizeNameHeadingText,
} }
a.artistImage = widgets.NewImagePlaceholder(res.ResPeopleInvertPng, 225) a.artistImage = widgets.NewImagePlaceholder(res.ResPeopleInvertPng, 225)
a.favoriteBtn = widgets.NewFavoriteButton(func() { go a.toggleFavorited() })
a.biographyDisp.Wrapping = fyne.TextWrapWord a.biographyDisp.Wrapping = fyne.TextWrapWord
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.createContainer() a.createContainer()
@@ -149,6 +151,7 @@ func (a *ArtistPageHeader) Update(artist *subsonic.ArtistID3) {
if artist == nil { if artist == nil {
return return
} }
a.favoriteBtn.IsFavorited = !artist.Starred.IsZero()
a.artistID = artist.ID a.artistID = artist.ID
a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name
a.titleDisp.Refresh() a.titleDisp.Refresh()
@@ -197,9 +200,20 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) {
} }
} }
func (a *ArtistPageHeader) toggleFavorited() {
if a.favoriteBtn.IsFavorited {
a.artistPage.sm.Server.Star(subsonic.StarParameters{ArtistIDs: []string{a.artistID}})
} else {
a.artistPage.sm.Server.Unstar(subsonic.StarParameters{ArtistIDs: []string{a.artistID}})
}
}
func (a *ArtistPageHeader) createContainer() { func (a *ArtistPageHeader) createContainer() {
a.container = container.NewBorder(nil, nil, a.artistImage, nil, a.container = container.NewBorder(nil, nil, a.artistImage, nil,
container.NewBorder(a.titleDisp, nil, nil, nil, container.NewVBox(a.biographyDisp, a.similarArtists))) container.NewVBox(
container.New(&layouts.VboxCustomPadding{ExtraPad: -10},
a.titleDisp, a.biographyDisp, a.similarArtists),
container.NewHBox(widgets.NewHSpace(2), a.favoriteBtn)))
} }
func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer { func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer {