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 --- src/browser.cpp | 29 +++++++++++++++++++++++++++++ src/interfaces.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/testplugin.cpp | 31 +++++++++++++++++++++++++++++++ src/testplugin.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 src/interfaces.h create mode 100644 src/testplugin.cpp create mode 100644 src/testplugin.h (limited to 'src') 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