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.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 {
+15 -9
View File
@@ -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)
+2 -2
View File
@@ -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}
}
+1 -1
View File
@@ -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())
+1 -3
View File
@@ -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() {