From 5e872807507f75d9ac684a26e9c5a59f171ecbd4 Mon Sep 17 00:00:00 2001 From: Deluan Date: Tue, 26 Oct 2021 18:46:08 -0400 Subject: [PATCH] Load playlist track genres --- model/playlist.go | 15 +++++++++++---- persistence/playlist_track_repository.go | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/model/playlist.go b/model/playlist.go index 0a941a1ac..e05556d5c 100644 --- a/model/playlist.go +++ b/model/playlist.go @@ -33,11 +33,10 @@ func (pls Playlist) IsSmartPlaylist() bool { } func (pls Playlist) MediaFiles() MediaFiles { - mfs := make(MediaFiles, len(pls.Tracks)) - for i, t := range pls.Tracks { - mfs[i] = t.MediaFile + if len(pls.Tracks) == 0 { + return nil } - return mfs + return pls.Tracks.MediaFiles() } func (pls *Playlist) RemoveTracks(idxToRemove []int) { @@ -104,6 +103,14 @@ type PlaylistTrack struct { type PlaylistTracks []PlaylistTrack +func (plt PlaylistTracks) MediaFiles() MediaFiles { + mfs := make(MediaFiles, len(plt)) + for i, t := range plt { + mfs[i] = t.MediaFile + } + return mfs +} + type PlaylistTrackRepository interface { ResourceRepository GetAll(options ...QueryOptions) (PlaylistTracks, error) diff --git a/persistence/playlist_track_repository.go b/persistence/playlist_track_repository.go index a44c81e5b..a157bc544 100644 --- a/persistence/playlist_track_repository.go +++ b/persistence/playlist_track_repository.go @@ -56,7 +56,20 @@ func (r *playlistTrackRepository) Read(id string) (interface{}, error) { } func (r *playlistTrackRepository) GetAll(options ...model.QueryOptions) (model.PlaylistTracks, error) { - return r.playlistRepo.loadTracks(r.newSelect(options...), r.playlistId) + tracks, err := r.playlistRepo.loadTracks(r.newSelect(options...), r.playlistId) + if err != nil { + return nil, err + } + mfs := tracks.MediaFiles() + err = r.loadMediaFileGenres(&mfs) + if err != nil { + log.Error(r.ctx, "Error loading genres for playlist", "playlist", r.playlist.Name, "id", r.playlist.ID, err) + return nil, err + } + for i, mf := range mfs { + tracks[i].MediaFile.Genres = mf.Genres + } + return tracks, err } func (r *playlistTrackRepository) ReadAll(options ...rest.QueryOptions) (interface{}, error) {