From 72de61568ab83baee66609cfb5e1154769038c84 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 7 Sep 2024 08:17:19 -0700 Subject: [PATCH] Fix #477: scroll to currently playing track when loading Now Playing page --- ui/bottompanel.go | 4 ++-- ui/browsing/nowplayingpage.go | 24 +++++++++++++++--------- ui/controller/routes.go | 4 ++-- ui/mainwindow.go | 2 +- ui/widgets/playqueuelist.go | 4 +--- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/ui/bottompanel.go b/ui/bottompanel.go index 60957ba..383d013 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -50,7 +50,7 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr bp.NowPlaying = widgets.NewNowPlayingCard() bp.NowPlaying.OnCoverTapped = func() { - contr.NavigateTo(controller.NowPlayingRoute("")) + contr.NavigateTo(controller.NowPlayingRoute()) } bp.NowPlaying.OnSetFavorite = func(fav bool) { if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { @@ -76,7 +76,7 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr contr.NavigateTo(controller.ArtistRoute(artistID)) } bp.NowPlaying.OnTrackNameTapped = func() { - contr.NavigateTo(controller.NowPlayingRoute(pm.NowPlaying().Metadata().ID)) + contr.NavigateTo(controller.NowPlayingRoute()) } bp.NowPlaying.OnShowTrackInfo = func() { if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index e785a64..484c8c8 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -39,14 +39,15 @@ type NowPlayingPage struct { nowPlayingPageState // volatile state - nowPlaying mediaprovider.MediaItem - nowPlayingID string - curLyricsID string // id of track currently shown in lyrics - curRelatedID string // id of track currrently used to populate related list - totalTime float64 - lastPlayPos float64 - queue []mediaprovider.MediaItem - related []*mediaprovider.Track + nowPlaying mediaprovider.MediaItem + nowPlayingID string + curLyricsID string // id of track currently shown in lyrics + curRelatedID string // id of track currrently used to populate related list + totalTime float64 + lastPlayPos float64 + queue []mediaprovider.MediaItem + related []*mediaprovider.Track + alreadyLoaded bool lyricLock sync.Mutex relatedLock sync.Mutex @@ -241,13 +242,14 @@ func (a *NowPlayingPage) Save() SavedPage { if a.imageLoadCancel != nil { a.imageLoadCancel() } + a.alreadyLoaded = false nps := a.nowPlayingPageState a.pool.Release(util.WidgetTypeNowPlayingPage, a) return &nps } func (a *NowPlayingPage) Route() controller.Route { - return controller.NowPlayingRoute("") + return controller.NowPlayingRoute() } var _ Scrollable = (*NowPlayingPage)(nil) @@ -271,6 +273,10 @@ func (a *NowPlayingPage) OnSongChange(song mediaprovider.MediaItem, lastScrobble } a.nowPlayingID = sharedutil.MediaItemIDOrEmptyStr(song) a.queueList.SetNowPlaying(a.nowPlayingID) + if !a.alreadyLoaded { + a.queueList.ScrollToNowPlaying() + a.alreadyLoaded = true + } a.relatedList.SetNowPlaying(a.nowPlayingID) a.card.Update(song) diff --git a/ui/controller/routes.go b/ui/controller/routes.go index e3e62f6..ad297c5 100644 --- a/ui/controller/routes.go +++ b/ui/controller/routes.go @@ -97,6 +97,6 @@ func RadiosRoute() Route { return Route{Page: Radios} } -func NowPlayingRoute(highlightedTrackID string) Route { - return Route{Page: NowPlaying, Arg: highlightedTrackID} +func NowPlayingRoute() Route { + return Route{Page: NowPlaying} } diff --git a/ui/mainwindow.go b/ui/mainwindow.go index bb33ada..0d24089 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -296,7 +296,7 @@ func (m *MainWindow) ShowWhatsNewDialog() { func (m *MainWindow) addNavigationButtons() { m.BrowsingPane.AddNavigationButton(theme.NowPlayingIcon, controller.NowPlaying, func() { - m.Router.NavigateTo(controller.NowPlayingRoute("")) + m.Router.NavigateTo(controller.NowPlayingRoute()) }) m.BrowsingPane.AddNavigationButton(theme.FavoriteIcon, controller.Favorites, func() { m.Router.NavigateTo(controller.FavoritesRoute()) diff --git a/ui/widgets/playqueuelist.go b/ui/widgets/playqueuelist.go index 4571b44..32a3f9e 100644 --- a/ui/widgets/playqueuelist.go +++ b/ui/widgets/playqueuelist.go @@ -183,9 +183,7 @@ func (p *PlayQueueList) ScrollToNowPlaying() { idx := slices.IndexFunc(p.items, func(item *util.TrackListModel) bool { return item.Item.Metadata().ID == p.nowPlayingID }) - if idx > 0 { - p.list.ScrollTo(idx) - } + p.list.ScrollTo(idx) } func (p *PlayQueueList) Refresh() {