summaryrefslogtreecommitdiff
path: root/src/command
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2017-02-20 12:37:14 +0100
committerMax Kellermann <max@musicpd.org>2017-02-25 10:26:33 +0100
commite9e853b19ab8989c639e7f431ede7a377a427579 (patch)
treee29bb7457aa9fd4bd9a571a7972f3b324afd3d8f /src/command
parente48ea5f23a6a1601e8eeb6d0594f8f0d89f47fdb (diff)
command/Partition: add command "partition" to switch to another partition
Diffstat (limited to 'src/command')
-rw-r--r--src/command/AllCommands.cxx1
-rw-r--r--src/command/PartitionCommands.cxx15
-rw-r--r--src/command/PartitionCommands.hxx3
3 files changed, 19 insertions, 0 deletions
diff --git a/src/command/AllCommands.cxx b/src/command/AllCommands.cxx
index 43dbaa691..ef4d34ded 100644
--- a/src/command/AllCommands.cxx
+++ b/src/command/AllCommands.cxx
@@ -137,6 +137,7 @@ static constexpr struct command commands[] = {
{ "next", PERMISSION_CONTROL, 0, 0, handle_next },
{ "notcommands", PERMISSION_NONE, 0, 0, handle_not_commands },
{ "outputs", PERMISSION_READ, 0, 0, handle_devices },
+ { "partition", PERMISSION_READ, 1, 1, handle_partition },
{ "password", PERMISSION_NONE, 1, 1, handle_password },
{ "pause", PERMISSION_CONTROL, 0, 1, handle_pause },
{ "ping", PERMISSION_NONE, 0, 0, handle_ping },
diff --git a/src/command/PartitionCommands.cxx b/src/command/PartitionCommands.cxx
index 5953437d2..7929b5998 100644
--- a/src/command/PartitionCommands.cxx
+++ b/src/command/PartitionCommands.cxx
@@ -29,6 +29,21 @@
#include "util/CharUtil.hxx"
CommandResult
+handle_partition(Client &client, Request request, Response &response)
+{
+ const char *name = request.front();
+ auto &instance = client.GetInstance();
+ auto *partition = instance.FindPartition(name);
+ if (partition == nullptr) {
+ response.Error(ACK_ERROR_NO_EXIST, "partition does not exist");
+ return CommandResult::ERROR;
+ }
+
+ client.SetPartition(*partition);
+ return CommandResult::OK;
+}
+
+CommandResult
handle_listpartitions(Client &client, Request, Response &r)
{
for (const auto &partition : client.GetInstance().partitions) {
diff --git a/src/command/PartitionCommands.hxx b/src/command/PartitionCommands.hxx
index 6c51beeb4..7a370a523 100644
--- a/src/command/PartitionCommands.hxx
+++ b/src/command/PartitionCommands.hxx
@@ -27,6 +27,9 @@ class Request;
class Response;
CommandResult
+handle_partition(Client &client, Request request, Response &response);
+
+CommandResult
handle_listpartitions(Client &client, Request request, Response &response);
CommandResult