aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--doc/protocol.xml41
-rw-r--r--src/command.c19
3 files changed, 61 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 42895107..f5099667 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 dbc60f40..5b8857ee 100644
--- a/doc/protocol.xml
+++ b/doc/protocol.xml
@@ -1845,6 +1845,47 @@ OK
<title>Reflection</title>
<variablelist>
+ <varlistentry id="command_config">
+ <term>
+ <cmdsynopsis>
+ <command>config</command>
+ </cmdsynopsis>
+ </term>
+ <listitem>
+ <para>
+ Dumps configuration values that may be interesting for
+ the client. This command is only permitted to "local"
+ clients (connected via UNIX domain socket).
+ </para>
+ <para>
+ The following response attributes are available:
+ </para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Name
+ </entry>
+ <entry>
+ Description
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <varname>music_directory</varname>
+ </entry>
+ <entry>
+ The absolute path of the music directory.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </listitem>
+ </varlistentry>
<varlistentry id="command_commands">
<term>
<cmdsynopsis>
diff --git a/src/command.c b/src/command.c
index 4479b803..61f0fdd0 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"
@@ -1697,6 +1698,23 @@ 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[])
{
GError *error = NULL;
@@ -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 },