From 871bf3b88f20b51118f9a61a2bbec7ba1324378e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 16 Oct 2020 17:46:58 +0200 Subject: [PATCH] command: add command "getvol" Closes https://github.com/MusicPlayerDaemon/MPD/issues/979 --- NEWS | 2 ++ doc/protocol.rst | 10 ++++++++++ src/command/AllCommands.cxx | 1 + src/command/OtherCommands.cxx | 12 ++++++++++++ src/command/OtherCommands.hxx | 3 +++ 5 files changed, 28 insertions(+) diff --git a/NEWS b/NEWS index 834d89afe..a14cbd699 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,6 @@ ver 0.23 (not yet released) +* protocol + - new command "getvol" ver 0.22.1 (not yet released) * output diff --git a/doc/protocol.rst b/doc/protocol.rst index bcbe16155..164ac0b9c 100644 --- a/doc/protocol.rst +++ b/doc/protocol.rst @@ -522,6 +522,16 @@ Playback options Sets volume to ``VOL``, the range of volume is 0-100. +:command:`getvol` + + Read the volume. The result is a ``volume:`` line like in + :ref:`status `. If there is no mixer, MPD will + emit an empty response. Example:: + + getvol + volume: 42 + OK + :command:`single {STATE}` [#since_0_15]_ Sets single state to ``STATE``, ``STATE`` should be ``0``, ``1`` or ``oneshot`` [#since_0_20]_. diff --git a/src/command/AllCommands.cxx b/src/command/AllCommands.cxx index 560d69c87..e139b367c 100644 --- a/src/command/AllCommands.cxx +++ b/src/command/AllCommands.cxx @@ -113,6 +113,7 @@ static constexpr struct command commands[] = { #ifdef ENABLE_CHROMAPRINT { "getfingerprint", PERMISSION_READ, 1, 1, handle_getfingerprint }, #endif + { "getvol", PERMISSION_READ, 0, 0, handle_getvol }, { "idle", PERMISSION_READ, 0, -1, handle_idle }, { "kill", PERMISSION_ADMIN, -1, -1, handle_kill }, #ifdef ENABLE_DATABASE diff --git a/src/command/OtherCommands.cxx b/src/command/OtherCommands.cxx index 2bf858d90..5673fcedd 100644 --- a/src/command/OtherCommands.cxx +++ b/src/command/OtherCommands.cxx @@ -318,6 +318,18 @@ handle_rescan(Client &client, Request args, Response &r) return handle_update(client, args, r, true); } +CommandResult +handle_getvol(Client &client, Request, Response &r) +{ + auto &partition = client.GetPartition(); + + const auto volume = volume_level_get(partition.outputs); + if (volume >= 0) + r.Format("volume: %i\n", volume); + + return CommandResult::OK; +} + CommandResult handle_setvol(Client &client, Request args, Response &r) { diff --git a/src/command/OtherCommands.hxx b/src/command/OtherCommands.hxx index 2fe28f2d8..58288f11f 100644 --- a/src/command/OtherCommands.hxx +++ b/src/command/OtherCommands.hxx @@ -47,6 +47,9 @@ handle_update(Client &client, Request request, Response &response); CommandResult handle_rescan(Client &client, Request request, Response &response); +CommandResult +handle_getvol(Client &client, Request request, Response &response); + CommandResult handle_setvol(Client &client, Request request, Response &response);