playlist_list: pass configuration to playlist plugins
This patch completes the configuration support.
This commit is contained in:
62
doc/user.xml
62
doc/user.xml
@ -391,6 +391,68 @@ cd mpd-version</programlisting>
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</informaltable>
|
</informaltable>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Configuring playlist plugins</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Playlist plugins are used to load remote playlists. This is
|
||||||
|
not related to MPD's playlist directory.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To configure a filter, add a
|
||||||
|
<varname>playlist_plugin</varname> block to
|
||||||
|
<filename>mpd.conf</filename>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting>playlist_plugin {
|
||||||
|
name "m3u"
|
||||||
|
enabled "true"
|
||||||
|
}
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following table lists the
|
||||||
|
<varname>playlist_plugin</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>name</varname>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
The name of the plugin.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
<varname>enabled</varname>
|
||||||
|
<parameter>yes|no</parameter>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Allows you to disable a input plugin without
|
||||||
|
recompiling. By default, all plugins are enabled.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
|
@ -90,6 +90,7 @@ static struct config_entry config_entries[] = {
|
|||||||
{ .name = CONF_DECODER, true, true },
|
{ .name = CONF_DECODER, true, true },
|
||||||
{ .name = CONF_INPUT, true, true },
|
{ .name = CONF_INPUT, true, true },
|
||||||
{ .name = CONF_GAPLESS_MP3_PLAYBACK, false, false },
|
{ .name = CONF_GAPLESS_MP3_PLAYBACK, false, false },
|
||||||
|
{ .name = CONF_PLAYLIST_PLUGIN, true, true },
|
||||||
{ .name = "filter", true, true },
|
{ .name = "filter", true, true },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
#define CONF_DECODER "decoder"
|
#define CONF_DECODER "decoder"
|
||||||
#define CONF_INPUT "input"
|
#define CONF_INPUT "input"
|
||||||
#define CONF_GAPLESS_MP3_PLAYBACK "gapless_mp3_playback"
|
#define CONF_GAPLESS_MP3_PLAYBACK "gapless_mp3_playback"
|
||||||
|
#define CONF_PLAYLIST_PLUGIN "playlist_plugin"
|
||||||
|
|
||||||
#define DEFAULT_PLAYLIST_MAX_LENGTH (1024*16)
|
#define DEFAULT_PLAYLIST_MAX_LENGTH (1024*16)
|
||||||
#define DEFAULT_PLAYLIST_SAVE_ABSOLUTE_PATHS false
|
#define DEFAULT_PLAYLIST_SAVE_ABSOLUTE_PATHS false
|
||||||
|
@ -23,10 +23,12 @@
|
|||||||
#include "input_stream.h"
|
#include "input_stream.h"
|
||||||
#include "uri.h"
|
#include "uri.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "conf.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static const struct playlist_plugin *const playlist_plugins[] = {
|
static const struct playlist_plugin *const playlist_plugins[] = {
|
||||||
&m3u_playlist_plugin,
|
&m3u_playlist_plugin,
|
||||||
@ -36,12 +38,48 @@ static const struct playlist_plugin *const playlist_plugins[] = {
|
|||||||
/** which plugins have been initialized successfully? */
|
/** which plugins have been initialized successfully? */
|
||||||
static bool playlist_plugins_enabled[G_N_ELEMENTS(playlist_plugins)];
|
static bool playlist_plugins_enabled[G_N_ELEMENTS(playlist_plugins)];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the "playlist" configuration block for the specified plugin.
|
||||||
|
*
|
||||||
|
* @param plugin_name the name of the playlist plugin
|
||||||
|
* @return the configuration block, or NULL if none was configured
|
||||||
|
*/
|
||||||
|
static const struct config_param *
|
||||||
|
playlist_plugin_config(const char *plugin_name)
|
||||||
|
{
|
||||||
|
const struct config_param *param = NULL;
|
||||||
|
|
||||||
|
assert(plugin_name != NULL);
|
||||||
|
|
||||||
|
while ((param = config_get_next_param(CONF_PLAYLIST_PLUGIN, param)) != NULL) {
|
||||||
|
const char *name =
|
||||||
|
config_get_block_string(param, "name", NULL);
|
||||||
|
if (name == NULL)
|
||||||
|
g_error("playlist configuration without 'plugin' name in line %d",
|
||||||
|
param->line);
|
||||||
|
|
||||||
|
if (strcmp(name, plugin_name) == 0)
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
playlist_list_global_init(void)
|
playlist_list_global_init(void)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i)
|
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) {
|
||||||
|
const struct playlist_plugin *plugin = playlist_plugins[i];
|
||||||
|
const struct config_param *param =
|
||||||
|
playlist_plugin_config(plugin->name);
|
||||||
|
|
||||||
|
if (!config_get_block_bool(param, "enabled", true))
|
||||||
|
/* the plugin is disabled in mpd.conf */
|
||||||
|
continue;
|
||||||
|
|
||||||
playlist_plugins_enabled[i] =
|
playlist_plugins_enabled[i] =
|
||||||
playlist_plugin_init(playlist_plugins[i], NULL);
|
playlist_plugin_init(playlist_plugins[i], param);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user