minor refactor: use Refresh and widget property to toggle showing year

This commit is contained in:
Drew Weymouth
2025-11-26 11:15:25 -08:00
parent 6b8feff25b
commit 565d2d99a9
5 changed files with 40 additions and 25 deletions
+10 -2
View File
@@ -24,12 +24,14 @@ type BottomPanel struct {
AuxControls *widgets.AuxControls AuxControls *widgets.AuxControls
container *fyne.Container container *fyne.Container
cfg *backend.Config
} }
var _ fyne.Widget = (*BottomPanel)(nil) var _ fyne.Widget = (*BottomPanel)(nil)
func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr *controller.Controller, cfg *backend.Config) *BottomPanel { func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr *controller.Controller, cfg *backend.Config) *BottomPanel {
bp := &BottomPanel{} bp := &BottomPanel{cfg: cfg}
bp.ExtendBaseWidget(bp) bp.ExtendBaseWidget(bp)
pm.OnSongChange(bp.onSongChange) pm.OnSongChange(bp.onSongChange)
@@ -46,7 +48,8 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr
pm.OnPlaying(util.FyneDoFunc(func() { bp.Controls.SetPlaying(true) })) pm.OnPlaying(util.FyneDoFunc(func() { bp.Controls.SetPlaying(true) }))
pm.OnStopped(util.FyneDoFunc(func() { bp.Controls.SetPlaying(false) })) pm.OnStopped(util.FyneDoFunc(func() { bp.Controls.SetPlaying(false) }))
bp.NowPlaying = widgets.NewNowPlayingCard(cfg) bp.NowPlaying = widgets.NewNowPlayingCard()
bp.NowPlaying.ShowAlbumYear = cfg.AlbumsPage.ShowYears
bp.NowPlaying.OnCoverTapped = func() { bp.NowPlaying.OnCoverTapped = func() {
contr.NavigateTo(controller.NowPlayingRoute()) contr.NavigateTo(controller.NowPlayingRoute())
} }
@@ -146,6 +149,11 @@ func (bp *BottomPanel) updateWaveformImg(img *backend.WaveformImage) {
}) })
} }
func (bp *BottomPanel) Refresh() {
bp.NowPlaying.ShowAlbumYear = bp.cfg.AlbumsPage.ShowYears
bp.BaseWidget.Refresh()
}
func (bp *BottomPanel) CreateRenderer() fyne.WidgetRenderer { func (bp *BottomPanel) CreateRenderer() fyne.WidgetRenderer {
bp.ExtendBaseWidget(bp) bp.ExtendBaseWidget(bp)
return widget.NewSimpleRenderer(bp.container) return widget.NewSimpleRenderer(bp.container)
+3 -1
View File
@@ -111,7 +111,7 @@ func NewNowPlayingPage(
pm.OnPlaying(doFmtStatus) pm.OnPlaying(doFmtStatus)
pm.OnStopped(doFmtStatus) pm.OnStopped(doFmtStatus)
a.card = widgets.NewLargeNowPlayingCard(cfg) a.card = widgets.NewLargeNowPlayingCard()
a.card.OnAlbumNameTapped = func() { a.card.OnAlbumNameTapped = func() {
contr.NavigateTo(controller.AlbumRoute(a.nowPlaying.Metadata().AlbumID)) contr.NavigateTo(controller.AlbumRoute(a.nowPlaying.Metadata().AlbumID))
} }
@@ -129,6 +129,7 @@ func NewNowPlayingPage(
a.card.OnSetRating = func(rating int) { a.card.OnSetRating = func(rating int) {
a.contr.SetTrackRatings([]string{a.nowPlayingID}, rating) a.contr.SetTrackRatings([]string{a.nowPlayingID}, rating)
} }
a.card.ShowAlbumYear = cfg.AlbumsPage.ShowYears
a.queueList = widgets.NewPlayQueueList(a.im, false) a.queueList = widgets.NewPlayQueueList(a.im, false)
a.relatedList = widgets.NewPlayQueueList(a.im, true) a.relatedList = widgets.NewPlayQueueList(a.im, true)
@@ -530,6 +531,7 @@ func (a *NowPlayingPage) Refresh() {
} }
a.BaseWidget.Refresh() a.BaseWidget.Refresh()
a.card.ShowAlbumYear = a.cfg.AlbumsPage.ShowYears
a.card.Update(a.nowPlaying) a.card.Update(a.nowPlaying)
} }
+1 -2
View File
@@ -87,8 +87,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
m.Controller.CurPageFunc = m.BrowsingPane.CurrentPage m.Controller.CurPageFunc = m.BrowsingPane.CurrentPage
m.Controller.RefreshPageFunc = func() { m.Controller.RefreshPageFunc = func() {
m.BrowsingPane.RefreshPage() m.BrowsingPane.RefreshPage()
m.BottomPanel.Refresh()
m.BottomPanel.onSongChange(app.PlaybackManager.NowPlaying(), nil)
} }
m.Controller.SelectAllPageFunc = m.BrowsingPane.SelectAll m.Controller.SelectAllPageFunc = m.BrowsingPane.SelectAll
m.Controller.UnselectAllPageFunc = m.BrowsingPane.UnselectAll m.Controller.UnselectAllPageFunc = m.BrowsingPane.UnselectAll
+11 -10
View File
@@ -10,7 +10,6 @@ import (
"fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/backend/mediaprovider"
myTheme "github.com/dweymouth/supersonic/ui/theme" myTheme "github.com/dweymouth/supersonic/ui/theme"
"github.com/dweymouth/supersonic/ui/util" "github.com/dweymouth/supersonic/ui/util"
@@ -22,6 +21,7 @@ type LargeNowPlayingCard struct {
CaptionedImage CaptionedImage
DisableRating bool DisableRating bool
ShowAlbumYear bool
isRadio bool isRadio bool
trackName *widget.RichText trackName *widget.RichText
@@ -31,7 +31,8 @@ type LargeNowPlayingCard struct {
favorite *FavoriteIcon favorite *FavoriteIcon
ratingFavoriteContainer *fyne.Container ratingFavoriteContainer *fyne.Container
cover *ImagePlaceholder cover *ImagePlaceholder
cfg *backend.Config
albumYear string
OnArtistNameTapped func(artistID string) OnArtistNameTapped func(artistID string)
OnAlbumNameTapped func() OnAlbumNameTapped func()
@@ -40,7 +41,7 @@ type LargeNowPlayingCard struct {
OnSetFavorite func(favorite bool) OnSetFavorite func(favorite bool)
} }
func NewLargeNowPlayingCard(cfg *backend.Config) *LargeNowPlayingCard { func NewLargeNowPlayingCard() *LargeNowPlayingCard {
n := &LargeNowPlayingCard{ n := &LargeNowPlayingCard{
trackName: widget.NewRichTextWithText(""), trackName: widget.NewRichTextWithText(""),
artistName: NewMultiHyperlink(), artistName: NewMultiHyperlink(),
@@ -48,7 +49,6 @@ func NewLargeNowPlayingCard(cfg *backend.Config) *LargeNowPlayingCard {
rating: NewStarRating(), rating: NewStarRating(),
favorite: NewFavoriteIcon(), favorite: NewFavoriteIcon(),
cover: NewImagePlaceholder(myTheme.TracksIcon, 300), cover: NewImagePlaceholder(myTheme.TracksIcon, 300),
cfg: cfg,
} }
n.ExtendBaseWidget(n) n.ExtendBaseWidget(n)
n.rating.StarSize = theme.IconInlineSize() + theme.InnerPadding()/2 n.rating.StarSize = theme.IconInlineSize() + theme.InnerPadding()/2
@@ -149,17 +149,13 @@ func (n *LargeNowPlayingCard) Update(item mediaprovider.MediaItem) {
n.cover.PlaceholderIcon = myTheme.TracksIcon n.cover.PlaceholderIcon = myTheme.TracksIcon
n.ratingFavoriteContainer.Hidden = false n.ratingFavoriteContainer.Hidden = false
n.isRadio = false n.isRadio = false
if y := tr.Year; y != 0 && n.cfg.AlbumsPage.ShowYears { n.albumYear = strconv.Itoa(tr.Year)
n.albumName.Suffix = strconv.Itoa(tr.Year)
} else {
n.albumName.Suffix = ""
}
} else if rd, ok := item.(*mediaprovider.RadioStation); ok { } else if rd, ok := item.(*mediaprovider.RadioStation); ok {
n.artistName.BuildSegments([]string{rd.HomePageURL}, []string{rd.HomePageURL}) n.artistName.BuildSegments([]string{rd.HomePageURL}, []string{rd.HomePageURL})
n.ratingFavoriteContainer.Hidden = true n.ratingFavoriteContainer.Hidden = true
n.cover.PlaceholderIcon = myTheme.RadioIcon n.cover.PlaceholderIcon = myTheme.RadioIcon
n.isRadio = true n.isRadio = true
n.albumName.Suffix = "" n.albumYear = ""
} }
n.Refresh() n.Refresh()
@@ -175,5 +171,10 @@ func (n *LargeNowPlayingCard) Refresh() {
} else { } else {
n.rating.Enable() n.rating.Enable()
} }
if n.ShowAlbumYear {
n.albumName.Suffix = n.albumYear
} else {
n.albumName.Suffix = ""
}
n.BaseWidget.Refresh() n.BaseWidget.Refresh()
} }
+15 -10
View File
@@ -6,7 +6,6 @@ import (
"fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/lang"
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/backend/mediaprovider"
myTheme "github.com/dweymouth/supersonic/ui/theme" myTheme "github.com/dweymouth/supersonic/ui/theme"
"github.com/dweymouth/supersonic/ui/util" "github.com/dweymouth/supersonic/ui/util"
@@ -25,6 +24,7 @@ type NowPlayingCard struct {
widget.BaseWidget widget.BaseWidget
DisableRating bool DisableRating bool
ShowAlbumYear bool
trackName *OptionHyperlink trackName *OptionHyperlink
artistName *MultiHyperlink artistName *MultiHyperlink
@@ -32,7 +32,8 @@ type NowPlayingCard struct {
cover *ImagePlaceholder cover *ImagePlaceholder
menu *widget.PopUpMenu menu *widget.PopUpMenu
ratingMenu *fyne.MenuItem ratingMenu *fyne.MenuItem
cfg *backend.Config
albumYear string
OnTrackNameTapped func() OnTrackNameTapped func()
OnArtistNameTapped func(artistID string) OnArtistNameTapped func(artistID string)
@@ -45,12 +46,11 @@ type NowPlayingCard struct {
OnShare func() OnShare func()
} }
func NewNowPlayingCard(cfg *backend.Config) *NowPlayingCard { func NewNowPlayingCard() *NowPlayingCard {
n := &NowPlayingCard{ n := &NowPlayingCard{
trackName: NewOptionHyperlink(), trackName: NewOptionHyperlink(),
artistName: NewMultiHyperlink(), artistName: NewMultiHyperlink(),
albumName: NewMultiHyperlink(), albumName: NewMultiHyperlink(),
cfg: cfg,
} }
n.ExtendBaseWidget(n) n.ExtendBaseWidget(n)
n.cover = NewImagePlaceholder(myTheme.TracksIcon, 85) n.cover = NewImagePlaceholder(myTheme.TracksIcon, 85)
@@ -143,7 +143,7 @@ func (n *NowPlayingCard) Update(track mediaprovider.MediaItem) {
n.trackName.SetTextAndToolTip("") n.trackName.SetTextAndToolTip("")
n.artistName.BuildSegments([]string{}, []string{}) n.artistName.BuildSegments([]string{}, []string{})
n.albumName.BuildSegments([]string{}, []string{}) n.albumName.BuildSegments([]string{}, []string{})
n.albumName.Suffix = "" n.albumYear = ""
n.cover.Hidden = true n.cover.Hidden = true
} else { } else {
n.cover.Hidden = false n.cover.Hidden = false
@@ -151,11 +151,7 @@ func (n *NowPlayingCard) Update(track mediaprovider.MediaItem) {
if tr, ok := track.(*mediaprovider.Track); ok { if tr, ok := track.(*mediaprovider.Track); ok {
n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs) n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs)
n.albumName.BuildSegments([]string{tr.Album}, []string{tr.AlbumID}) n.albumName.BuildSegments([]string{tr.Album}, []string{tr.AlbumID})
if y := tr.Year; y != 0 && n.cfg.AlbumsPage.ShowYears { n.albumYear = strconv.Itoa(tr.Year)
n.albumName.Suffix = strconv.Itoa(tr.Year)
} else {
n.albumName.Suffix = ""
}
n.cover.PlaceholderIcon = myTheme.TracksIcon n.cover.PlaceholderIcon = myTheme.TracksIcon
} else { } else {
n.artistName.BuildSegments([]string{}, []string{}) n.artistName.BuildSegments([]string{}, []string{})
@@ -175,6 +171,15 @@ func (n *NowPlayingCard) SetImage(cover image.Image) {
n.cover.SetImage(cover, true) n.cover.SetImage(cover, true)
} }
func (n *NowPlayingCard) Refresh() {
if n.ShowAlbumYear {
n.albumName.Suffix = n.albumYear
} else {
n.albumName.Suffix = ""
}
n.BaseWidget.Refresh()
}
func (n *NowPlayingCard) showMenu(btnPos fyne.Position) { func (n *NowPlayingCard) showMenu(btnPos fyne.Position) {
if n.menu == nil { if n.menu == nil {
n.ratingMenu = util.NewRatingSubmenu(n.onSetRating) n.ratingMenu = util.NewRatingSubmenu(n.onSetRating)