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