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.
pr
redsky17 2019-01-26 18:03:49 +00:00
parent 22a08ba6a4
commit 6c31f5fe7a
4 changed files with 55 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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;
};