diff options
Diffstat (limited to 'src/queue/PlaylistControl.cxx')
-rw-r--r-- | src/queue/PlaylistControl.cxx | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/queue/PlaylistControl.cxx b/src/queue/PlaylistControl.cxx index 99012aedf..c2284b60c 100644 --- a/src/queue/PlaylistControl.cxx +++ b/src/queue/PlaylistControl.cxx @@ -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; |