diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/main.cpp b/src/main.cpp index 6940856..e0ba7eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,7 +7,6 @@ */ #include "browser.h" -#include "plugin.h" #include "session.h" #include "util.h" #include "version.h" @@ -17,6 +16,8 @@ #include <configuration/configuration.h> #include <iostream> #include <memory> +#include <QPluginLoader> +#include <plugininterface.h> #ifdef _WIN32 #include <cstdio> #include <windows.h> @@ -102,19 +103,23 @@ int main(int argc, char **argv) return 0; } - QVector<Plugin> plugins; + QVector<QPluginLoader *> plugins; + CommandHash_t pluginCommands; + for(const QString &path : Util::files(config->value<QString>("plugins.path").value())) { - plugins.append(loadPluginFromPath(path)); - } - QMap<QString, std::function<int()>> pluginCommands; - for(const auto &plugin : plugins) { - auto *pluginInterface = qobject_cast<PluginInterface *>(plugin.instance); - Q_CHECK_PTR(pluginInterface); - - QHashIterator<QString, std::function<int()>> i(pluginInterface->commands()); - while(i.hasNext()) { - i.next(); - pluginCommands.insert(i.key(), i.value()); + QPluginLoader *loader = new QPluginLoader(path); + const bool loaded = loader->load(); +#ifdef QT_DEBUG + qDebug("Loading plugin %s %s", qUtf8Printable(path), loaded ? "[ok]" : "[failed]"); +#endif + + if(loader->load()) { + plugins.append(loader); + auto *plugin = qobject_cast<PluginInterface *>(loader->instance()); + pluginCommands.unite(plugin->commands()); + } else { + qDebug("%s", qUtf8Printable(loader->errorString())); + delete loader; } } @@ -187,11 +192,7 @@ int main(int argc, char **argv) auto profile = config->value<QString>("profile.default"); app.setConfiguration(config); - app.setup(); - - for(const Plugin &plugin : plugins) { - app.registerPlugin(plugin); - } + app.setup(plugins); QStringList urls; if(arguments) { |