From 2343f34b4f4c6ae46cd3d9f5d6535c8e05f27b74 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 18 Dec 2023 17:13:38 -0500 Subject: [PATCH] messaging: run previewengine on its own thread Change-Id: Iff267600c0802fbadedb58174b5fe65bbd1a443f --- src/app/previewengine.cpp | 12 ++++++++++++ src/app/previewengine.h | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/app/previewengine.cpp b/src/app/previewengine.cpp index 1f50ca8a0..8aa570eb2 100644 --- a/src/app/previewengine.cpp +++ b/src/app/previewengine.cpp @@ -18,6 +18,7 @@ #include "previewengine.h" #include <QRegularExpression> +#include <QThread> const QRegularExpression PreviewEngine::newlineRe("\\r?\\n"); @@ -25,10 +26,21 @@ PreviewEngine::PreviewEngine(ConnectivityMonitor* cm, QObject* parent) : NetworkManager(cm, parent) , htmlParser_(new HtmlParser(this)) { + // Run this object in a separate thread. + thread_ = new QThread(); + moveToThread(thread_); + thread_->start(); + // Connect on a queued connection to avoid blocking caller thread. connect(this, &PreviewEngine::parseLink, this, &PreviewEngine::onParseLink, Qt::QueuedConnection); } +PreviewEngine::~PreviewEngine() +{ + thread_->quit(); + thread_->wait(); +} + QString PreviewEngine::getTagContent(const QList<QString>& tags, const QString& value) { diff --git a/src/app/previewengine.h b/src/app/previewengine.h index 38435c636..0ba009e19 100644 --- a/src/app/previewengine.h +++ b/src/app/previewengine.h @@ -27,7 +27,7 @@ class PreviewEngine final : public NetworkManager Q_DISABLE_COPY(PreviewEngine) public: PreviewEngine(ConnectivityMonitor* cm, QObject* parent = nullptr); - ~PreviewEngine() = default; + ~PreviewEngine(); Q_SIGNALS: void parseLink(const QString& messageId, const QString& link); @@ -45,4 +45,6 @@ private: QString getImage(const QList<QString>& metaTags); static const QRegularExpression newlineRe; + + QThread* thread_; }; -- GitLab