From 6c31f5fe7a417ba904b7c31aa5065363a8f9d94b Mon Sep 17 00:00:00 2001 From: redsky17 Date: Sat, 26 Jan 2019 18:03:49 +0000 Subject: [PATCH] Add initial support for QtIndenticon Add initial loading of qt jdenticon plugin: https://github.com/redsky17/qt-jdenticon Currently, the library's functionality has not been integrated into the rest of nheko. Next step is to add a configuration item in the User Settings and use the plugin to generate avatars for users without their own picture. These avatars should be cached in the Cache object. --- CMakeLists.txt | 3 +++ includes/jdenticoninterface.h | 17 +++++++++++++++++ src/MainWindow.cpp | 29 +++++++++++++++++++++++++++++ src/MainWindow.h | 6 ++++++ 4 files changed, 55 insertions(+) create mode 100644 includes/jdenticoninterface.h 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 + +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 #include #include +#include #include @@ -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(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; };