diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-11-11 11:21:30 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-11-11 20:29:58 +0100 |
| commit | eb1d340f2d98e65b1859fd103658f2671569c342 (patch) | |
| tree | e66de7bbe0325998e65e0a99a3335978e29bd697 | |
| parent | 6ee74831f7d6e0ac15d42fe0fcb211321615d684 (diff) | |
PluginRequirement -> IPluginRequirement and minor fixes.
| -rw-r--r-- | src/plugincontainer.cpp | 32 | ||||
| -rw-r--r-- | src/plugincontainer.h | 17 |
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;
|
