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:
Max Kellermann
2013-10-25 00:11:10 +02:00
parent c1ba47beee
commit 961c7d0f78
5 changed files with 57 additions and 0 deletions

View File

@@ -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[])