add similar artists links to artist page

This commit is contained in:
Drew Weymouth
2023-02-01 20:54:44 -08:00
parent 9579d586ca
commit 23e6cca7ef
2 changed files with 33 additions and 16 deletions
+21 -14
View File
@@ -45,7 +45,7 @@ func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.Image
nav: nav,
}
a.ExtendBaseWidget(a)
a.header = NewArtistPageHeader()
a.header = NewArtistPageHeader(nav)
a.container = container.NewBorder(a.header, nil, nil, nil, layout.NewSpacer())
a.loadAsync()
return a
@@ -122,19 +122,21 @@ func (s *savedArtistPage) Restore() Page {
type ArtistPageHeader struct {
widget.BaseWidget
nav func(Route)
artistID string
artistImageCtr *fyne.Container
titleDisp *widget.RichText
biographyDisp *widget.RichText
similarArtists *widget.RichText
similarArtists *fyne.Container
container *fyne.Container
}
func NewArtistPageHeader() *ArtistPageHeader {
func NewArtistPageHeader(nav func(Route)) *ArtistPageHeader {
a := &ArtistPageHeader{
nav: nav,
titleDisp: widget.NewRichTextWithText(""),
biographyDisp: widget.NewRichTextWithText("Artist biography not available."),
similarArtists: widget.NewRichText(),
similarArtists: container.NewHBox(),
}
a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText,
@@ -169,17 +171,22 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) {
}
}
}
/** TODO:
if len(info.SimilarArtist) > 0 {
segments := make([]widget.RichTextSegment, 0)
segments = append(segments, &widget.TextSegment{Text: "Similar artists: "})
for sim := info.SimilarArtist {
segments = append(segments, &widget.HyperlinkSegment{
})
for i, art := range info.SimilarArtist {
if i == 0 {
a.similarArtists.Add(widget.NewLabel("Similar Artists:"))
}
if i == 4 {
break
}
h := widgets.NewCustomHyperlink()
h.NoTruncate = true
h.SetText(art.Name)
h.OnTapped = func(id string) func() {
return func() { a.nav(ArtistRoute(id)) }
}(art.ID)
a.similarArtists.Add(h)
}
*/
a.similarArtists.Refresh()
if info.LargeImageUrl != "" {
if res, err := fyne.LoadResourceFromURLString(info.LargeImageUrl); err == nil {
im, _, err := image.Decode(bytes.NewReader(res.Content()))
@@ -198,7 +205,7 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) {
func (a *ArtistPageHeader) createContainer() {
a.container = container.NewBorder(nil, nil, a.artistImageCtr, nil,
container.NewBorder(a.titleDisp, a.similarArtists, nil, nil, a.biographyDisp))
container.NewBorder(a.titleDisp, nil, nil, nil, container.NewVBox(a.biographyDisp, a.similarArtists)))
}
func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer {
+12 -2
View File
@@ -48,7 +48,8 @@ type CustomHyperlink struct {
widget.BaseWidget
h *hyperlinkWrapper
OnTapped func()
OnTapped func()
NoTruncate bool
container *fyne.Container
minSize fyne.Size
@@ -64,6 +65,7 @@ func NewCustomHyperlink() *CustomHyperlink {
}
}
c.ExtendBaseWidget(c)
c.minSize = c.h.MinSize()
c.container = container.NewHBox(c.h, layout.NewSpacer())
return c
}
@@ -71,7 +73,11 @@ func NewCustomHyperlink() *CustomHyperlink {
func (c *CustomHyperlink) SetText(text string) {
s := widget.NewLabel(text).MinSize()
c.h.SetText(text)
c.minSize = fyne.NewSize(fyne.Min(c.Size().Width, s.Width), s.Height)
if c.NoTruncate {
c.minSize = s
} else {
c.minSize = fyne.NewSize(fyne.Min(c.Size().Width, s.Width), s.Height)
}
c.Refresh()
}
@@ -84,6 +90,10 @@ func (c *CustomHyperlink) Refresh() {
c.container.Refresh()
}
func (c *CustomHyperlink) MinSize() fyne.Size {
return c.minSize
}
func (c *CustomHyperlink) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(c.container)
}