From a860b011d7b12ae17d278d36a30eaa7754b7a2ce Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 8 Dec 2017 22:46:00 +0100 Subject: Always guard async callbacks --- framework/src/domain/mime/messageparser.cpp | 32 ++++++++++++----------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'framework/src/domain/mime') 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 @@ */ #include "messageparser.h" +#include + #include "partmodel.h" #include "attachmentmodel.h" #include "modeltest.h" -#include - -#include -#include -#include -#include +#include "async.h" class MessagePartPrivate { @@ -54,19 +51,16 @@ QVariant MessageParser::message() const void MessageParser::setMessage(const QVariant &message) { mRawContent = message.toString(); - auto future = QtConcurrent::run([message] { - auto parser = std::make_shared(); - parser->parseObjectTree(message.toByteArray()); - parser->decryptParts(); - return parser; - }); - auto watcher = new QFutureWatcher>; - QObject::connect(watcher, &QFutureWatcher>::finished, watcher, [this, watcher]() { - d->mParser = watcher->future().result(); - delete watcher; - emit htmlChanged(); - }); - watcher->setFuture(future); + asyncRun>(this, [=] { + auto parser = std::make_shared(); + parser->parseObjectTree(message.toByteArray()); + parser->decryptParts(); + return parser; + }, + [this](const std::shared_ptr &parser) { + d->mParser = parser; + emit htmlChanged(); + }); } QString MessageParser::rawContent() const -- cgit v1.2.3