diff options
-rw-r--r-- | src/PluginUnavailable.hxx | 13 | ||||
-rw-r--r-- | src/input/Init.cxx | 5 | ||||
-rw-r--r-- | src/input/plugins/QobuzInputPlugin.cxx | 8 | ||||
-rw-r--r-- | src/input/plugins/TidalInputPlugin.cxx | 6 |
4 files changed, 24 insertions, 8 deletions
diff --git a/src/PluginUnavailable.hxx b/src/PluginUnavailable.hxx index 379bd87bf..a29361ad4 100644 --- a/src/PluginUnavailable.hxx +++ b/src/PluginUnavailable.hxx @@ -27,9 +27,20 @@ * that this plugin is unavailable. It will be disabled, and MPD can * continue initialization. */ -class PluginUnavailable final : public std::runtime_error { +class PluginUnavailable : public std::runtime_error { public: using std::runtime_error::runtime_error; }; +/** + * Like #PluginUnavailable, but denotes that the plugin is not + * available because it was not explicitly enabled in the + * configuration. The message may describe the necessary steps to + * enable it. + */ +class PluginUnconfigured : public PluginUnavailable { +public: + using PluginUnavailable::PluginUnavailable; +}; + #endif diff --git a/src/input/Init.cxx b/src/input/Init.cxx index 3b714bf5c..e944ff697 100644 --- a/src/input/Init.cxx +++ b/src/input/Init.cxx @@ -58,6 +58,11 @@ input_stream_global_init(const ConfigData &config, EventLoop &event_loop) if (plugin->init != nullptr) plugin->init(event_loop, *block); input_plugins_enabled[i] = true; + } catch (const PluginUnconfigured &e) { + LogFormat(LogLevel::INFO, e, + "Input plugin '%s' is not configured", + plugin->name); + continue; } catch (const PluginUnavailable &e) { FormatError(e, "Input plugin '%s' is unavailable", diff --git a/src/input/plugins/QobuzInputPlugin.cxx b/src/input/plugins/QobuzInputPlugin.cxx index 31f60cb24..372a38752 100644 --- a/src/input/plugins/QobuzInputPlugin.cxx +++ b/src/input/plugins/QobuzInputPlugin.cxx @@ -133,11 +133,11 @@ InitQobuzInput(EventLoop &event_loop, const ConfigBlock &block) const char *app_id = block.GetBlockValue("app_id"); if (app_id == nullptr) - throw PluginUnavailable("No Qobuz app_id configured"); + throw PluginUnconfigured("No Qobuz app_id configured"); const char *app_secret = block.GetBlockValue("app_secret"); if (app_secret == nullptr) - throw PluginUnavailable("No Qobuz app_secret configured"); + throw PluginUnconfigured("No Qobuz app_secret configured"); const char *device_manufacturer_id = block.GetBlockValue("device_manufacturer_id", "df691fdc-fa36-11e7-9718-635337d7df8f"); @@ -145,11 +145,11 @@ InitQobuzInput(EventLoop &event_loop, const ConfigBlock &block) const char *username = block.GetBlockValue("username"); const char *email = block.GetBlockValue("email"); if (username == nullptr && email == nullptr) - throw PluginUnavailable("No Qobuz username configured"); + throw PluginUnconfigured("No Qobuz username configured"); const char *password = block.GetBlockValue("password"); if (password == nullptr) - throw PluginUnavailable("No Qobuz password configured"); + throw PluginUnconfigured("No Qobuz password configured"); const char *format_id = block.GetBlockValue("format_id", "5"); diff --git a/src/input/plugins/TidalInputPlugin.cxx b/src/input/plugins/TidalInputPlugin.cxx index 3592262b2..426244af9 100644 --- a/src/input/plugins/TidalInputPlugin.cxx +++ b/src/input/plugins/TidalInputPlugin.cxx @@ -170,15 +170,15 @@ InitTidalInput(EventLoop &event_loop, const ConfigBlock &block) const char *token = block.GetBlockValue("token"); if (token == nullptr) - throw PluginUnavailable("No Tidal application token configured"); + throw PluginUnconfigured("No Tidal application token configured"); const char *username = block.GetBlockValue("username"); if (username == nullptr) - throw PluginUnavailable("No Tidal username configured"); + throw PluginUnconfigured("No Tidal username configured"); const char *password = block.GetBlockValue("password"); if (password == nullptr) - throw PluginUnavailable("No Tidal password configured"); + throw PluginUnconfigured("No Tidal password configured"); FormatWarning(tidal_domain, "The Tidal input plugin is deprecated because Tidal has changed the protocol and doesn't share documentation"); |