OtherCommands: re-add the "volume" command
This command was removed by commit 206392ad
(MPD 0.16), even though it
was been proven useful for some very simple clients. On request, I
add it to the protocol again.
This commit is contained in:
@@ -161,6 +161,7 @@ static const struct command commands[] = {
|
||||
{ "unsubscribe", PERMISSION_READ, 1, 1, handle_unsubscribe },
|
||||
{ "update", PERMISSION_CONTROL, 0, 1, handle_update },
|
||||
{ "urlhandlers", PERMISSION_READ, 0, 0, handle_urlhandlers },
|
||||
{ "volume", PERMISSION_CONTROL, 1, 1, handle_volume },
|
||||
};
|
||||
|
||||
static const unsigned num_commands = sizeof(commands) / sizeof(commands[0]);
|
||||
|
@@ -236,6 +236,39 @@ handle_setvol(Client &client, gcc_unused int argc, char *argv[])
|
||||
return CommandResult::OK;
|
||||
}
|
||||
|
||||
CommandResult
|
||||
handle_volume(Client &client, gcc_unused int argc, char *argv[])
|
||||
{
|
||||
int relative;
|
||||
if (!check_int(client, &relative, argv[1]))
|
||||
return CommandResult::ERROR;
|
||||
|
||||
if (relative < -100 || relative > 100) {
|
||||
command_error(client, ACK_ERROR_ARG, "Invalid volume value");
|
||||
return CommandResult::ERROR;
|
||||
}
|
||||
|
||||
const int old_volume = volume_level_get();
|
||||
if (old_volume < 0) {
|
||||
command_error(client, ACK_ERROR_SYSTEM, "No mixer");
|
||||
return CommandResult::ERROR;
|
||||
}
|
||||
|
||||
int new_volume = old_volume + relative;
|
||||
if (new_volume < 0)
|
||||
new_volume = 0;
|
||||
else if (new_volume > 100)
|
||||
new_volume = 100;
|
||||
|
||||
if (new_volume != old_volume && !volume_level_change(new_volume)) {
|
||||
command_error(client, ACK_ERROR_SYSTEM,
|
||||
"problems setting volume");
|
||||
return CommandResult::ERROR;
|
||||
}
|
||||
|
||||
return CommandResult::OK;
|
||||
}
|
||||
|
||||
CommandResult
|
||||
handle_stats(Client &client,
|
||||
gcc_unused int argc, gcc_unused char *argv[])
|
||||
|
@@ -51,6 +51,9 @@ handle_rescan(Client &client, int argc, char *argv[]);
|
||||
CommandResult
|
||||
handle_setvol(Client &client, int argc, char *argv[]);
|
||||
|
||||
CommandResult
|
||||
handle_volume(Client &client, int argc, char *argv[]);
|
||||
|
||||
CommandResult
|
||||
handle_stats(Client &client, int argc, char *argv[]);
|
||||
|
||||
|
Reference in New Issue
Block a user