mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-18 21:07:44 +03:00
Remove duplication for loading tracks
This commit is contained in:
parent
5dce499d6d
commit
526b6597c8
@ -116,10 +116,12 @@ func (r *playlistRepository) GetWithTracks(id string) (*model.Playlist, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
r.refreshSmartPlaylist(pls)
|
r.refreshSmartPlaylist(pls)
|
||||||
if err := r.loadTracks(pls); err != nil {
|
tracks, err := r.loadTracks(Select().From("playlist_tracks"), id)
|
||||||
|
if err != nil {
|
||||||
log.Error(r.ctx, "Error loading playlist tracks ", "playlist", pls.Name, "id", pls.ID, err)
|
log.Error(r.ctx, "Error loading playlist tracks ", "playlist", pls.Name, "id", pls.ID, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
pls.Tracks = tracks
|
||||||
return pls, nil
|
return pls, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,26 +313,21 @@ func (r *playlistRepository) RefreshStatus(playlistId string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *playlistRepository) loadTracks(pls *model.Playlist) error {
|
func (r *playlistRepository) loadTracks(sel SelectBuilder, id string) (model.PlaylistTracks, error) {
|
||||||
tracksQuery := Select().From("playlist_tracks").
|
tracksQuery := sel.
|
||||||
LeftJoin("annotation on ("+
|
Columns("starred", "starred_at", "play_count", "play_date", "rating", "f.*", "playlist_tracks.*").
|
||||||
"annotation.item_id = media_file_id"+
|
LeftJoin("annotation on (" +
|
||||||
" AND annotation.item_type = 'media_file'"+
|
"annotation.item_id = media_file_id" +
|
||||||
" AND annotation.user_id = '"+userId(r.ctx)+"')").
|
" AND annotation.item_type = 'media_file'" +
|
||||||
Columns("starred", "starred_at", "play_count", "play_date", "rating", "f.*",
|
" AND annotation.user_id = '" + userId(r.ctx) + "')").
|
||||||
"f.id as media_file_id", "playlist_tracks.id as id").
|
|
||||||
Join("media_file f on f.id = media_file_id").
|
Join("media_file f on f.id = media_file_id").
|
||||||
Where(Eq{"playlist_id": pls.ID}).OrderBy("playlist_tracks.id")
|
Where(Eq{"playlist_id": id}).OrderBy("playlist_tracks.id")
|
||||||
err := r.queryAll(tracksQuery, &pls.Tracks)
|
var tracks model.PlaylistTracks
|
||||||
if err != nil {
|
err := r.queryAll(tracksQuery, &tracks)
|
||||||
log.Error(r.ctx, "Error loading playlist tracks", "playlist", pls.Name, "id", pls.ID, err)
|
for i, t := range tracks {
|
||||||
|
tracks[i].MediaFile.ID = t.MediaFileID
|
||||||
}
|
}
|
||||||
// Fix Track attributes
|
return tracks, err
|
||||||
for i, t := range pls.Tracks {
|
|
||||||
pls.Tracks[i].MediaFile.ID = t.MediaFileID
|
|
||||||
pls.Tracks[i].PlaylistID = pls.ID
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *playlistRepository) Count(options ...rest.QueryOptions) (int64, error) {
|
func (r *playlistRepository) Count(options ...rest.QueryOptions) (int64, error) {
|
||||||
|
@ -56,17 +56,7 @@ func (r *playlistTrackRepository) Read(id string) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *playlistTrackRepository) GetAll(options ...model.QueryOptions) (model.PlaylistTracks, error) {
|
func (r *playlistTrackRepository) GetAll(options ...model.QueryOptions) (model.PlaylistTracks, error) {
|
||||||
sel := r.newSelect(options...).
|
return r.playlistRepo.loadTracks(r.newSelect(options...), r.playlistId)
|
||||||
LeftJoin("annotation on ("+
|
|
||||||
"annotation.item_id = media_file_id"+
|
|
||||||
" AND annotation.item_type = 'media_file'"+
|
|
||||||
" AND annotation.user_id = '"+userId(r.ctx)+"')").
|
|
||||||
Columns("starred", "starred_at", "play_count", "play_date", "rating", "f.*", "playlist_tracks.*").
|
|
||||||
Join("media_file f on f.id = media_file_id").
|
|
||||||
Where(Eq{"playlist_id": r.playlistId})
|
|
||||||
res := model.PlaylistTracks{}
|
|
||||||
err := r.queryAll(sel, &res)
|
|
||||||
return res, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *playlistTrackRepository) ReadAll(options ...rest.QueryOptions) (interface{}, error) {
|
func (r *playlistTrackRepository) ReadAll(options ...rest.QueryOptions) (interface{}, error) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user