summaryrefslogtreecommitdiff
path: root/src/command
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/command
parenta8a85143f6e0b0fdc2467722d057a4b8526f7e69 (diff)
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/command')
-rw-r--r--src/command/DatabaseCommands.cxx3
-rw-r--r--src/command/PlaylistCommands.cxx3
-rw-r--r--src/command/QueueCommands.cxx3
3 files changed, 9 insertions, 0 deletions
diff --git a/src/command/DatabaseCommands.cxx b/src/command/DatabaseCommands.cxx
index b86cbdae7..a7d2467b8 100644
--- a/src/command/DatabaseCommands.cxx
+++ b/src/command/DatabaseCommands.cxx
@@ -30,6 +30,7 @@
#include "util/Error.hxx"
#include "SongFilter.hxx"
#include "protocol/Result.hxx"
+#include "BulkEdit.hxx"
#include <assert.h>
#include <string.h>
@@ -92,6 +93,8 @@ handle_match_add(Client &client, int argc, char *argv[], bool fold_case)
return CommandResult::ERROR;
}
+ const ScopeBulkEdit bulk_edit(client.partition);
+
const DatabaseSelection selection("", true, &filter);
Error error;
return AddFromDatabase(client.partition, selection, error)
diff --git a/src/command/PlaylistCommands.cxx b/src/command/PlaylistCommands.cxx
index d178fa097..c4441293e 100644
--- a/src/command/PlaylistCommands.cxx
+++ b/src/command/PlaylistCommands.cxx
@@ -26,6 +26,7 @@
#include "PlaylistFile.hxx"
#include "PlaylistVector.hxx"
#include "PlaylistQueue.hxx"
+#include "BulkEdit.hxx"
#include "TimePrint.hxx"
#include "Client.hxx"
#include "protocol/ArgParser.hxx"
@@ -67,6 +68,8 @@ handle_load(Client &client, int argc, char *argv[])
} else if (!check_range(client, &start_index, &end_index, argv[2]))
return CommandResult::ERROR;
+ const ScopeBulkEdit bulk_edit(client.partition);
+
const PlaylistResult result =
playlist_open_into_queue(argv[1],
start_index, end_index,
diff --git a/src/command/QueueCommands.cxx b/src/command/QueueCommands.cxx
index a20b24132..a987e1bc9 100644
--- a/src/command/QueueCommands.cxx
+++ b/src/command/QueueCommands.cxx
@@ -28,6 +28,7 @@
#include "ClientFile.hxx"
#include "Client.hxx"
#include "Partition.hxx"
+#include "BulkEdit.hxx"
#include "protocol/ArgParser.hxx"
#include "protocol/Result.hxx"
#include "ls.hxx"
@@ -73,6 +74,8 @@ handle_add(Client &client, gcc_unused int argc, char *argv[])
return print_playlist_result(client, result);
}
+ const ScopeBulkEdit bulk_edit(client.partition);
+
const DatabaseSelection selection(uri, true);
Error error;
return AddFromDatabase(client.partition, selection, error)