aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-02-09 22:47:23 +0100
committerMax Kellermann <max@duempel.org>2009-02-09 22:47:23 +0100
commit710b3275ea09325131ca6f80cbcb98272424123d (patch)
treea51b7ea22ca87786f4f3b08fb63486268a89c6aa
parentbee688e99aa45f8e5e5612873471a3ff5e918578 (diff)
downloadmpd-710b3275ea09325131ca6f80cbcb98272424123d.tar.gz
mpd-710b3275ea09325131ca6f80cbcb98272424123d.tar.xz
mpd-710b3275ea09325131ca6f80cbcb98272424123d.zip
queue: update order array after song move
Commit f78cddb4 introduced a regression: after a song was moved, the order array was not updated (in random mode). This caused MPD to think the "current" song has changed when you moved something to the position of the current song.
-rw-r--r--src/queue.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/queue.c b/src/queue.c
index 73adb2f49..fc582ec29 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -155,6 +155,20 @@ queue_move(struct queue *queue, unsigned from, unsigned to)
queue->idToPosition[item.id] = to;
queue->items[to] = item;
queue->items[to].version = queue->version;
+
+ /* now deal with order */
+
+ if (queue->random) {
+ for (unsigned i = 0; i < queue->length; i++) {
+ if (queue->order[i] > from && queue->order[i] <= to)
+ queue->order[i]--;
+ else if (queue->order[i] < from &&
+ queue->order[i] >= to)
+ queue->order[i]++;
+ else if (from == queue->order[i])
+ queue->order[i] = to;
+ }
+ }
}
void