diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index ddb7365..589d2b1 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -192,6 +192,16 @@ func (p *PlaybackManager) PlayRandomSongs(genreName string) { } } +func (p *PlaybackManager) PlaySimilarSongs(id string) { + params := map[string]string{"size": "100"} + if songs, err := p.sm.Server.GetSimilarSongs2(id, params); err != nil { + log.Printf("error getting similar songs: %s", err.Error()) + } else { + p.LoadTracks(songs, false, false) + p.PlayFromBeginning() + } +} + func (p *PlaybackManager) GetPlayQueue() []*subsonic.Child { pq := make([]*subsonic.Child, len(p.playQueue)) for i, tr := range p.playQueue { diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index 2249e17..f4c6624 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -142,6 +142,10 @@ func (a *ArtistPage) playAllTracks() { } } +func (a *ArtistPage) playArtistRadio() { + go a.pm.PlaySimilarSongs(a.artistID) +} + func (a *ArtistPage) onShowAlbumPage(albumID string) { a.contr.NavigateTo(controller.AlbumRoute(albumID)) } @@ -233,6 +237,7 @@ type ArtistPageHeader struct { similarArtists *fyne.Container favoriteBtn *widgets.FavoriteButton playBtn *widget.Button + playRadioBtn *widget.Button container *fyne.Container } @@ -248,7 +253,8 @@ 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.playBtn = widget.NewButtonWithIcon("Play Discography", theme.MediaPlayIcon(), page.playAllTracks) + a.playRadioBtn = widget.NewButtonWithIcon("Play Artist Radio", res.ResShuffleInvertSvg, page.playArtistRadio) a.biographyDisp.Wrapping = fyne.TextWrapWord a.ExtendBaseWidget(a) a.createContainer() @@ -323,7 +329,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, a.playBtn))) + container.NewHBox(widgets.NewHSpace(2), a.favoriteBtn, a.playBtn, a.playRadioBtn))) } func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer {