From 8cd62fde42a601d07cc47450b69ebb5ee60bd4b0 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 3 Jun 2017 13:24:14 +0200 Subject: Test plugin loading --- smolbote.qbs | 23 ++++++++++++++++++++++- src/browser.cpp | 29 +++++++++++++++++++++++++++++ src/interfaces.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/testplugin.cpp | 31 +++++++++++++++++++++++++++++++ src/testplugin.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 src/interfaces.h create mode 100644 src/testplugin.cpp create mode 100644 src/testplugin.h diff --git a/smolbote.qbs b/smolbote.qbs index 573706c..0ae87d5 100644 --- a/smolbote.qbs +++ b/smolbote.qbs @@ -58,6 +58,7 @@ Project { files: [ "src/browser.cpp", "src/browser.h", + "src/interfaces.h", "src/main.cpp", ] cpp.defines: { @@ -180,5 +181,25 @@ Project { qbs.install: true qbs.installDir: "share/smolbote" } - } + } // CppApplication poi + + DynamicLibrary { + id: testPlugin + name: "testPlugin" + Depends { name: "cpp" } + Depends { name: "Qt"; submodules: ["core", "widgets", "webengine", "webenginewidgets"] } + + files: [ + "src/interfaces.h", + "src/testplugin.cpp", + "src/testplugin.h", + ] + + Group { + fileTagsFilter: product.type + qbs.install: true + qbs.installDir: "lib/smolbote/plugins" + } + + } // DynamicLibrary testPlugin } diff --git a/src/browser.cpp b/src/browser.cpp index ca2b5d8..031bdb9 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -23,6 +23,10 @@ #include #include +#include +#include +#include "interfaces.h" + Browser::Browser(int &argc, char *argv[]) : QApplication(argc, argv) { @@ -108,6 +112,31 @@ bool Browser::prepare(QStringList urls) QtWebEngine::initialize(); + // Loading plugins + qDebug(">> Looking for plugins..."); + + // Look for plugins in "../lib/smolbote/plugins" + QDir dir = QDir::current(); + dir.cd("../lib/smolbote/plugins"); + + // Load all plugins + for(QString filename : dir.entryList(QDir::Files | QDir::Readable)) { + qDebug("Loading %s", qUtf8Printable(filename)); + + QPluginLoader loader(dir.absoluteFilePath(filename)); + QObject *plugin = loader.instance(); + if(plugin) { + PluginInterface *p = qobject_cast(plugin); + if(p) { + qDebug("Successfully loaded plugin [name = %s]", qUtf8Printable(p->name())); + } + } else { + qDebug("Plugin load failed"); + } + } + + qDebug("<< Plugins end..."); + // TODO properly profile(""); profile("Default"); diff --git a/src/interfaces.h b/src/interfaces.h new file mode 100644 index 0000000..8cf02fc --- /dev/null +++ b/src/interfaces.h @@ -0,0 +1,45 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see . + ** + ******************************************************************************/ + +#ifndef INTERFACES_H +#define INTERFACES_H + +#include + +class QString; +class QWidget; + +class PluginInterface +{ +public: + virtual QString name() const = 0; +}; + +class GuiInterface +{ +public: + virtual QWidget widget() const = 0; +}; + +#define PluginInterface_iid "net.iserlohn-fortress.poi.PluginInterface" + +Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid) + +#endif // INTERFACES_H diff --git a/src/testplugin.cpp b/src/testplugin.cpp new file mode 100644 index 0000000..10cab91 --- /dev/null +++ b/src/testplugin.cpp @@ -0,0 +1,31 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see . + ** + ******************************************************************************/ + +#include "testplugin.h" + +TestPlugin::TestPlugin(QObject *parent) : QObject(parent) +{ + +} + +QString TestPlugin::name() const +{ + return QString("Test Plugin"); +} diff --git a/src/testplugin.h b/src/testplugin.h new file mode 100644 index 0000000..eec3b1f --- /dev/null +++ b/src/testplugin.h @@ -0,0 +1,45 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see . + ** + ******************************************************************************/ + +#ifndef TESTPLUGIN_H +#define TESTPLUGIN_H + +#include +#include "interfaces.h" + +class TestPlugin : public QObject, + public PluginInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID PluginInterface_iid) + Q_INTERFACES(PluginInterface) + +public: + explicit TestPlugin(QObject *parent = nullptr); + + // PluginInterface + QString name() const override; + +signals: + +public slots: +}; + +#endif // TESTPLUGIN_H -- cgit v1.2.1