summaryrefslogtreecommitdiff
path: root/src/plugincontainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugincontainer.cpp')
-rw-r--r--src/plugincontainer.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index 8c2ece76..7884498c 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -101,6 +101,10 @@ QStringList PluginContainer::pluginInterfaces()
// PluginRequirementProxy
+const std::set<QString> PluginRequirements::s_CorePlugins{
+ "INI Bakery"
+};
+
PluginRequirements::PluginRequirements(
PluginContainer* pluginContainer, MOBase::IPlugin* plugin, IOrganizer* proxy,
MOBase::IPluginProxy* pluginProxy)
@@ -193,6 +197,16 @@ bool PluginRequirements::canEnable() const
return problems().empty();
}
+bool PluginRequirements::isCorePlugin() const
+{
+ // Let's consider game plugins as "core":
+ if (m_PluginContainer->implementInterface<IPluginGame>(m_Plugin)) {
+ return true;
+ }
+
+ return s_CorePlugins.contains(m_Plugin->name());
+}
+
bool PluginRequirements::hasRequirements() const
{
return !m_Requirements.empty();
@@ -405,7 +419,11 @@ bool PluginContainer::initPlugin(IPlugin *plugin, IPluginProxy *pluginProxy, boo
auto [it, bl] = m_Requirements.emplace(plugin, PluginRequirements(this, plugin, proxy, pluginProxy));
- if (!skipInit && !plugin->init(proxy)) {
+ if (skipInit) {
+ return true;
+ }
+
+ if (!plugin->init(proxy)) {
log::warn("plugin failed to initialize");
return false;
}