Add ability to reorder playlist items
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
. "github.com/Masterminds/squirrel"
|
||||
"github.com/deluan/navidrome/log"
|
||||
"github.com/deluan/navidrome/model"
|
||||
"github.com/deluan/navidrome/utils"
|
||||
"github.com/deluan/rest"
|
||||
)
|
||||
|
||||
@@ -70,18 +71,10 @@ func (r *playlistTrackRepository) Add(mediaFileIds []string) error {
|
||||
log.Debug(r.ctx, "Adding songs to playlist", "playlistId", r.playlistId, "mediaFileIds", mediaFileIds)
|
||||
}
|
||||
|
||||
// Get all current tracks
|
||||
all := r.newSelect().Columns("media_file_id").Where(Eq{"playlist_id": r.playlistId}).OrderBy("id")
|
||||
var tracks model.PlaylistTracks
|
||||
err := r.queryAll(all, &tracks)
|
||||
ids, err := r.getTracks()
|
||||
if err != nil {
|
||||
log.Error("Error querying current tracks from playlist", "playlistId", r.playlistId, err)
|
||||
return err
|
||||
}
|
||||
ids := make([]string, len(tracks))
|
||||
for i := range tracks {
|
||||
ids[i] = tracks[i].MediaFileID
|
||||
}
|
||||
|
||||
// Append new tracks
|
||||
ids = append(ids, mediaFileIds...)
|
||||
@@ -90,6 +83,22 @@ func (r *playlistTrackRepository) Add(mediaFileIds []string) error {
|
||||
return r.Update(ids)
|
||||
}
|
||||
|
||||
func (r *playlistTrackRepository) getTracks() ([]string, error) {
|
||||
// Get all current tracks
|
||||
all := r.newSelect().Columns("media_file_id").Where(Eq{"playlist_id": r.playlistId}).OrderBy("id")
|
||||
var tracks model.PlaylistTracks
|
||||
err := r.queryAll(all, &tracks)
|
||||
if err != nil {
|
||||
log.Error("Error querying current tracks from playlist", "playlistId", r.playlistId, err)
|
||||
return nil, err
|
||||
}
|
||||
ids := make([]string, len(tracks))
|
||||
for i := range tracks {
|
||||
ids[i] = tracks[i].MediaFileID
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
func (r *playlistTrackRepository) Update(mediaFileIds []string) error {
|
||||
// Remove old tracks
|
||||
del := Delete(r.tableName).Where(Eq{"playlist_id": r.playlistId})
|
||||
@@ -156,4 +165,13 @@ func (r *playlistTrackRepository) Delete(id string) error {
|
||||
return r.updateStats()
|
||||
}
|
||||
|
||||
func (r *playlistTrackRepository) Reorder(pos int, newPos int) error {
|
||||
ids, err := r.getTracks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newOrder := utils.MoveString(ids, pos-1, newPos-1)
|
||||
return r.Update(newOrder)
|
||||
}
|
||||
|
||||
var _ model.PlaylistTrackRepository = (*playlistTrackRepository)(nil)
|
||||
|
||||
Reference in New Issue
Block a user