Fix #477: scroll to currently playing track when loading Now Playing page

This commit is contained in:
Drew Weymouth
2024-09-07 08:17:19 -07:00
parent d19ce0ccad
commit 72de61568a
5 changed files with 21 additions and 17 deletions
+2 -2
View File
@@ -50,7 +50,7 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr
bp.NowPlaying = widgets.NewNowPlayingCard() bp.NowPlaying = widgets.NewNowPlayingCard()
bp.NowPlaying.OnCoverTapped = func() { bp.NowPlaying.OnCoverTapped = func() {
contr.NavigateTo(controller.NowPlayingRoute("")) contr.NavigateTo(controller.NowPlayingRoute())
} }
bp.NowPlaying.OnSetFavorite = func(fav bool) { bp.NowPlaying.OnSetFavorite = func(fav bool) {
if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { 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)) contr.NavigateTo(controller.ArtistRoute(artistID))
} }
bp.NowPlaying.OnTrackNameTapped = func() { bp.NowPlaying.OnTrackNameTapped = func() {
contr.NavigateTo(controller.NowPlayingRoute(pm.NowPlaying().Metadata().ID)) contr.NavigateTo(controller.NowPlayingRoute())
} }
bp.NowPlaying.OnShowTrackInfo = func() { bp.NowPlaying.OnShowTrackInfo = func() {
if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok { if tr, ok := pm.NowPlaying().(*mediaprovider.Track); ok {
+15 -9
View File
@@ -39,14 +39,15 @@ type NowPlayingPage struct {
nowPlayingPageState nowPlayingPageState
// volatile state // volatile state
nowPlaying mediaprovider.MediaItem nowPlaying mediaprovider.MediaItem
nowPlayingID string nowPlayingID string
curLyricsID string // id of track currently shown in lyrics curLyricsID string // id of track currently shown in lyrics
curRelatedID string // id of track currrently used to populate related list curRelatedID string // id of track currrently used to populate related list
totalTime float64 totalTime float64
lastPlayPos float64 lastPlayPos float64
queue []mediaprovider.MediaItem queue []mediaprovider.MediaItem
related []*mediaprovider.Track related []*mediaprovider.Track
alreadyLoaded bool
lyricLock sync.Mutex lyricLock sync.Mutex
relatedLock sync.Mutex relatedLock sync.Mutex
@@ -241,13 +242,14 @@ func (a *NowPlayingPage) Save() SavedPage {
if a.imageLoadCancel != nil { if a.imageLoadCancel != nil {
a.imageLoadCancel() a.imageLoadCancel()
} }
a.alreadyLoaded = false
nps := a.nowPlayingPageState nps := a.nowPlayingPageState
a.pool.Release(util.WidgetTypeNowPlayingPage, a) a.pool.Release(util.WidgetTypeNowPlayingPage, a)
return &nps return &nps
} }
func (a *NowPlayingPage) Route() controller.Route { func (a *NowPlayingPage) Route() controller.Route {
return controller.NowPlayingRoute("") return controller.NowPlayingRoute()
} }
var _ Scrollable = (*NowPlayingPage)(nil) var _ Scrollable = (*NowPlayingPage)(nil)
@@ -271,6 +273,10 @@ func (a *NowPlayingPage) OnSongChange(song mediaprovider.MediaItem, lastScrobble
} }
a.nowPlayingID = sharedutil.MediaItemIDOrEmptyStr(song) a.nowPlayingID = sharedutil.MediaItemIDOrEmptyStr(song)
a.queueList.SetNowPlaying(a.nowPlayingID) a.queueList.SetNowPlaying(a.nowPlayingID)
if !a.alreadyLoaded {
a.queueList.ScrollToNowPlaying()
a.alreadyLoaded = true
}
a.relatedList.SetNowPlaying(a.nowPlayingID) a.relatedList.SetNowPlaying(a.nowPlayingID)
a.card.Update(song) a.card.Update(song)
+2 -2
View File
@@ -97,6 +97,6 @@ func RadiosRoute() Route {
return Route{Page: Radios} return Route{Page: Radios}
} }
func NowPlayingRoute(highlightedTrackID string) Route { func NowPlayingRoute() Route {
return Route{Page: NowPlaying, Arg: highlightedTrackID} return Route{Page: NowPlaying}
} }
+1 -1
View File
@@ -296,7 +296,7 @@ func (m *MainWindow) ShowWhatsNewDialog() {
func (m *MainWindow) addNavigationButtons() { func (m *MainWindow) addNavigationButtons() {
m.BrowsingPane.AddNavigationButton(theme.NowPlayingIcon, controller.NowPlaying, func() { 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.BrowsingPane.AddNavigationButton(theme.FavoriteIcon, controller.Favorites, func() {
m.Router.NavigateTo(controller.FavoritesRoute()) m.Router.NavigateTo(controller.FavoritesRoute())
+1 -3
View File
@@ -183,9 +183,7 @@ func (p *PlayQueueList) ScrollToNowPlaying() {
idx := slices.IndexFunc(p.items, func(item *util.TrackListModel) bool { idx := slices.IndexFunc(p.items, func(item *util.TrackListModel) bool {
return item.Item.Metadata().ID == p.nowPlayingID return item.Item.Metadata().ID == p.nowPlayingID
}) })
if idx > 0 { p.list.ScrollTo(idx)
p.list.ScrollTo(idx)
}
} }
func (p *PlayQueueList) Refresh() { func (p *PlayQueueList) Refresh() {