Fix #477: scroll to currently playing track when loading Now Playing page
This commit is contained in:
+2
-2
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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())
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user