From e180197852cb081b31b2436d339297b0509f7f1a Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 1 Jun 2024 12:28:48 -0700 Subject: [PATCH] fix some interface assertion and nil bugs, and album page not showing now playing --- ui/browsing/albumpage.go | 4 +++- ui/browsing/nowplayingpage.go | 3 +++ ui/util/tracklistutil.go | 4 ++-- ui/widgets/playqueuelist.go | 10 +++++----- ui/widgets/tracklist.go | 16 ++++++++-------- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ui/browsing/albumpage.go b/ui/browsing/albumpage.go index ae4d634..c2e6339 100644 --- a/ui/browsing/albumpage.go +++ b/ui/browsing/albumpage.go @@ -130,7 +130,9 @@ func (a *AlbumPage) Route() controller.Route { 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.tracklist.SetNowPlaying(a.nowPlayingID) a.tracklist.IncrementPlayCount(sharedutil.MediaItemIDOrEmptyStr(lastScrobbledIfAny)) diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index 6c7401f..8f769cb 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -273,6 +273,9 @@ func (a *NowPlayingPage) onImageLoaded(img image.Image, err error) { log.Printf("error loading cover art: %v\n", err) return } + if img == nil { + return + } a.card.SetCoverImage(img) c := dominantcolor.Find(img) if c == a.background.StartColor { diff --git a/ui/util/tracklistutil.go b/ui/util/tracklistutil.go index d24e611..3f46646 100644 --- a/ui/util/tracklistutil.go +++ b/ui/util/tracklistutil.go @@ -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 { return tr.Item.Metadata().ID == id }) if idx >= 0 { - return items[idx].Track(), idx + return items[idx].Item, idx } return nil, -1 } diff --git a/ui/widgets/playqueuelist.go b/ui/widgets/playqueuelist.go index d7ac04d..a99ff4a 100644 --- a/ui/widgets/playqueuelist.go +++ b/ui/widgets/playqueuelist.go @@ -120,14 +120,14 @@ func (p *PlayQueueList) SetItems(items []mediaprovider.MediaItem) { p.Refresh() } -// Sets the currently playing track ID and updates the list rendering -func (p *PlayQueueList) SetNowPlaying(trackID string) { +// Sets the currently playing item ID and updates the list rendering +func (p *PlayQueueList) SetNowPlaying(itemID string) { prevNowPlaying := p.nowPlayingID p.tracksMutex.RLock() - trPrev, idxPrev := util.FindTrackByID(p.items, prevNowPlaying) - tr, idx := util.FindTrackByID(p.items, trackID) + trPrev, idxPrev := util.FindItemByID(p.items, prevNowPlaying) + tr, idx := util.FindItemByID(p.items, itemID) p.tracksMutex.RUnlock() - p.nowPlayingID = trackID + p.nowPlayingID = itemID if trPrev != nil { p.list.RefreshItem(idxPrev) } diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 0957799..8fe39d5 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -271,8 +271,8 @@ func (t *Tracklist) SetSorting(sorting TracklistSort) { func (t *Tracklist) SetNowPlaying(trackID string) { prevNowPlaying := t.nowPlayingID t.tracksMutex.RLock() - trPrev, idxPrev := util.FindTrackByID(t.tracks, prevNowPlaying) - tr, idx := util.FindTrackByID(t.tracks, trackID) + trPrev, idxPrev := util.FindItemByID(t.tracks, prevNowPlaying) + tr, idx := util.FindItemByID(t.tracks, trackID) t.tracksMutex.RUnlock() t.nowPlayingID = trackID 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 func (t *Tracklist) IncrementPlayCount(trackID string) { t.tracksMutex.RLock() - tr, idx := util.FindTrackByID(t.tracks, trackID) + tr, idx := util.FindItemByID(t.tracks, trackID) t.tracksMutex.RUnlock() if tr != nil { - tr.PlayCount += 1 + tr.(*mediaprovider.Track).PlayCount += 1 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) { t.tracksMutex.RLock() - tr, _ := util.FindTrackByID(t.tracks, trackID) + item, _ := util.FindItemByID(t.tracks, trackID) 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) { @@ -602,9 +602,9 @@ func (t *Tracklist) onSetFavorites(tracks []*mediaprovider.Track, fav bool, need func (t *Tracklist) onSetRating(trackID string, rating int) { // update our own track model t.tracksMutex.RLock() - tr, _ := util.FindTrackByID(t.tracks, trackID) + item, _ := util.FindItemByID(t.tracks, trackID) 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) {