From eb1d340f2d98e65b1859fd103658f2671569c342 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Wed, 11 Nov 2020 11:21:30 +0100 Subject: PluginRequirement -> IPluginRequirement and minor fixes. --- src/plugincontainer.cpp | 32 ++++++++++++++++++++++++-------- src/plugincontainer.h | 17 ++++------------- 2 files changed, 28 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index aa38803f..9045e457 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -61,7 +61,7 @@ QString PluginRequirementProxy::description(unsigned int id) const { return m_Requirement->description(id); } -PluginRequirementProxy::PluginRequirementProxy(const MOBase::PluginRequirement* requirement, OrganizerProxy* proxy) : +PluginRequirementProxy::PluginRequirementProxy(const MOBase::IPluginRequirement* requirement, OrganizerProxy* proxy) : m_Requirement(requirement), m_Proxy(proxy) { } @@ -203,14 +203,18 @@ bool PluginContainer::initPlugin(IPlugin *plugin) auto* proxy = new OrganizerProxy(m_Organizer, this, plugin); m_Proxies[plugin] = proxy; + // Create requirements before init() in case a plugin use + // IOrganizer::isPluginEnabled on himself during init(). + m_Requirements.emplace(plugin, 0); + if (!plugin->init(proxy)) { log::warn("plugin failed to initialize"); return false; } - } - for (auto* requirement : plugin->requirements()) { - m_Requirements[plugin].emplace_back(requirement); + for (auto* requirement : plugin->requirements()) { + m_Requirements[plugin].emplace_back(requirement); + } } return true; @@ -230,6 +234,9 @@ bool PluginContainer::initProxyPlugin(IPlugin *plugin) m_Proxies[plugin] = proxy; } + // Create requirements before init() in case a plugin use + // IOrganizer::isPluginEnabled on himself during init(). + m_Requirements.emplace(plugin, 0); if (!plugin->init(proxy)) { log::warn("proxy plugin failed to initialize"); return false; @@ -420,7 +427,7 @@ bool PluginContainer::isEnabled(IPlugin* plugin) const } // Check if the plugin is enabled: - if (!m_Organizer->pluginSetting(plugin->name(), "enabled").toBool()) { + if (!m_Organizer->persistent(plugin->name(), "enabled", true).toBool()) { return false; } @@ -465,9 +472,18 @@ MOBase::IPlugin* PluginContainer::plugin(MOBase::IPluginFileMapper* mapper) cons return it->second; } -bool PluginContainer::isEnabled(QString const& pluginName) const { return isEnabled(plugin(pluginName)); } -bool PluginContainer::isEnabled(MOBase::IPluginDiagnose* diagnose) const { return isEnabled(plugin(diagnose)); } -bool PluginContainer::isEnabled(MOBase::IPluginFileMapper* mapper) const { return isEnabled(plugin(mapper)); } +bool PluginContainer::isEnabled(QString const& pluginName) const { + IPlugin* p = plugin(pluginName); + return p ? isEnabled(p) : false; +} +bool PluginContainer::isEnabled(MOBase::IPluginDiagnose* diagnose) const { + IPlugin* p = plugin(diagnose); + return p ? isEnabled(p) : false; +} +bool PluginContainer::isEnabled(MOBase::IPluginFileMapper* mapper) const { + IPlugin* p = plugin(mapper); + return p ? isEnabled(p) : false; +} std::vector PluginContainer::requirements(IPlugin* plugin) const { diff --git a/src/plugincontainer.h b/src/plugincontainer.h index 1a3173fb..26ad2046 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -38,10 +38,10 @@ public: private: - const MOBase::PluginRequirement* m_Requirement; + const MOBase::IPluginRequirement* m_Requirement; OrganizerProxy* m_Proxy; - PluginRequirementProxy(const MOBase::PluginRequirement* requirement, OrganizerProxy* proxy); + PluginRequirementProxy(const MOBase::IPluginRequirement* requirement, OrganizerProxy* proxy); friend class PluginContainer; @@ -160,16 +160,7 @@ public: return false; } - // Find all the names: - bool implement = false; - boost::mp11::mp_for_each([oPlugin, &implement](const auto* p) { - using plugin_type = std::decay_t; - if (qobject_cast(oPlugin)) { - implement = true; - } - }); - - return implement; + return qobject_cast(oPlugin); } /** @@ -278,7 +269,7 @@ private: AccessPluginMap m_AccessPlugins; std::map m_Proxies; - std::map>> m_Requirements; + std::map>> m_Requirements; std::map m_SupportedGames; std::vector m_DiagnosisConnections; -- cgit v1.3.1