queue: added queue_shuffle_order_last()

This function shuffles the last song of a range.  This is used by
addSongToPlaylist().
This commit is contained in:
Max Kellermann 2009-01-25 14:00:51 +01:00
parent 1a59afa388
commit 688880bc0b
3 changed files with 18 additions and 6 deletions

View File

@ -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();

View File

@ -254,6 +254,13 @@ queue_shuffle_order(struct queue *queue)
queue->length));
}
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)
{

View File

@ -319,6 +319,14 @@ queue_restore_order(struct queue *queue)
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.