From 2c860edeb5ddaa74117f4a10b7e8363add4c813d Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 22 Oct 2021 15:14:41 -0400 Subject: [PATCH] Don't import invalid `.nsp` files --- core/playlists.go | 4 ++-- model/criteria/criteria.go | 3 +++ persistence/playlist_repository.go | 5 ++++- scanner/playlist_importer.go | 1 - 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/playlists.go b/core/playlists.go index da99f9bde..5fc1af3ad 100644 --- a/core/playlists.go +++ b/core/playlists.go @@ -38,13 +38,13 @@ func IsPlaylist(filePath string) bool { func (s *playlists) ImportFile(ctx context.Context, dir string, fname string) (*model.Playlist, error) { pls, err := s.parsePlaylist(ctx, fname, dir) if err != nil { - log.Error(ctx, "Error parsing playlist", "playlist", fname, err) + log.Error(ctx, "Error parsing playlist", "path", filepath.Join(dir, fname), err) return nil, err } log.Debug("Found playlist", "name", pls.Name, "lastUpdated", pls.UpdatedAt, "path", pls.Path, "numTracks", len(pls.Tracks)) err = s.updatePlaylist(ctx, pls) if err != nil { - log.Error(ctx, "Error updating playlist", "playlist", fname, err) + log.Error(ctx, "Error updating playlist", "path", filepath.Join(dir, fname), err) } return pls, err } diff --git a/model/criteria/criteria.go b/model/criteria/criteria.go index 5285deb39..32f355951 100644 --- a/model/criteria/criteria.go +++ b/model/criteria/criteria.go @@ -3,6 +3,7 @@ package criteria import ( "encoding/json" + "errors" "strings" "github.com/Masterminds/squirrel" @@ -71,6 +72,8 @@ func (c *Criteria) UnmarshalJSON(data []byte) error { c.Expression = Any(aux.Any) } else if len(aux.All) > 0 { c.Expression = All(aux.All) + } else { + return errors.New("invalid criteria json. missing rules (key 'all' or 'any')") } c.Sort = aux.Sort c.Order = aux.Order diff --git a/persistence/playlist_repository.go b/persistence/playlist_repository.go index 3ea122cc1..16608539b 100644 --- a/persistence/playlist_repository.go +++ b/persistence/playlist_repository.go @@ -226,7 +226,10 @@ func (r *playlistRepository) refreshSmartPlaylist(pls *model.Playlist) bool { } func (r *playlistRepository) addCriteria(sql SelectBuilder, c criteria.Criteria) SelectBuilder { - sql = sql.Where(c.ToSql()).Limit(uint64(c.Limit)).Offset(uint64(c.Offset)) + sql = sql.Where(c.ToSql()) + if c.Limit > 0 { + sql = sql.Limit(uint64(c.Limit)).Offset(uint64(c.Offset)) + } if order := c.OrderBy(); order != "" { sql = sql.OrderBy(order) } diff --git a/scanner/playlist_importer.go b/scanner/playlist_importer.go index c6f9f4b4a..e0b497fa7 100644 --- a/scanner/playlist_importer.go +++ b/scanner/playlist_importer.go @@ -39,7 +39,6 @@ func (s *playlistImporter) processPlaylists(ctx context.Context, dir string) int } pls, err := s.pls.ImportFile(ctx, dir, f.Name()) if err != nil { - log.Error(ctx, "Error parsing playlist", "playlist", f.Name(), err) continue } if pls.IsSmartPlaylist() {