archive/List: add option to disable archive plugins in mpd.conf
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1384
This commit is contained in:
parent
d3db0400b0
commit
fdc0329e64
2
NEWS
2
NEWS
|
@ -2,6 +2,8 @@ ver 0.24 (not yet released)
|
|||
* protocol
|
||||
- "playlistfind"/"playlistsearch" have "sort" and "window" parameters
|
||||
- filter "prio" (for "playlistfind"/"playlistsearch")
|
||||
* archive
|
||||
- add option to disable archive plugins in mpd.conf
|
||||
* player
|
||||
- add option "mixramp_analyzer" to scan MixRamp tags on-the-fly
|
||||
* tags
|
||||
|
|
|
@ -1395,6 +1395,8 @@ xspf
|
|||
Reads XSPF playlist files.
|
||||
|
||||
|
||||
.. _archive_plugins:
|
||||
|
||||
Archive plugins
|
||||
===============
|
||||
|
||||
|
|
29
doc/user.rst
29
doc/user.rst
|
@ -341,6 +341,35 @@ The following table lists the input options valid for all plugins:
|
|||
|
||||
More information can be found in the :ref:`input_plugins` reference.
|
||||
|
||||
Configuring archive plugins
|
||||
---------------------------
|
||||
|
||||
To configure an archive plugin, add an :code:`archive_plugin` block to
|
||||
:file:`mpd.conf`:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
archive_plugin {
|
||||
name "zzip"
|
||||
enabled "no"
|
||||
}
|
||||
|
||||
The following table lists the input options valid for all plugins:
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 80
|
||||
:header-rows: 1
|
||||
|
||||
* - Name
|
||||
- Description
|
||||
* - **name**
|
||||
- The name of the plugin
|
||||
* - **enabled yes|no**
|
||||
- Allows you to disable a plugin without recompiling. By
|
||||
default, all plugins are enabled.
|
||||
|
||||
More information can be found in the :ref:`archive_plugins` reference.
|
||||
|
||||
.. _input_cache:
|
||||
|
||||
Configuring the Input Cache
|
||||
|
|
|
@ -385,7 +385,7 @@ MainConfigured(const CommandLineOptions &options,
|
|||
initPermissions(raw_config);
|
||||
spl_global_init(raw_config);
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
const ScopeArchivePluginsInit archive_plugins_init;
|
||||
const ScopeArchivePluginsInit archive_plugins_init{raw_config};
|
||||
#endif
|
||||
|
||||
pcm_convert_global_init(raw_config);
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
#include "ArchiveList.hxx"
|
||||
#include "ArchivePlugin.hxx"
|
||||
#include "archive/Features.h"
|
||||
#include "config/Data.hxx"
|
||||
#include "config/Block.hxx"
|
||||
#include "util/StringUtil.hxx"
|
||||
#include "plugins/Bzip2ArchivePlugin.hxx"
|
||||
#include "plugins/Iso9660ArchivePlugin.hxx"
|
||||
|
@ -74,10 +76,21 @@ archive_plugin_from_name(const char *name) noexcept
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
void archive_plugin_init_all()
|
||||
void
|
||||
archive_plugin_init_all(const ConfigData &config)
|
||||
{
|
||||
ConfigBlock empty;
|
||||
|
||||
for (unsigned i = 0; archive_plugins[i] != nullptr; ++i) {
|
||||
const auto &plugin = *archive_plugins[i];
|
||||
|
||||
const auto *param =
|
||||
config.FindBlock(ConfigBlockOption::ARCHIVE_PLUGIN,
|
||||
"name", plugin.name);
|
||||
if (param != nullptr && !param->GetBlockValue("enabled", true))
|
||||
/* the plugin is disabled in mpd.conf */
|
||||
continue;
|
||||
|
||||
if (plugin.init == nullptr || plugin.init())
|
||||
archive_plugins_enabled[i] = true;
|
||||
}
|
||||
|
@ -86,8 +99,9 @@ void archive_plugin_init_all()
|
|||
void
|
||||
archive_plugin_deinit_all() noexcept
|
||||
{
|
||||
unsigned i = 0;
|
||||
archive_plugins_for_each_enabled(plugin)
|
||||
if (plugin->finish != nullptr)
|
||||
if (archive_plugins_enabled[i++] && plugin->finish != nullptr)
|
||||
plugin->finish();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include <string_view>
|
||||
|
||||
struct ConfigData;
|
||||
struct ArchivePlugin;
|
||||
|
||||
extern const ArchivePlugin *const archive_plugins[];
|
||||
|
@ -42,7 +43,7 @@ archive_plugin_from_name(const char *name) noexcept;
|
|||
|
||||
/* this is where we "load" all the "plugins" ;-) */
|
||||
void
|
||||
archive_plugin_init_all();
|
||||
archive_plugin_init_all(const ConfigData &config);
|
||||
|
||||
/* this is where we "unload" all the "plugins" */
|
||||
void
|
||||
|
@ -50,8 +51,8 @@ archive_plugin_deinit_all() noexcept;
|
|||
|
||||
class ScopeArchivePluginsInit {
|
||||
public:
|
||||
ScopeArchivePluginsInit() {
|
||||
archive_plugin_init_all();
|
||||
explicit ScopeArchivePluginsInit(const ConfigData &config) {
|
||||
archive_plugin_init_all(config);
|
||||
}
|
||||
|
||||
~ScopeArchivePluginsInit() noexcept {
|
||||
|
|
|
@ -91,6 +91,7 @@ enum class ConfigBlockOption {
|
|||
DECODER,
|
||||
INPUT,
|
||||
INPUT_CACHE,
|
||||
ARCHIVE_PLUGIN,
|
||||
PLAYLIST_PLUGIN,
|
||||
RESAMPLER,
|
||||
AUDIO_FILTER,
|
||||
|
|
|
@ -90,6 +90,7 @@ const ConfigTemplate config_block_templates[] = {
|
|||
{ "decoder", true },
|
||||
{ "input", true },
|
||||
{ "input_cache" },
|
||||
{ "archive_plugin", true },
|
||||
{ "playlist_plugin", true },
|
||||
{ "resampler" },
|
||||
{ "filter", true },
|
||||
|
|
|
@ -41,7 +41,7 @@ class GlobalInit {
|
|||
EventThread io_thread;
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
const ScopeArchivePluginsInit archive_plugins_init;
|
||||
const ScopeArchivePluginsInit archive_plugins_init{config};
|
||||
#endif
|
||||
|
||||
const ScopeInputPluginsInit input_plugins_init{config, io_thread.GetEventLoop()};
|
||||
|
|
|
@ -137,7 +137,7 @@ class GlobalInit {
|
|||
EventThread io_thread;
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
const ScopeArchivePluginsInit archive_plugins_init;
|
||||
const ScopeArchivePluginsInit archive_plugins_init{config};
|
||||
#endif
|
||||
|
||||
const ScopeInputPluginsInit input_plugins_init{config, io_thread.GetEventLoop()};
|
||||
|
|
|
@ -41,7 +41,7 @@ class GlobalInit {
|
|||
EventThread io_thread;
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
const ScopeArchivePluginsInit archive_plugins_init;
|
||||
const ScopeArchivePluginsInit archive_plugins_init{config};
|
||||
#endif
|
||||
|
||||
const ScopeInputPluginsInit input_plugins_init{config, io_thread.GetEventLoop()};
|
||||
|
|
Loading…
Reference in New Issue