diff options
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | includes/jdenticoninterface.h | 17 | ||||
-rw-r--r-- | src/MainWindow.cpp | 29 | ||||
-rw-r--r-- | src/MainWindow.h | 6 |
4 files changed, 55 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 515e49d8..45a63829 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -282,6 +282,9 @@ include_directories(SYSTEM ${TWEENY_INCLUDE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${Boost_INCLUDE_DIRS}) +# local inclue directory +include_directories(includes) + qt5_wrap_cpp(MOC_HEADERS # Dialogs src/dialogs/CreateRoom.h diff --git a/includes/jdenticoninterface.h b/includes/jdenticoninterface.h new file mode 100644 index 00000000..2108a726 --- /dev/null +++ b/includes/jdenticoninterface.h @@ -0,0 +1,17 @@ +#ifndef JDENTICONINTERFACE_H +#define JDENTICONINTERFACE_H + +#include <QString> + +class JdenticonInterface +{ +public: + virtual ~JdenticonInterface() {} + virtual QString generate(const QString &message, uint16_t size) = 0; +}; + +#define JdenticonInterface_iid "redsky17.Qt.JdenticonInterface" + +Q_DECLARE_INTERFACE(JdenticonInterface, JdenticonInterface_iid) + +#endif // JDENTICONINTERFACE_H diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2e062c0c..8da7d659 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -19,6 +19,7 @@ #include <QLayout> #include <QSettings> #include <QShortcut> +#include <QPluginLoader> #include <mtx/requests.hpp> @@ -166,6 +167,10 @@ MainWindow::MainWindow(QWidget *parent) showChatPage(); } + + if (loadJdenticonPlugin()) { + nhlog::ui()->info("loaded jdenticon."); + } } void @@ -479,3 +484,27 @@ MainWindow::showDialog(QWidget *dialog) dialog->raise(); dialog->show(); } + +bool +MainWindow::loadJdenticonPlugin() +{ + QDir pluginsDir(qApp->applicationDirPath()); + + bool plugins = pluginsDir.cd("plugins"); + if (plugins) { + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { + QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = pluginLoader.instance(); + if (plugin) { + jdenticonInteface_ = qobject_cast<JdenticonInterface *>(plugin); + if (jdenticonInteface_) { + nhlog::ui()->info("Found jdenticon plugin."); + return true; + } + } + } + } + + nhlog::ui()->info("jdenticon plugin not found."); + return false; +} \ No newline at end of file diff --git a/src/MainWindow.h b/src/MainWindow.h index 2336a929..1aadbf4d 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -31,6 +31,8 @@ #include "dialogs/UserProfile.h" #include "ui/OverlayModal.h" +#include "jdenticoninterface.h" + class ChatPage; class LoadingIndicator; class OverlayModal; @@ -129,6 +131,8 @@ private slots: void removeOverlayProgressBar(); private: + bool loadJdenticonPlugin(); + void showDialog(QWidget *dialog); bool hasActiveUser(); void restoreWindowSize(); @@ -158,4 +162,6 @@ private: //! Overlay modal used to project other widgets. OverlayModal *modal_ = nullptr; LoadingIndicator *spinner_ = nullptr; + + JdenticonInterface *jdenticonInteface_ = nullptr; }; |