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/Playlist.hxx | |
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/Playlist.hxx')
-rw-r--r-- | src/Playlist.hxx | 19 |
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); /** |