summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-17 19:50:42 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-17 20:02:44 -0600
commitc7b87f89e02fb3b343e7fe023183a30786b49c77 (patch)
tree8720f88a34ee70977381b974e0c7f7c5cb17aa14
parent223398c1671966c27923468502fb17d4583f9ac6 (diff)
downloadkube-c7b87f89e02fb3b343e7fe023183a30786b49c77.tar.gz
kube-c7b87f89e02fb3b343e7fe023183a30786b49c77.zip
Run the messageparsing in a thread
...with signatures a single message quickly takes 50 - 150ms, which is too long to be blocking.
-rw-r--r--framework/src/CMakeLists.txt2
-rw-r--r--framework/src/domain/mime/messageparser.cpp20
2 files changed, 17 insertions, 5 deletions
diff --git a/framework/src/CMakeLists.txt b/framework/src/CMakeLists.txt
index 8436705c..9c845022 100644
--- a/framework/src/CMakeLists.txt
+++ b/framework/src/CMakeLists.txt
@@ -1,5 +1,5 @@
1 1
2find_package(Qt5 COMPONENTS REQUIRED Core Quick Qml WebEngineWidgets Test) 2find_package(Qt5 COMPONENTS REQUIRED Core Concurrent Quick Qml WebEngineWidgets Test)
3find_package(KF5Mime "4.87.0" CONFIG REQUIRED) 3find_package(KF5Mime "4.87.0" CONFIG REQUIRED)
4find_package(Sink CONFIG REQUIRED) 4find_package(Sink CONFIG REQUIRED)
5find_package(KAsync CONFIG REQUIRED) 5find_package(KAsync CONFIG REQUIRED)
diff --git a/framework/src/domain/mime/messageparser.cpp b/framework/src/domain/mime/messageparser.cpp
index 1c31cbae..6dc880f3 100644
--- a/framework/src/domain/mime/messageparser.cpp
+++ b/framework/src/domain/mime/messageparser.cpp
@@ -24,6 +24,9 @@
24#include <mimetreeparser/objecttreeparser.h> 24#include <mimetreeparser/objecttreeparser.h>
25 25
26#include <QDebug> 26#include <QDebug>
27#include <QtConcurrent/QtConcurrentRun>
28#include <QFuture>
29#include <QFutureWatcher>
27 30
28class MessagePartPrivate 31class MessagePartPrivate
29{ 32{
@@ -50,11 +53,20 @@ QVariant MessageParser::message() const
50 53
51void MessageParser::setMessage(const QVariant &message) 54void MessageParser::setMessage(const QVariant &message)
52{ 55{
53 d->mParser = std::make_shared<MimeTreeParser::ObjectTreeParser>();
54 d->mParser->parseObjectTree(message.toByteArray());
55 d->mParser->decryptParts();
56 mRawContent = message.toString(); 56 mRawContent = message.toString();
57 emit htmlChanged(); 57 auto future = QtConcurrent::run([message] {
58 auto parser = std::make_shared<MimeTreeParser::ObjectTreeParser>();
59 parser->parseObjectTree(message.toByteArray());
60 parser->decryptParts();
61 return parser;
62 });
63 auto watcher = new QFutureWatcher<std::shared_ptr<MimeTreeParser::ObjectTreeParser>>;
64 QObject::connect(watcher, &QFutureWatcher<std::shared_ptr<MimeTreeParser::ObjectTreeParser>>::finished, watcher, [this, watcher]() {
65 d->mParser = watcher->future().result();
66 delete watcher;
67 emit htmlChanged();
68 });
69 watcher->setFuture(future);
58} 70}
59 71
60QString MessageParser::rawContent() const 72QString MessageParser::rawContent() const