diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index 8f769cb..640f15d 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -6,6 +6,7 @@ import ( "image" "image/color" "log" + "net/url" "slices" "strings" "sync" @@ -113,6 +114,11 @@ func NewNowPlayingPage( a.card.OnArtistNameTapped = func(artistID string) { contr.NavigateTo(controller.ArtistRoute(artistID)) } + a.card.OnRadioURLTapped = func(urlText string) { + if u, err := url.Parse(urlText); err == nil { + fyne.CurrentApp().OpenURL(u) + } + } a.card.OnSetFavorite = func(fav bool) { a.contr.SetTrackFavorites([]string{a.nowPlayingID}, fav) } diff --git a/ui/widgets/largenowplayingcard.go b/ui/widgets/largenowplayingcard.go index e558ae4..84bdd2e 100644 --- a/ui/widgets/largenowplayingcard.go +++ b/ui/widgets/largenowplayingcard.go @@ -20,6 +20,7 @@ type LargeNowPlayingCard struct { DisableRating bool + isRadio bool trackName *widget.RichText artistName *MultiHyperlink albumName *widget.Hyperlink @@ -29,6 +30,7 @@ type LargeNowPlayingCard struct { OnArtistNameTapped func(artistID string) OnAlbumNameTapped func() + OnRadioURLTapped func(url string) OnSetRating func(rating int) OnSetFavorite func(favorite bool) } @@ -79,6 +81,12 @@ func (n *LargeNowPlayingCard) onAlbumNameTapped() { } func (n *LargeNowPlayingCard) onArtistNameTapped(artistID string) { + if n.isRadio { + if n.OnRadioURLTapped != nil { + n.OnRadioURLTapped(artistID) + } + return + } if n.OnArtistNameTapped != nil { n.OnArtistNameTapped(artistID) } @@ -119,17 +127,23 @@ func (n *LargeNowPlayingCard) Update(item mediaprovider.MediaItem) { } meta := item.Metadata() n.trackName.Segments[0].(*widget.TextSegment).Text = meta.Name - n.artistName.BuildSegments(meta.Artists, meta.ArtistIDs) n.albumName.Text = meta.Album + n.albumName.Hidden = meta.AlbumID == "" if tr, ok := item.(*mediaprovider.Track); ok { + n.artistName.BuildSegments(meta.Artists, meta.ArtistIDs) n.rating.Rating = tr.Rating n.favorite.Favorite = tr.Favorite n.cover.PlaceholderIcon = myTheme.TracksIcon - } else { - n.rating.Rating = 0 - n.favorite.Favorite = false + n.favorite.Hidden = false + n.rating.Hidden = false + n.isRadio = false + } else if rd, ok := item.(*mediaprovider.RadioStation); ok { + n.artistName.BuildSegments([]string{rd.HomePageURL}, []string{rd.HomePageURL}) + n.rating.Hidden = true + n.favorite.Hidden = true n.cover.PlaceholderIcon = myTheme.RadioIcon + n.isRadio = true } n.Refresh()