summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--includes/jdenticoninterface.h17
-rw-r--r--src/MainWindow.cpp29
-rw-r--r--src/MainWindow.h6
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;
 };