diff --git a/ui/bottompanel.go b/ui/bottompanel.go index b9b784f..01b413c 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -24,12 +24,14 @@ type BottomPanel struct { AuxControls *widgets.AuxControls container *fyne.Container + + cfg *backend.Config } var _ fyne.Widget = (*BottomPanel)(nil) func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr *controller.Controller, cfg *backend.Config) *BottomPanel { - bp := &BottomPanel{} + bp := &BottomPanel{cfg: cfg} bp.ExtendBaseWidget(bp) 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.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() { 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 { bp.ExtendBaseWidget(bp) return widget.NewSimpleRenderer(bp.container) diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index f68c724..04eda39 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -111,7 +111,7 @@ func NewNowPlayingPage( pm.OnPlaying(doFmtStatus) pm.OnStopped(doFmtStatus) - a.card = widgets.NewLargeNowPlayingCard(cfg) + a.card = widgets.NewLargeNowPlayingCard() a.card.OnAlbumNameTapped = func() { contr.NavigateTo(controller.AlbumRoute(a.nowPlaying.Metadata().AlbumID)) } @@ -129,6 +129,7 @@ func NewNowPlayingPage( a.card.OnSetRating = func(rating int) { a.contr.SetTrackRatings([]string{a.nowPlayingID}, rating) } + a.card.ShowAlbumYear = cfg.AlbumsPage.ShowYears a.queueList = widgets.NewPlayQueueList(a.im, false) a.relatedList = widgets.NewPlayQueueList(a.im, true) @@ -530,6 +531,7 @@ func (a *NowPlayingPage) Refresh() { } a.BaseWidget.Refresh() + a.card.ShowAlbumYear = a.cfg.AlbumsPage.ShowYears a.card.Update(a.nowPlaying) } diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 18ed1cd..862be5b 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -87,8 +87,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, m.Controller.CurPageFunc = m.BrowsingPane.CurrentPage m.Controller.RefreshPageFunc = func() { m.BrowsingPane.RefreshPage() - - m.BottomPanel.onSongChange(app.PlaybackManager.NowPlaying(), nil) + m.BottomPanel.Refresh() } m.Controller.SelectAllPageFunc = m.BrowsingPane.SelectAll m.Controller.UnselectAllPageFunc = m.BrowsingPane.UnselectAll diff --git a/ui/widgets/largenowplayingcard.go b/ui/widgets/largenowplayingcard.go index ebe1177..8c5c4d6 100644 --- a/ui/widgets/largenowplayingcard.go +++ b/ui/widgets/largenowplayingcard.go @@ -10,7 +10,6 @@ import ( "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" - "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend/mediaprovider" myTheme "github.com/dweymouth/supersonic/ui/theme" "github.com/dweymouth/supersonic/ui/util" @@ -22,6 +21,7 @@ type LargeNowPlayingCard struct { CaptionedImage DisableRating bool + ShowAlbumYear bool isRadio bool trackName *widget.RichText @@ -31,7 +31,8 @@ type LargeNowPlayingCard struct { favorite *FavoriteIcon ratingFavoriteContainer *fyne.Container cover *ImagePlaceholder - cfg *backend.Config + + albumYear string OnArtistNameTapped func(artistID string) OnAlbumNameTapped func() @@ -40,7 +41,7 @@ type LargeNowPlayingCard struct { OnSetFavorite func(favorite bool) } -func NewLargeNowPlayingCard(cfg *backend.Config) *LargeNowPlayingCard { +func NewLargeNowPlayingCard() *LargeNowPlayingCard { n := &LargeNowPlayingCard{ trackName: widget.NewRichTextWithText(""), artistName: NewMultiHyperlink(), @@ -48,7 +49,6 @@ func NewLargeNowPlayingCard(cfg *backend.Config) *LargeNowPlayingCard { rating: NewStarRating(), favorite: NewFavoriteIcon(), cover: NewImagePlaceholder(myTheme.TracksIcon, 300), - cfg: cfg, } n.ExtendBaseWidget(n) 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.ratingFavoriteContainer.Hidden = false n.isRadio = false - if y := tr.Year; y != 0 && n.cfg.AlbumsPage.ShowYears { - n.albumName.Suffix = strconv.Itoa(tr.Year) - } else { - n.albumName.Suffix = "" - } + n.albumYear = strconv.Itoa(tr.Year) } else if rd, ok := item.(*mediaprovider.RadioStation); ok { n.artistName.BuildSegments([]string{rd.HomePageURL}, []string{rd.HomePageURL}) n.ratingFavoriteContainer.Hidden = true n.cover.PlaceholderIcon = myTheme.RadioIcon n.isRadio = true - n.albumName.Suffix = "" + n.albumYear = "" } n.Refresh() @@ -175,5 +171,10 @@ func (n *LargeNowPlayingCard) Refresh() { } else { n.rating.Enable() } + if n.ShowAlbumYear { + n.albumName.Suffix = n.albumYear + } else { + n.albumName.Suffix = "" + } n.BaseWidget.Refresh() } diff --git a/ui/widgets/nowplayingcard.go b/ui/widgets/nowplayingcard.go index 2ece9e2..3bc0689 100644 --- a/ui/widgets/nowplayingcard.go +++ b/ui/widgets/nowplayingcard.go @@ -6,7 +6,6 @@ import ( "fyne.io/fyne/v2/lang" - "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend/mediaprovider" myTheme "github.com/dweymouth/supersonic/ui/theme" "github.com/dweymouth/supersonic/ui/util" @@ -25,6 +24,7 @@ type NowPlayingCard struct { widget.BaseWidget DisableRating bool + ShowAlbumYear bool trackName *OptionHyperlink artistName *MultiHyperlink @@ -32,7 +32,8 @@ type NowPlayingCard struct { cover *ImagePlaceholder menu *widget.PopUpMenu ratingMenu *fyne.MenuItem - cfg *backend.Config + + albumYear string OnTrackNameTapped func() OnArtistNameTapped func(artistID string) @@ -45,12 +46,11 @@ type NowPlayingCard struct { OnShare func() } -func NewNowPlayingCard(cfg *backend.Config) *NowPlayingCard { +func NewNowPlayingCard() *NowPlayingCard { n := &NowPlayingCard{ trackName: NewOptionHyperlink(), artistName: NewMultiHyperlink(), albumName: NewMultiHyperlink(), - cfg: cfg, } n.ExtendBaseWidget(n) n.cover = NewImagePlaceholder(myTheme.TracksIcon, 85) @@ -143,7 +143,7 @@ func (n *NowPlayingCard) Update(track mediaprovider.MediaItem) { n.trackName.SetTextAndToolTip("") n.artistName.BuildSegments([]string{}, []string{}) n.albumName.BuildSegments([]string{}, []string{}) - n.albumName.Suffix = "" + n.albumYear = "" n.cover.Hidden = true } else { n.cover.Hidden = false @@ -151,11 +151,7 @@ func (n *NowPlayingCard) Update(track mediaprovider.MediaItem) { if tr, ok := track.(*mediaprovider.Track); ok { n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs) n.albumName.BuildSegments([]string{tr.Album}, []string{tr.AlbumID}) - if y := tr.Year; y != 0 && n.cfg.AlbumsPage.ShowYears { - n.albumName.Suffix = strconv.Itoa(tr.Year) - } else { - n.albumName.Suffix = "" - } + n.albumYear = strconv.Itoa(tr.Year) n.cover.PlaceholderIcon = myTheme.TracksIcon } else { n.artistName.BuildSegments([]string{}, []string{}) @@ -175,6 +171,15 @@ func (n *NowPlayingCard) SetImage(cover image.Image) { 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) { if n.menu == nil { n.ratingMenu = util.NewRatingSubmenu(n.onSetRating)