fix some interface assertion and nil bugs, and album page not showing now playing
This commit is contained in:
@@ -130,7 +130,9 @@ func (a *AlbumPage) Route() controller.Route {
|
|||||||
return controller.AlbumRoute(a.albumID)
|
return controller.AlbumRoute(a.albumID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AlbumPage) OnSongChange(track, lastScrobbledIfAny *mediaprovider.Track) {
|
var _ CanShowNowPlaying = (*AlbumPage)(nil)
|
||||||
|
|
||||||
|
func (a *AlbumPage) OnSongChange(track mediaprovider.MediaItem, lastScrobbledIfAny *mediaprovider.Track) {
|
||||||
a.nowPlayingID = sharedutil.MediaItemIDOrEmptyStr(track)
|
a.nowPlayingID = sharedutil.MediaItemIDOrEmptyStr(track)
|
||||||
a.tracklist.SetNowPlaying(a.nowPlayingID)
|
a.tracklist.SetNowPlaying(a.nowPlayingID)
|
||||||
a.tracklist.IncrementPlayCount(sharedutil.MediaItemIDOrEmptyStr(lastScrobbledIfAny))
|
a.tracklist.IncrementPlayCount(sharedutil.MediaItemIDOrEmptyStr(lastScrobbledIfAny))
|
||||||
|
|||||||
@@ -273,6 +273,9 @@ func (a *NowPlayingPage) onImageLoaded(img image.Image, err error) {
|
|||||||
log.Printf("error loading cover art: %v\n", err)
|
log.Printf("error loading cover art: %v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if img == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
a.card.SetCoverImage(img)
|
a.card.SetCoverImage(img)
|
||||||
c := dominantcolor.Find(img)
|
c := dominantcolor.Find(img)
|
||||||
if c == a.background.StartColor {
|
if c == a.background.StartColor {
|
||||||
|
|||||||
@@ -78,12 +78,12 @@ func SelectItemRange(items []*TrackListModel, idx int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func FindTrackByID(items []*TrackListModel, id string) (*mediaprovider.Track, int) {
|
func FindItemByID(items []*TrackListModel, id string) (mediaprovider.MediaItem, int) {
|
||||||
idx := slices.IndexFunc(items, func(tr *TrackListModel) bool {
|
idx := slices.IndexFunc(items, func(tr *TrackListModel) bool {
|
||||||
return tr.Item.Metadata().ID == id
|
return tr.Item.Metadata().ID == id
|
||||||
})
|
})
|
||||||
if idx >= 0 {
|
if idx >= 0 {
|
||||||
return items[idx].Track(), idx
|
return items[idx].Item, idx
|
||||||
}
|
}
|
||||||
return nil, -1
|
return nil, -1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,14 +120,14 @@ func (p *PlayQueueList) SetItems(items []mediaprovider.MediaItem) {
|
|||||||
p.Refresh()
|
p.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets the currently playing track ID and updates the list rendering
|
// Sets the currently playing item ID and updates the list rendering
|
||||||
func (p *PlayQueueList) SetNowPlaying(trackID string) {
|
func (p *PlayQueueList) SetNowPlaying(itemID string) {
|
||||||
prevNowPlaying := p.nowPlayingID
|
prevNowPlaying := p.nowPlayingID
|
||||||
p.tracksMutex.RLock()
|
p.tracksMutex.RLock()
|
||||||
trPrev, idxPrev := util.FindTrackByID(p.items, prevNowPlaying)
|
trPrev, idxPrev := util.FindItemByID(p.items, prevNowPlaying)
|
||||||
tr, idx := util.FindTrackByID(p.items, trackID)
|
tr, idx := util.FindItemByID(p.items, itemID)
|
||||||
p.tracksMutex.RUnlock()
|
p.tracksMutex.RUnlock()
|
||||||
p.nowPlayingID = trackID
|
p.nowPlayingID = itemID
|
||||||
if trPrev != nil {
|
if trPrev != nil {
|
||||||
p.list.RefreshItem(idxPrev)
|
p.list.RefreshItem(idxPrev)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,8 +271,8 @@ func (t *Tracklist) SetSorting(sorting TracklistSort) {
|
|||||||
func (t *Tracklist) SetNowPlaying(trackID string) {
|
func (t *Tracklist) SetNowPlaying(trackID string) {
|
||||||
prevNowPlaying := t.nowPlayingID
|
prevNowPlaying := t.nowPlayingID
|
||||||
t.tracksMutex.RLock()
|
t.tracksMutex.RLock()
|
||||||
trPrev, idxPrev := util.FindTrackByID(t.tracks, prevNowPlaying)
|
trPrev, idxPrev := util.FindItemByID(t.tracks, prevNowPlaying)
|
||||||
tr, idx := util.FindTrackByID(t.tracks, trackID)
|
tr, idx := util.FindItemByID(t.tracks, trackID)
|
||||||
t.tracksMutex.RUnlock()
|
t.tracksMutex.RUnlock()
|
||||||
t.nowPlayingID = trackID
|
t.nowPlayingID = trackID
|
||||||
if trPrev != nil {
|
if trPrev != nil {
|
||||||
@@ -286,10 +286,10 @@ func (t *Tracklist) SetNowPlaying(trackID string) {
|
|||||||
// Increments the play count of the given track and updates the list rendering
|
// Increments the play count of the given track and updates the list rendering
|
||||||
func (t *Tracklist) IncrementPlayCount(trackID string) {
|
func (t *Tracklist) IncrementPlayCount(trackID string) {
|
||||||
t.tracksMutex.RLock()
|
t.tracksMutex.RLock()
|
||||||
tr, idx := util.FindTrackByID(t.tracks, trackID)
|
tr, idx := util.FindItemByID(t.tracks, trackID)
|
||||||
t.tracksMutex.RUnlock()
|
t.tracksMutex.RUnlock()
|
||||||
if tr != nil {
|
if tr != nil {
|
||||||
tr.PlayCount += 1
|
tr.(*mediaprovider.Track).PlayCount += 1
|
||||||
t.list.RefreshItem(idx)
|
t.list.RefreshItem(idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -581,9 +581,9 @@ func (t *Tracklist) onShowContextMenu(e *fyne.PointEvent, trackIdx int) {
|
|||||||
|
|
||||||
func (t *Tracklist) onSetFavorite(trackID string, fav bool) {
|
func (t *Tracklist) onSetFavorite(trackID string, fav bool) {
|
||||||
t.tracksMutex.RLock()
|
t.tracksMutex.RLock()
|
||||||
tr, _ := util.FindTrackByID(t.tracks, trackID)
|
item, _ := util.FindItemByID(t.tracks, trackID)
|
||||||
t.tracksMutex.RUnlock()
|
t.tracksMutex.RUnlock()
|
||||||
t.onSetFavorites([]*mediaprovider.Track{tr}, fav, false)
|
t.onSetFavorites([]*mediaprovider.Track{item.(*mediaprovider.Track)}, fav, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tracklist) onSetFavorites(tracks []*mediaprovider.Track, fav bool, needRefresh bool) {
|
func (t *Tracklist) onSetFavorites(tracks []*mediaprovider.Track, fav bool, needRefresh bool) {
|
||||||
@@ -602,9 +602,9 @@ func (t *Tracklist) onSetFavorites(tracks []*mediaprovider.Track, fav bool, need
|
|||||||
func (t *Tracklist) onSetRating(trackID string, rating int) {
|
func (t *Tracklist) onSetRating(trackID string, rating int) {
|
||||||
// update our own track model
|
// update our own track model
|
||||||
t.tracksMutex.RLock()
|
t.tracksMutex.RLock()
|
||||||
tr, _ := util.FindTrackByID(t.tracks, trackID)
|
item, _ := util.FindItemByID(t.tracks, trackID)
|
||||||
t.tracksMutex.RUnlock()
|
t.tracksMutex.RUnlock()
|
||||||
t.onSetRatings([]*mediaprovider.Track{tr}, rating, false)
|
t.onSetRatings([]*mediaprovider.Track{item.(*mediaprovider.Track)}, rating, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tracklist) onSetRatings(tracks []*mediaprovider.Track, rating int, needRefresh bool) {
|
func (t *Tracklist) onSetRatings(tracks []*mediaprovider.Track, rating int, needRefresh bool) {
|
||||||
|
|||||||
Reference in New Issue
Block a user