diff options
author | Romain Bignon <romain@peerfuse.org> | 2009-03-30 00:01:02 +0200 |
---|---|---|
committer | Romain Bignon <romain@peerfuse.org> | 2009-03-30 17:37:55 +0200 |
commit | e81f683a1805871fa671485dc2a6327763ef1cf0 (patch) | |
tree | b2fe3b82caf9b77dcabf2b475d10f34d20445a69 /src/playlist_control.c | |
parent | 7d9380fd913355b70f846a4adc263363d12813ba (diff) | |
download | mpd-e81f683a1805871fa671485dc2a6327763ef1cf0.tar.gz mpd-e81f683a1805871fa671485dc2a6327763ef1cf0.tar.xz mpd-e81f683a1805871fa671485dc2a6327763ef1cf0.zip |
implemented the 'consume' mode
Consume mode removes each song played
Diffstat (limited to '')
-rw-r--r-- | src/playlist_control.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/playlist_control.c b/src/playlist_control.c index 9e31c07ab..4f51345c3 100644 --- a/src/playlist_control.c +++ b/src/playlist_control.c @@ -139,6 +139,7 @@ void nextSongInPlaylist(struct playlist *playlist) { int next_order; + int current; if (!playlist->playing) return; @@ -146,6 +147,7 @@ nextSongInPlaylist(struct playlist *playlist) assert(!queue_is_empty(&playlist->queue)); assert(queue_valid_order(&playlist->queue, playlist->current)); + current = playlist->current; playlist->stop_on_error = false; /* determine the next song from the queue's order list */ @@ -156,24 +158,29 @@ nextSongInPlaylist(struct playlist *playlist) playlist->queue.single = false; /* no song after this one: stop playback */ stopPlaylist(playlist); - return; } + else + { + if (next_order == 0 && playlist->queue.random) { + /* The queue told us that the next song is the first + song. This means we are in repeat mode. Shuffle + the queue order, so this time, the user hears the + songs in a different than before */ + assert(playlist->queue.repeat); + + queue_shuffle_order(&playlist->queue); + + /* note that playlist->current and playlist->queued are + now invalid, but playPlaylistOrderNumber() will + discard them anyway */ + } - if (next_order == 0 && playlist->queue.random) { - /* The queue told us that the next song is the first - song. This means we are in repeat mode. Shuffle - the queue order, so this time, the user hears the - songs in a different than before */ - assert(playlist->queue.repeat); - - queue_shuffle_order(&playlist->queue); - - /* note that playlist->current and playlist->queued are - now invalid, but playPlaylistOrderNumber() will - discard them anyway */ + playPlaylistOrderNumber(playlist, next_order); } - playPlaylistOrderNumber(playlist, next_order); + /* Consume mode removes each played songs. */ + if(playlist->queue.consume) + deleteFromPlaylist(playlist, queue_order_to_position(&playlist->queue, current)); } void previousSongInPlaylist(struct playlist *playlist) |