From 5dc6151910f5583d1abe559337a6cd89139b149e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 22 Jun 2017 20:35:07 +0200 Subject: Also load slightly more complex mails. And convert simple html to plaintext. --- framework/src/domain/composercontroller.cpp | 2 +- framework/src/domain/mime/mailtemplates.cpp | 22 +++++++++++++++++----- framework/src/domain/mime/mailtemplates.h | 1 + 3 files changed, 19 insertions(+), 6 deletions(-) (limited to 'framework') diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index 9e006af4..43701d36 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -337,7 +337,7 @@ void ComposerController::setMessage(const KMime::Message::Ptr &msg) mBccModel->setStringList(getStringListFromAddresses(msg->bcc(true)->asUnicodeString())); setSubject(msg->subject(true)->asUnicodeString()); - setBody(msg->body()); + setBody(MailTemplates::plaintextContent(msg)); //TODO use ObjecTreeParser to get encrypted attachments as well foreach (const auto &att, msg->attachments()) { diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp index cb298231..5d91a7f0 100644 --- a/framework/src/domain/mime/mailtemplates.cpp +++ b/framework/src/domain/mime/mailtemplates.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -784,11 +785,6 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio auto definedLocale = QLocale::system(); - //TODO set empty source instead - MimeTreeParser::ObjectTreeParser otp; - otp.setAllowAsync(false); - otp.parseObjectTree(origMsg.data()); - //Add quoted body QString plainBody; QString htmlBody; @@ -803,6 +799,8 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio //Strip signature for replies const bool stripSignature = true; + MimeTreeParser::ObjectTreeParser otp; + otp.parseObjectTree(origMsg.data()); const auto plainTextContent = otp.plainTextContent(); const auto htmlContent = otp.htmlContent(); @@ -832,3 +830,17 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio }); }); } + +QString MailTemplates::plaintextContent(const KMime::Message::Ptr &msg) +{ + MimeTreeParser::ObjectTreeParser otp; + otp.parseObjectTree(msg.data()); + const auto plain = otp.plainTextContent(); + if (plain.isEmpty()) { + //Maybe not as good as the webengine version, but works at least for simple html content + QTextDocument doc; + doc.setHtml(otp.htmlContent()); + return doc.toPlainText(); + } + return plain; +} diff --git a/framework/src/domain/mime/mailtemplates.h b/framework/src/domain/mime/mailtemplates.h index db269c96..4f559bb6 100644 --- a/framework/src/domain/mime/mailtemplates.h +++ b/framework/src/domain/mime/mailtemplates.h @@ -26,4 +26,5 @@ namespace MailTemplates { void reply(const KMime::Message::Ptr &origMsg, const std::function &callback); + QString plaintextContent(const KMime::Message::Ptr &origMsg); }; -- cgit v1.2.3