Fix playlist cannot be empty via Subsonic API

This commit is contained in:
Deluan 2021-11-05 10:23:45 -04:00
parent 5994c31f4c
commit 0d9dcebf32
4 changed files with 22 additions and 3 deletions

View File

@ -227,6 +227,12 @@ func (s *playlists) Update(ctx context.Context, playlistId string,
if public != nil {
pls.Public = *public
}
// Special case: The playlist is now empty
if len(idxToRemove) > 0 && len(pls.Tracks) == 0 {
if err = repo.Tracks(playlistId).DeleteAll(); err != nil {
return err
}
}
return repo.Put(pls)
})
}

View File

@ -120,5 +120,6 @@ type PlaylistTrackRepository interface {
AddArtists(artistIds []string) (int, error)
AddDiscs(discs []DiscID) (int, error)
Delete(id ...string) error
DeleteAll() error
Reorder(pos int, newPos int) error
}

View File

@ -110,10 +110,10 @@ func (r *playlistRepository) Put(p *model.Playlist) error {
return nil
}
// Only update tracks if they were specified
if len(pls.Tracks) == 0 {
return nil
if len(pls.Tracks) > 0 {
return r.updateTracks(id, p.MediaFiles())
}
return r.updateTracks(id, p.MediaFiles())
return r.RefreshStatus(id)
}
func (r *playlistRepository) Get(id string) (*model.Playlist, error) {

View File

@ -164,6 +164,18 @@ func (r *playlistTrackRepository) Delete(ids ...string) error {
return r.playlistRepo.renumber(r.playlistId)
}
func (r *playlistTrackRepository) DeleteAll() error {
if !r.isTracksEditable() {
return rest.ErrPermissionDenied
}
err := r.delete(Eq{"playlist_id": r.playlistId})
if err != nil {
return err
}
return r.playlistRepo.renumber(r.playlistId)
}
func (r *playlistTrackRepository) Reorder(pos int, newPos int) error {
if !r.isTracksEditable() {
return rest.ErrPermissionDenied