Commit e9e853b1 authored by Max Kellermann's avatar Max Kellermann

command/Partition: add command "partition" to switch to another partition

parent e48ea5f2
......@@ -2368,6 +2368,20 @@ OK
</para>
<variablelist>
<varlistentry id="command_partition">
<term>
<cmdsynopsis>
<command>partition</command>
<arg choice="req"><replaceable>NAME</replaceable></arg>
</cmdsynopsis>
</term>
<listitem>
<para>
Switch the client to a different partition.
</para>
</listitem>
</varlistentry>
<varlistentry id="command_listpartitions">
<term>
<cmdsynopsis>
......
......@@ -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 },
......
......@@ -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) {
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment