diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-17 19:50:42 -0600 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-17 20:02:44 -0600 |
commit | c7b87f89e02fb3b343e7fe023183a30786b49c77 (patch) | |
tree | 8720f88a34ee70977381b974e0c7f7c5cb17aa14 /framework/src/domain/mime/messageparser.cpp | |
parent | 223398c1671966c27923468502fb17d4583f9ac6 (diff) | |
download | kube-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.
Diffstat (limited to 'framework/src/domain/mime/messageparser.cpp')
-rw-r--r-- | framework/src/domain/mime/messageparser.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
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 | ||
28 | class MessagePartPrivate | 31 | class MessagePartPrivate |
29 | { | 32 | { |
@@ -50,11 +53,20 @@ QVariant MessageParser::message() const | |||
50 | 53 | ||
51 | void MessageParser::setMessage(const QVariant &message) | 54 | void 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 | ||
60 | QString MessageParser::rawContent() const | 72 | QString MessageParser::rawContent() const |