From 2b57b98a4bfff6bbf423ab96612f8079731d5e73 Mon Sep 17 00:00:00 2001 From: Deluan Date: Tue, 19 Oct 2021 11:33:08 -0400 Subject: [PATCH] Fix smart playlist refreshing only after the tracks were loaded --- persistence/playlist_repository.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/persistence/playlist_repository.go b/persistence/playlist_repository.go index cb1afd9a..0de29851 100644 --- a/persistence/playlist_repository.go +++ b/persistence/playlist_repository.go @@ -106,23 +106,27 @@ func (r *playlistRepository) Put(p *model.Playlist) error { } func (r *playlistRepository) Get(id string) (*model.Playlist, error) { - return r.findBy(And{Eq{"id": id}, r.userFilter()}, false) + return r.findBy(And{Eq{"id": id}, r.userFilter()}) } func (r *playlistRepository) GetWithTracks(id string) (*model.Playlist, error) { - pls, err := r.findBy(And{Eq{"id": id}, r.userFilter()}, true) + pls, err := r.findBy(And{Eq{"id": id}, r.userFilter()}) if err != nil { return nil, err } r.refreshSmartPlaylist(pls) + if err := r.loadTracks(pls); err != nil { + log.Error(r.ctx, "Error loading playlist tracks ", "playlist", pls.Name, "id", pls.ID, err) + return nil, err + } return pls, nil } func (r *playlistRepository) FindByPath(path string) (*model.Playlist, error) { - return r.findBy(Eq{"path": path}, false) + return r.findBy(Eq{"path": path}) } -func (r *playlistRepository) findBy(sql Sqlizer, includeTracks bool) (*model.Playlist, error) { +func (r *playlistRepository) findBy(sql Sqlizer) (*model.Playlist, error) { sel := r.newSelect().Columns("*").Where(sql) var pls []dbPlaylist err := r.queryAll(sel, &pls) @@ -133,10 +137,10 @@ func (r *playlistRepository) findBy(sql Sqlizer, includeTracks bool) (*model.Pla return nil, model.ErrNotFound } - return r.toModel(pls[0], includeTracks) + return r.toModel(pls[0]) } -func (r *playlistRepository) toModel(pls dbPlaylist, includeTracks bool) (*model.Playlist, error) { +func (r *playlistRepository) toModel(pls dbPlaylist) (*model.Playlist, error) { var err error if strings.TrimSpace(pls.RawRules) != "" { r := model.SmartPlaylist{} @@ -148,9 +152,6 @@ func (r *playlistRepository) toModel(pls dbPlaylist, includeTracks bool) (*model } else { pls.Playlist.Rules = nil } - if includeTracks { - err = r.loadTracks(&pls) - } return &pls.Playlist, err } @@ -163,7 +164,7 @@ func (r *playlistRepository) GetAll(options ...model.QueryOptions) (model.Playli } playlists := make(model.Playlists, len(res)) for i, p := range res { - pls, err := r.toModel(p, false) + pls, err := r.toModel(p) if err != nil { return nil, err } @@ -286,7 +287,7 @@ func (r *playlistRepository) updateStats(playlistId string) error { return err } -func (r *playlistRepository) loadTracks(pls *dbPlaylist) error { +func (r *playlistRepository) loadTracks(pls *model.Playlist) error { tracksQuery := Select().From("playlist_tracks"). LeftJoin("annotation on ("+ "annotation.item_id = media_file_id"+