reorder playlist tracks based on original sort and switch to unsorted view

This commit is contained in:
Drew Weymouth
2023-05-24 09:11:50 -07:00
parent 8bf9f20b8e
commit 572a2e511d
2 changed files with 19 additions and 8 deletions
+13 -6
View File
@@ -158,16 +158,23 @@ func (a *PlaylistPage) onMoveSelectedToBottom() {
} }
func (a *PlaylistPage) doSetNewTrackOrder(op sharedutil.TrackReorderOp) { func (a *PlaylistPage) doSetNewTrackOrder(op sharedutil.TrackReorderOp) {
// TODO: revisit this for how to deal with sort order // Since the tracklist view may be sorted in a different order than the
idxs := a.tracklist.SelectedTrackIndexes() // actual running order, we need to get the IDs of the selected tracks
newTracks := sharedutil.ReorderTracks(a.tracklist.GetTracks(), idxs, op) // from the tracklist and convert them to indices in the *original* run order
ids := make([]string, len(newTracks)) ids := a.tracklist.SelectedTrackIDs()
for i, tr := range newTracks { idxs := make([]int, 0, len(ids))
ids[i] = tr.ID for i, tr := range a.tracks {
if sharedutil.SliceContains(ids, tr.ID) {
idxs = append(idxs, i)
}
} }
newTracks := sharedutil.ReorderTracks(a.tracks, idxs, op)
ids = sharedutil.TracksToIDs(newTracks)
if err := a.sm.Server.ReplacePlaylistTracks(a.playlistID, ids); err != nil { if err := a.sm.Server.ReplacePlaylistTracks(a.playlistID, ids); err != nil {
log.Printf("error updating playlist: %s", err.Error()) log.Printf("error updating playlist: %s", err.Error())
} else { } else {
// force-switch back to unsorted view to show new track order
a.tracklist.SetSorting(widgets.TracklistSort{})
a.tracklist.SetTracks(newTracks) a.tracklist.SetTracks(newTracks)
a.tracklist.UnselectAll() a.tracklist.UnselectAll()
a.tracklist.Refresh() a.tracklist.Refresh()
+6 -2
View File
@@ -214,6 +214,10 @@ func (t *Tracklist) Sorting() TracklistSort {
func (t *Tracklist) SetSorting(sorting TracklistSort) { func (t *Tracklist) SetSorting(sorting TracklistSort) {
if sorting.ColumnName == "" { if sorting.ColumnName == "" {
// nil case - reset current sort
if sharedutil.SliceContains(columns, t.sorting.ColumnName) {
t.hdr.SetSorting(ListHeaderSort{ColNumber: ColNumber(t.sorting.ColumnName), Type: SortNone})
}
return return
} }
// actual sorting will be handled in callback from header // actual sorting will be handled in callback from header
@@ -425,7 +429,7 @@ func (t *Tracklist) onShowContextMenu(e *fyne.PointEvent, trackIdx int) {
t.ctxMenu.Items = append(t.ctxMenu.Items, t.ctxMenu.Items = append(t.ctxMenu.Items,
fyne.NewMenuItem("Add to playlist...", func() { fyne.NewMenuItem("Add to playlist...", func() {
if t.OnAddToPlaylist != nil { if t.OnAddToPlaylist != nil {
t.OnAddToPlaylist(t.selectedTrackIDs()) t.OnAddToPlaylist(t.SelectedTrackIDs())
} }
})) }))
t.ctxMenu.Items = append(t.ctxMenu.Items, fyne.NewMenuItemSeparator()) t.ctxMenu.Items = append(t.ctxMenu.Items, fyne.NewMenuItemSeparator())
@@ -513,7 +517,7 @@ func (t *Tracklist) selectedTracks() []*mediaprovider.Track {
return tracks return tracks
} }
func (t *Tracklist) selectedTrackIDs() []string { func (t *Tracklist) SelectedTrackIDs() []string {
sel := t.selectionMgr.GetSelection() sel := t.selectionMgr.GetSelection()
tracks := make([]string, 0, len(sel)) tracks := make([]string, 0, len(sel))
t.tracksMutex.RLock() t.tracksMutex.RLock()