summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-11-11 11:21:30 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2020-11-11 20:29:58 +0100
commiteb1d340f2d98e65b1859fd103658f2671569c342 (patch)
treee66de7bbe0325998e65e0a99a3335978e29bd697
parent6ee74831f7d6e0ac15d42fe0fcb211321615d684 (diff)
PluginRequirement -> IPluginRequirement and minor fixes.
-rw-r--r--src/plugincontainer.cpp32
-rw-r--r--src/plugincontainer.h17
2 files changed, 28 insertions, 21 deletions
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<PluginRequirementProxy> 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<PluginTypeOrder>([oPlugin, &implement](const auto* p) {
- using plugin_type = std::decay_t<decltype(*p)>;
- if (qobject_cast<plugin_type*>(oPlugin)) {
- implement = true;
- }
- });
-
- return implement;
+ return qobject_cast<T*>(oPlugin);
}
/**
@@ -278,7 +269,7 @@ private:
AccessPluginMap m_AccessPlugins;
std::map<MOBase::IPlugin*, OrganizerProxy*> m_Proxies;
- std::map<MOBase::IPlugin*, std::vector<std::unique_ptr<const MOBase::PluginRequirement>>> m_Requirements;
+ std::map<MOBase::IPlugin*, std::vector<std::unique_ptr<const MOBase::IPluginRequirement>>> m_Requirements;
std::map<QString, MOBase::IPluginGame*> m_SupportedGames;
std::vector<boost::signals2::connection> m_DiagnosisConnections;