summaryrefslogtreecommitdiff
path: root/src/plugincontainer.cpp
diff options
context:
space:
mode:
authorBrian Munro <brian.alexander.munro@gmail.com>2018-05-08 12:47:54 +0200
committerGitHub <noreply@github.com>2018-05-08 12:47:54 +0200
commit0da6af17b2d6a6965849aa0effd5a1a876f447c4 (patch)
tree306056296c7a35504e85825ec6965b5193c74b24 /src/plugincontainer.cpp
parentbc75009169ecbf378fa90891dc8183a8cb3ef499 (diff)
parent44111d12c181ff062d7936480fdc380e33232e0e (diff)
Merge pull request #336 from Modorganizer2/Develop
Release 2.1.3
Diffstat (limited to 'src/plugincontainer.cpp')
-rw-r--r--src/plugincontainer.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index c980c0a1..8935c472 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -1,4 +1,5 @@
#include "plugincontainer.h"
+#include "organizercore.h"
#include "organizerproxy.h"
#include "report.h"
#include <ipluginproxy.h>
@@ -53,6 +54,12 @@ QStringList PluginContainer::pluginFileNames() const
for (QPluginLoader *loader : m_PluginLoaders) {
result.append(loader->fileName());
}
+ std::vector<IPluginProxy *> proxyList = bf::at_key<IPluginProxy>(m_Plugins);
+ for (IPluginProxy *proxy : proxyList) {
+ QStringList proxiedPlugins = proxy->pluginList(
+ QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()));
+ result.append(proxiedPlugins);
+ }
return result;
}
@@ -61,7 +68,7 @@ bool PluginContainer::verifyPlugin(IPlugin *plugin)
{
if (plugin == nullptr) {
return false;
- } else if (!plugin->init(new OrganizerProxy(m_Organizer, plugin->name()))) {
+ } else if (!plugin->init(new OrganizerProxy(m_Organizer, this, plugin->name()))) {
qWarning("plugin failed to initialize");
return false;
}
@@ -148,14 +155,18 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()));
for (const QString &pluginName : pluginNames) {
try {
- QObject *proxiedPlugin = proxy->instantiate(pluginName);
- if (proxiedPlugin != nullptr) {
- if (registerPlugin(proxiedPlugin, pluginName)) {
- qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName()));
- } else {
- qWarning("plugin \"%s\" failed to load. If this plugin is for an older version of MO "
- "you have to update it or delete it if no update exists.",
- qPrintable(pluginName));
+ // we get a list of matching plugins as proxies don't necessarily have a good way of supporting multiple inheritance
+ QList<QObject*> matchingPlugins = proxy->instantiate(pluginName);
+ for (QObject *proxiedPlugin : matchingPlugins) {
+ if (proxiedPlugin != nullptr) {
+ if (registerPlugin(proxiedPlugin, pluginName)) {
+ qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName()));
+ }
+ else {
+ qWarning("plugin \"%s\" failed to load. If this plugin is for an older version of MO "
+ "you have to update it or delete it if no update exists.",
+ qPrintable(pluginName));
+ }
}
}
} catch (const std::exception &e) {