From d2e193ff78c491f7108476b00340aea97f4feed3 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 25 Dec 2020 09:14:00 -0500 Subject: Add jdenticon support --- src/JdenticonProvider.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/JdenticonProvider.cpp (limited to 'src/JdenticonProvider.cpp') diff --git a/src/JdenticonProvider.cpp b/src/JdenticonProvider.cpp new file mode 100644 index 00000000..4be972dc --- /dev/null +++ b/src/JdenticonProvider.cpp @@ -0,0 +1,68 @@ +#include "JdenticonProvider.h" + +#include +#include +#include +#include +#include + +#include + +#include "Cache.h" +#include "Logging.h" +#include "MatrixClient.h" +#include "Utils.h" +#include "jdenticoninterface.h" + +JdenticonResponse::JdenticonResponse(const QString &key, const QSize &requestedSize) + : m_key(key) + , m_requestedSize(requestedSize.isValid() ? requestedSize : QSize(100, 100)) + , m_pixmap{m_requestedSize} + , jdenticonInterface_{Jdenticon::getJdenticonInterface()} +{ + setAutoDelete(false); +} + +void +JdenticonResponse::run() +{ + m_pixmap.fill(Qt::transparent); + QPainter painter{&m_pixmap}; + QSvgRenderer renderer{ + jdenticonInterface_->generate(m_key, m_requestedSize.width()).toUtf8()}; + // m_image = QImage::fromData(jdenticonInterface_->generate(m_key, + // size->width()).toUtf8()); + renderer.render(&painter); + + emit finished(); +} + +namespace Jdenticon { +JdenticonInterface * +getJdenticonInterface() +{ + static JdenticonInterface *interface = nullptr; + + if (interface == nullptr) { + QDir pluginsDir(qApp->applicationDirPath()); + + bool plugins = pluginsDir.cd("plugins"); + if (plugins) { + for (QString fileName : pluginsDir.entryList(QDir::Files)) { + QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = pluginLoader.instance(); + if (plugin) { + interface = qobject_cast(plugin); + if (interface) { + nhlog::ui()->info("Loaded jdenticon plugin."); + break; + } + } + } + } else + nhlog::ui()->info("jdenticon plugin not found."); + } + + return interface; +} +} -- cgit 1.5.1