aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-08-08 08:34:59 +0200
committerMax Kellermann <max@duempel.org>2012-08-08 09:28:13 +0200
commitca9795c30a9c94fb6b9dd3391546f3332f65b4f2 (patch)
tree358ac985d9b56f0c84bd5c98511229767348a240
parentdc2fa246a946aa7ce9bdf7ad82cc18ebae05a76d (diff)
downloadmpd-ca9795c30a9c94fb6b9dd3391546f3332f65b4f2.tar.gz
mpd-ca9795c30a9c94fb6b9dd3391546f3332f65b4f2.tar.xz
mpd-ca9795c30a9c94fb6b9dd3391546f3332f65b4f2.zip
conf: add a "database" block
The new block overrides the "db_file" setting, and allows configuring any database plugin.
-rw-r--r--doc/user.xml119
-rw-r--r--src/conf.c1
-rw-r--r--src/main.c24
3 files changed, 138 insertions, 6 deletions
diff --git a/doc/user.xml b/doc/user.xml
index fdfbc4419..942e5c767 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -165,6 +165,53 @@ systemctl start mpd.socket</programlisting>
</section>
<section>
+ <title>Configuring database plugins</title>
+
+ <para>
+ If a music directory is configured, one database plugin is
+ used. To configure this plugin, add a
+ <varname>database</varname> block to
+ <filename>mpd.conf</filename>:
+ </para>
+
+ <programlisting>database {
+ plugin "simple"
+ path "/var/lib/mpd/db"
+}
+ </programlisting>
+
+ <para>
+ The following table lists the <varname>database</varname>
+ options valid for all plugins:
+ </para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Name
+ </entry>
+ <entry>
+ Description
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <varname>plugin</varname>
+ </entry>
+ <entry>
+ The name of the plugin.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+
+ <section>
<title>Configuring input plugins</title>
<para>
@@ -618,6 +665,78 @@ systemctl start mpd.socket</programlisting>
<title>Plugin reference</title>
<section>
+ <title>Database plugins</title>
+
+ <section>
+ <title><varname>simple</varname></title>
+
+ <para>
+ The default plugin. Stores a copy of the database in
+ memory. A file is used for permanent storage.
+ </para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Setting</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <varname>path</varname>
+ </entry>
+ <entry>
+ The path of the database file.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+
+ <section>
+ <title><varname>proxy</varname></title>
+
+ <para>
+ Provides access to the database of another MPD instance
+ using <filename>libmpdclient</filename>. Experimental!
+ </para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Setting</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <varname>host</varname>
+ </entry>
+ <entry>
+ The host name of the "master" MPD instance.
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <varname>port</varname>
+ </entry>
+ <entry>
+ The port number of the "master" MPD instance.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+ </section>
+
+ <section>
<title>Input plugins</title>
<section>
diff --git a/src/conf.c b/src/conf.c
index 167f2da92..5f12d84d9 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -102,6 +102,7 @@ static struct config_entry config_entries[] = {
{ .name = CONF_DESPOTIFY_PASSWORD, false, false},
{ .name = CONF_DESPOTIFY_HIGH_BITRATE, false, false },
{ .name = "filter", true, true },
+ { .name = "database", false, true },
};
static bool
diff --git a/src/main.c b/src/main.c
index 00bbf7202..8b34bdad4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -154,35 +154,47 @@ glue_mapper_init(GError **error_r)
static bool
glue_db_init_and_load(void)
{
+ const struct config_param *param = config_get_param("database");
const struct config_param *path = config_get_param(CONF_DB_FILE);
+ if (param != NULL && path != NULL)
+ g_message("Found both 'database' and '" CONF_DB_FILE
+ "' setting - ignoring the latter");
+
GError *error = NULL;
bool ret;
if (!mapper_has_music_directory()) {
+ if (param != NULL)
+ g_message("Found database setting without "
+ CONF_MUSIC_DIR " - disabling database");
if (path != NULL)
g_message("Found " CONF_DB_FILE " setting without "
CONF_MUSIC_DIR " - disabling database");
return true;
}
- if (path == NULL)
- MPD_ERROR(CONF_DB_FILE " setting missing");
+ struct config_param *allocated = NULL;
- struct config_param *param = config_new_param("database", path->line);
- config_add_block_param(param, "path", path->value, path->line);
+ if (param == NULL && path != NULL) {
+ allocated = config_new_param("database", path->line);
+ config_add_block_param(allocated, "path",
+ path->value, path->line);
+ param = allocated;
+ }
if (!db_init(param, &error))
MPD_ERROR("%s", error->message);
- config_param_free(param);
+ if (allocated != NULL)
+ config_param_free(allocated);
ret = db_load(&error);
if (!ret)
MPD_ERROR("%s", error->message);
/* run database update after daemonization? */
- return db_exists();
+ return !db_is_simple() || db_exists();
}
/**