aboutsummaryrefslogtreecommitdiffstats
path: root/src/Playlist.hxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-07-11 20:01:53 +0200
committerMax Kellermann <max@duempel.org>2014-07-11 20:22:35 +0200
commit11a5ee821b99da7c58da4cb2251c8686e2d615cf (patch)
tree12247daf432ae0e4de0594a9432b341b015d4a42 /src/Playlist.hxx
parenta8a85143f6e0b0fdc2467722d057a4b8526f7e69 (diff)
downloadmpd-11a5ee821b99da7c58da4cb2251c8686e2d615cf.tar.gz
mpd-11a5ee821b99da7c58da4cb2251c8686e2d615cf.tar.xz
mpd-11a5ee821b99da7c58da4cb2251c8686e2d615cf.zip
PlaylistEdit: postpone UpdateQueuedSong() when adding multiple songs
Implement a "bulk" edit mode that postpones both UpdateQueuedSong() and OnModified(). This way, the playlist version gets incremented only once. More importantly: when adding multiple songs to a queue that consists of only one song, the first song that got added will always be played next. By postponing this choice, all newly added songs get a chance to become the next song. Fixes the second (and last) part of Mantis ticket 0004005.
Diffstat (limited to 'src/Playlist.hxx')
-rw-r--r--src/Playlist.hxx19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/Playlist.hxx b/src/Playlist.hxx
index 7d7e9b154..b660ecb40 100644
--- a/src/Playlist.hxx
+++ b/src/Playlist.hxx
@@ -46,6 +46,18 @@ struct playlist {
bool stop_on_error;
/**
+ * If true, then a bulk edit has been initiated by
+ * BeginBulk(), and UpdateQueuedSong() and OnModified() will
+ * be postponed until CommitBulk()
+ */
+ bool bulk_edit;
+
+ /**
+ * Has the queue been modified during bulk edit mode?
+ */
+ bool bulk_modified;
+
+ /**
* Number of errors since playback was started. If this
* number exceeds the length of the playlist, MPD gives up,
* because all songs have been tried.
@@ -69,7 +81,9 @@ struct playlist {
int queued;
playlist(unsigned max_length)
- :queue(max_length), playing(false), current(-1), queued(-1) {
+ :queue(max_length), playing(false),
+ bulk_edit(false),
+ current(-1), queued(-1) {
}
~playlist() {
@@ -126,6 +140,9 @@ protected:
void UpdateQueuedSong(PlayerControl &pc, const Song *prev);
public:
+ void BeginBulk();
+ void CommitBulk(PlayerControl &pc);
+
void Clear(PlayerControl &pc);
/**