diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-12-08 22:46:00 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-12-08 22:46:00 +0100 |
commit | a860b011d7b12ae17d278d36a30eaa7754b7a2ce (patch) | |
tree | 92becfc44c7dca901255282433abb594bff50e2f /framework/src/domain/mime/messageparser.cpp | |
parent | e2520f1208a826f39e958908755efb2e39ee3950 (diff) | |
download | kube-a860b011d7b12ae17d278d36a30eaa7754b7a2ce.tar.gz kube-a860b011d7b12ae17d278d36a30eaa7754b7a2ce.zip |
Always guard async callbacks
Diffstat (limited to 'framework/src/domain/mime/messageparser.cpp')
-rw-r--r-- | framework/src/domain/mime/messageparser.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/framework/src/domain/mime/messageparser.cpp b/framework/src/domain/mime/messageparser.cpp index 6dc880f3..bc7535ec 100644 --- a/framework/src/domain/mime/messageparser.cpp +++ b/framework/src/domain/mime/messageparser.cpp | |||
@@ -18,15 +18,12 @@ | |||
18 | */ | 18 | */ |
19 | #include "messageparser.h" | 19 | #include "messageparser.h" |
20 | 20 | ||
21 | #include <mimetreeparser/objecttreeparser.h> | ||
22 | |||
21 | #include "partmodel.h" | 23 | #include "partmodel.h" |
22 | #include "attachmentmodel.h" | 24 | #include "attachmentmodel.h" |
23 | #include "modeltest.h" | 25 | #include "modeltest.h" |
24 | #include <mimetreeparser/objecttreeparser.h> | 26 | #include "async.h" |
25 | |||
26 | #include <QDebug> | ||
27 | #include <QtConcurrent/QtConcurrentRun> | ||
28 | #include <QFuture> | ||
29 | #include <QFutureWatcher> | ||
30 | 27 | ||
31 | class MessagePartPrivate | 28 | class MessagePartPrivate |
32 | { | 29 | { |
@@ -54,19 +51,16 @@ QVariant MessageParser::message() const | |||
54 | void MessageParser::setMessage(const QVariant &message) | 51 | void MessageParser::setMessage(const QVariant &message) |
55 | { | 52 | { |
56 | mRawContent = message.toString(); | 53 | mRawContent = message.toString(); |
57 | auto future = QtConcurrent::run([message] { | 54 | asyncRun<std::shared_ptr<MimeTreeParser::ObjectTreeParser>>(this, [=] { |
58 | auto parser = std::make_shared<MimeTreeParser::ObjectTreeParser>(); | 55 | auto parser = std::make_shared<MimeTreeParser::ObjectTreeParser>(); |
59 | parser->parseObjectTree(message.toByteArray()); | 56 | parser->parseObjectTree(message.toByteArray()); |
60 | parser->decryptParts(); | 57 | parser->decryptParts(); |
61 | return parser; | 58 | return parser; |
62 | }); | 59 | }, |
63 | auto watcher = new QFutureWatcher<std::shared_ptr<MimeTreeParser::ObjectTreeParser>>; | 60 | [this](const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser) { |
64 | QObject::connect(watcher, &QFutureWatcher<std::shared_ptr<MimeTreeParser::ObjectTreeParser>>::finished, watcher, [this, watcher]() { | 61 | d->mParser = parser; |
65 | d->mParser = watcher->future().result(); | 62 | emit htmlChanged(); |
66 | delete watcher; | 63 | }); |
67 | emit htmlChanged(); | ||
68 | }); | ||
69 | watcher->setFuture(future); | ||
70 | } | 64 | } |
71 | 65 | ||
72 | QString MessageParser::rawContent() const | 66 | QString MessageParser::rawContent() const |