Commit 0f79287b authored by Max Kellermann's avatar Max Kellermann

queue/Playlist: move code to MoveOrderToCurrent()

parent f2fac77d
......@@ -356,6 +356,18 @@ public:
}
void SetConsume(bool new_value);
private:
/**
* Prepare a manual song change: move the given song to the
* current playback order. This is done to avoid skipping
* upcoming songs in the order list. The newly selected song
* shall be inserted in the order list, and the rest shall be
* played after that as previously planned.
*
* @return the new order number of the given song
*/
unsigned MoveOrderToCurrent(unsigned old_order);
};
#endif
......@@ -56,6 +56,24 @@ playlist::Stop(PlayerControl &pc)
}
}
unsigned
playlist::MoveOrderToCurrent(unsigned old_order)
{
if (!queue.random)
/* no-op because there is no order list */
return old_order;
const unsigned destination_order = playing
? (unsigned)current
: 0;
/* swap the new song with the previous "current" one, so
playback continues as planned */
queue.SwapOrders(old_order, destination_order);
return destination_order;
}
void
playlist::PlayPosition(PlayerControl &pc, int song)
{
......@@ -90,13 +108,7 @@ playlist::PlayPosition(PlayerControl &pc, int song)
number, because random mode is enabled */
i = queue.PositionToOrder(song);
if (!playing)
current = 0;
/* swap the new song with the previous "current" one,
so playback continues as planned */
queue.SwapOrders(i, current);
i = current;
i = MoveOrderToCurrent(i);
}
stop_on_error = false;
......
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