Skip to content

Commit

Permalink
Fix smart playlist refreshing only after the tracks were loaded
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Oct 24, 2021
1 parent 1a96e9f commit 2b57b98
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions persistence/playlist_repository.go
Expand Up @@ -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)
Expand All @@ -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{}
Expand All @@ -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
}

Expand All @@ -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
}
Expand Down Expand Up @@ -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"+
Expand Down

0 comments on commit 2b57b98

Please sign in to comment.