summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mime/messageparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/domain/mime/messageparser.cpp')
-rw-r--r--framework/src/domain/mime/messageparser.cpp32
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
31class MessagePartPrivate 28class MessagePartPrivate
32{ 29{
@@ -54,19 +51,16 @@ QVariant MessageParser::message() const
54void MessageParser::setMessage(const QVariant &message) 51void 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
72QString MessageParser::rawContent() const 66QString MessageParser::rawContent() const