archive/List: add option to disable archive plugins in mpd.conf
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1384
This commit is contained in:
@@ -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 },
|
||||
|
Reference in New Issue
Block a user