diff options
-rw-r--r-- | backend.js | 17 | ||||
-rw-r--r-- | todo.txt | 5 |
2 files changed, 20 insertions, 2 deletions
diff --git a/backend.js b/backend.js index d88c779..0ddd15b 100644 --- a/backend.js +++ b/backend.js @@ -140,6 +140,10 @@ class Backend extends EventEmitter { // a whole group can be queued in order after a given item. let grouplikeOffset = 0 + // Keeps track of how many tracks have been removed (times -1); this is + // used so we queue tracks at the intended spot. + let removeOffset = 0 + const recursivelyAddTracks = item => { // For groups, just queue all children. if (isGroup(item)) { @@ -163,13 +167,22 @@ class Backend extends EventEmitter { if (!movePlayingTrack && item === this.playingTrack) { return } - items.splice(items.indexOf(item), 1) + + const removeIndex = items.indexOf(item) + items.splice(removeIndex, 1) + + // If the item we removed was positioned before the insertion index, + // we need to shift that index back one, so it's placed after the same + // intended track. + if (removeIndex <= afterIndex) { + removeOffset-- + } } if (afterItem === 'FRONT') { items.unshift(item) } else if (afterItem) { - items.splice(afterIndex + 1 + grouplikeOffset, 0, item) + items.splice(afterIndex + 1 + grouplikeOffset + removeOffset, 0, item) } else { items.push(item) } diff --git a/todo.txt b/todo.txt index af17769..216a488 100644 --- a/todo.txt +++ b/todo.txt @@ -283,3 +283,8 @@ TODO: Remember the scroll position of each group. This should probably be done TODO: Apparently shift-up/down selecting doesn't keep the selected item within the scroll view. Fix that. (Done!) + +TODO: When you queue a song which is already before the current song / insert + index in the queue, it ends up being placed one index closer to the end + than intended. Fix this! + (Done!) |