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) {