diff options
author | Max Kellermann <max@duempel.org> | 2014-07-11 20:01:53 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-07-11 20:22:35 +0200 |
commit | 11a5ee821b99da7c58da4cb2251c8686e2d615cf (patch) | |
tree | 12247daf432ae0e4de0594a9432b341b015d4a42 /src/PlaylistEdit.cxx | |
parent | a8a85143f6e0b0fdc2467722d057a4b8526f7e69 (diff) | |
download | mpd-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/PlaylistEdit.cxx')
-rw-r--r-- | src/PlaylistEdit.cxx | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/PlaylistEdit.cxx b/src/PlaylistEdit.cxx index 3eea2491e..0dffd3d80 100644 --- a/src/PlaylistEdit.cxx +++ b/src/PlaylistEdit.cxx @@ -40,6 +40,12 @@ void playlist::OnModified() { + if (bulk_edit) { + /* postponed to CommitBulk() */ + bulk_modified = true; + return; + } + queue.IncrementVersion(); idle_add(IDLE_PLAYLIST); @@ -56,6 +62,35 @@ playlist::Clear(PlayerControl &pc) OnModified(); } +void +playlist::BeginBulk() +{ + assert(!bulk_edit); + + bulk_edit = true; + bulk_modified = false; +} + +void +playlist::CommitBulk(PlayerControl &pc) +{ + assert(bulk_edit); + + bulk_edit = false; + if (!bulk_modified) + return; + + if (queued < 0) + /* if no song was queued, UpdateQueuedSong() is being + ignored in "bulk" edit mode; now that we have + shuffled all new songs, we can pick a random one + (instead of always picking the first one that was + added) */ + UpdateQueuedSong(pc, nullptr); + + OnModified(); +} + PlaylistResult playlist::AppendFile(PlayerControl &pc, const char *path_utf8, unsigned *added_id) |