From 5540fbaec250bbb8601d9eaec7f7c20922a67979 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 13 Feb 2012 19:59:41 +0100 Subject: [PATCH] command: new command "config" --- NEWS | 1 + doc/protocol.xml | 41 +++++++++++++++++++++++++++++++++++++++++ src/command.c | 19 +++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/NEWS b/NEWS index 42895107e..f50996679 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ ver 0.17 (2011/??/??) - support client-to-client communication - "update" and "rescan" need only "CONTROL" permission - new command "seekcur" for simpler seeking within current song + - new command "config" dumps location of music directory - add range parameter to command "load" - print extra "playlist" object for embedded CUE sheets * input: diff --git a/doc/protocol.xml b/doc/protocol.xml index dbc60f40d..5b8857ee0 100644 --- a/doc/protocol.xml +++ b/doc/protocol.xml @@ -1845,6 +1845,47 @@ OK Reflection + + + + config + + + + + Dumps configuration values that may be interesting for + the client. This command is only permitted to "local" + clients (connected via UNIX domain socket). + + + The following response attributes are available: + + + + + + + Name + + + Description + + + + + + + music_directory + + + The absolute path of the music directory. + + + + + + + diff --git a/src/command.c b/src/command.c index 4479b803e..61f0fdd0c 100644 --- a/src/command.c +++ b/src/command.c @@ -55,6 +55,7 @@ #include "path.h" #include "replay_gain_config.h" #include "idle.h" +#include "mapper.h" #ifdef ENABLE_SQLITE #include "sticker.h" @@ -1696,6 +1697,23 @@ static enum command_return handle_not_commands(struct client *client, G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[]); +static enum command_return +handle_config(struct client *client, + G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[]) +{ + if (!client_is_local(client)) { + command_error(client, ACK_ERROR_PERMISSION, + "Command only permitted to local clients"); + return COMMAND_RETURN_ERROR; + } + + const char *path = mapper_get_music_directory(); + if (path != NULL) + client_printf(client, "music_directory: %s\n", path); + + return COMMAND_RETURN_OK; +} + static enum command_return handle_playlistclear(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) { @@ -2139,6 +2157,7 @@ static const struct command commands[] = { { "clearerror", PERMISSION_CONTROL, 0, 0, handle_clearerror }, { "close", PERMISSION_NONE, -1, -1, handle_close }, { "commands", PERMISSION_NONE, 0, 0, handle_commands }, + { "config", PERMISSION_ADMIN, 0, 0, handle_config }, { "consume", PERMISSION_CONTROL, 1, 1, handle_consume }, { "count", PERMISSION_READ, 2, -1, handle_count }, { "crossfade", PERMISSION_CONTROL, 1, 1, handle_crossfade },