Commit 688880bc authored by Max Kellermann's avatar Max Kellermann

queue: added queue_shuffle_order_last()

This function shuffles the last song of a range. This is used by addSongToPlaylist().
parent 1a59afa3
......@@ -442,12 +442,9 @@ addSongToPlaylist(struct song *song, unsigned *added_id)
start = playlist.queued + 1;
else
start = playlist.current + 1;
if (start < queue_length(&playlist.queue)) {
unsigned swap = g_rand_int_range(g_rand, start,
queue_length(&playlist.queue));
queue_swap_order(&playlist.queue,
queue_length(&playlist.queue) - 1, swap);
}
if (start < queue_length(&playlist.queue))
queue_shuffle_order_last(&playlist.queue, start,
queue_length(&playlist.queue));
}
incrPlaylistVersion();
......
......@@ -255,6 +255,13 @@ queue_shuffle_order(struct queue *queue)
}
void
queue_shuffle_order_last(struct queue *queue, unsigned start, unsigned end)
{
queue_swap_order(queue, end - 1,
g_rand_int_range(queue->rand, start, end));
}
void
queue_shuffle_range(struct queue *queue, unsigned start, unsigned end)
{
assert(start <= end);
......
......@@ -320,6 +320,14 @@ void
queue_shuffle_order(struct queue *queue);
/**
* Shuffles the virtual order of the last song in the specified
* (order) range. This is used in random mode after a song has been
* appended by queue_append().
*/
void
queue_shuffle_order_last(struct queue *queue, unsigned start, unsigned end);
/**
* Shuffles a (position) range in the queue. The songs are physically
* shuffled, not by using the "order" mapping.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment