diff --git a/messageviewer/src/messagepartthemes/default/autotests/showonlymimeparttest.cpp b/messageviewer/src/messagepartthemes/default/autotests/showonlymimeparttest.cpp --- a/messageviewer/src/messagepartthemes/default/autotests/showonlymimeparttest.cpp +++ b/messageviewer/src/messagepartthemes/default/autotests/showonlymimeparttest.cpp @@ -24,9 +24,9 @@ #include "setupenv.h" #include "testcsshelper.h" -#include #include #include +#include #include #include @@ -66,20 +66,20 @@ const KMime::Message::Ptr msg(Test::readAndParseMail(QStringLiteral("frametest.mbox"))); // render the mail - MimeTreeParser::FileHtmlWriter fileWriter(outFileName); + FileHtmlWriter fileWriter(outFileName); QImage paintDevice; Test::TestCSSHelper cssHelper(&paintDevice); MimeTreeParser::NodeHelper nodeHelper; Test::ObjectTreeSource testSource(&fileWriter, &cssHelper); - MimeTreeParser::ObjectTreeParser otp(&testSource, &nodeHelper, showOnlyMimePart); + MimeTreeParser::ObjectTreeParser otp(&testSource, &nodeHelper); fileWriter.begin(); fileWriter.write(cssHelper.htmlHead(false)); QVERIFY(msg->contents().size() > content); - otp.parseObjectTree(msg->contents().at(content)); + otp.parseObjectTree(msg->contents().at(content), showOnlyMimePart); fileWriter.write(QStringLiteral("")); fileWriter.end(); @@ -113,20 +113,20 @@ const KMime::Message::Ptr msg(Test::readAndParseMail(QStringLiteral("html-multipart-related.mbox"))); // render the mail - MimeTreeParser::FileHtmlWriter fileWriter(outFileName); + FileHtmlWriter fileWriter(outFileName); QImage paintDevice; Test::TestCSSHelper cssHelper(&paintDevice); MimeTreeParser::NodeHelper nodeHelper; Test::ObjectTreeSource testSource(&fileWriter, &cssHelper); - MimeTreeParser::ObjectTreeParser otp(&testSource, &nodeHelper, showOnlyMimePart); + MimeTreeParser::ObjectTreeParser otp(&testSource, &nodeHelper); fileWriter.begin(); fileWriter.write(cssHelper.htmlHead(false)); QVERIFY(msg->contents().size() > content); - otp.parseObjectTree(msg->contents().at(content)); + otp.parseObjectTree(msg->contents().at(content), showOnlyMimePart); fileWriter.write(QStringLiteral("")); fileWriter.end(); diff --git a/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp b/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp @@ -1018,6 +1018,11 @@ return MimeTreeParser::NoIcon; } +bool DefaultRendererPrivate::showOnlyOneMimePart() const +{ + return mShowOnlyOneMimePart; +} + DefaultRenderer::DefaultRenderer(CSSHelperBase *cssHelper) : d(new DefaultRendererPrivate(cssHelper, MessagePartRendererFactory::instance())) { diff --git a/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h b/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h --- a/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h +++ b/messageviewer/src/messagepartthemes/default/defaultrenderer_p.h @@ -58,6 +58,7 @@ bool isHiddenHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override; MimeTreeParser::IconType displayHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override; + bool showOnlyOneMimePart() const override; bool mShowOnlyOneMimePart = false; MimeTreeParser::MessagePart::Ptr mMsgPart; diff --git a/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h b/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h --- a/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h +++ b/messageviewer/src/messagepartthemes/default/messagepartrendererbase.h @@ -64,6 +64,7 @@ virtual bool isHiddenHint(const MimeTreeParser::MessagePart::Ptr &msgPart) = 0; virtual MimeTreeParser::IconType displayHint(const MimeTreeParser::MessagePart::Ptr &msgPart) = 0; + virtual bool showOnlyOneMimePart() const = 0; protected: virtual bool renderWithFactory(const QMetaObject *mo, const MimeTreeParser::MessagePart::Ptr &msgPart, HtmlWriter *writer) = 0; diff --git a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.cpp @@ -54,6 +54,7 @@ Grantlee::Template t; Grantlee::Context c = MessagePartRendererManager::self()->createContext(); c.insert(QStringLiteral("block"), msgPart.data()); + c.insert(QStringLiteral("showOnlyOneMimePart"), context->showOnlyOneMimePart()); c.insert(QStringLiteral("content"), QVariant::fromValue([mp, htmlWriter, context](Grantlee::OutputStream *) { context->renderSubParts(mp, htmlWriter); })); diff --git a/messageviewer/src/messagepartthemes/default/templates/textmessagepart.html b/messageviewer/src/messagepartthemes/default/templates/textmessagepart.html --- a/messageviewer/src/messagepartthemes/default/templates/textmessagepart.html +++ b/messageviewer/src/messagepartthemes/default/templates/textmessagepart.html @@ -2,7 +2,7 @@
{% endif %} -{% if block.showTextFrame %} +{% if not showOnlyOneMimePart and not block.isFirstTextPart and block.hasLabel %}
diff --git a/mimetreeparser/src/bodyformatter/textplain.cpp b/mimetreeparser/src/bodyformatter/textplain.cpp --- a/mimetreeparser/src/bodyformatter/textplain.cpp +++ b/mimetreeparser/src/bodyformatter/textplain.cpp @@ -43,16 +43,11 @@ KMime::Content *node = part.content(); const bool isFirstTextPart = (node->topLevel()->textContent() == node); - QString label = NodeHelper::fileName(node); - - const bool bDrawFrame = !isFirstTextPart - && !label.isEmpty(); - TextMessagePart::Ptr mp; if (isFirstTextPart) { - mp = TextMessagePart::Ptr(new TextMessagePart(part.objectTreeParser(), node, bDrawFrame, part.source()->decryptMessage())); + mp = TextMessagePart::Ptr(new TextMessagePart(part.objectTreeParser(), node, part.source()->decryptMessage())); } else { - mp = TextMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, bDrawFrame, part.source()->decryptMessage())); + mp = TextMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, part.source()->decryptMessage())); } part.processResult()->setInlineSignatureState(mp->signatureState()); diff --git a/mimetreeparser/src/bodypartformatter.cpp b/mimetreeparser/src/bodypartformatter.cpp --- a/mimetreeparser/src/bodypartformatter.cpp +++ b/mimetreeparser/src/bodypartformatter.cpp @@ -65,7 +65,7 @@ MessagePart::Ptr process(Interface::BodyPart &part) const override { KMime::Content *node = part.content(); - const auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, false, part.source()->decryptMessage())); + const auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, part.source()->decryptMessage())); part.processResult()->setInlineSignatureState(mp->signatureState()); part.processResult()->setInlineEncryptionState(mp->encryptionState()); part.processResult()->setNeverDisplayInline(true); @@ -100,7 +100,7 @@ MessagePart::Ptr process(Interface::BodyPart &part) const override { KMime::Content *node = part.content(); - auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, false, part.source()->decryptMessage())); + auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, part.source()->decryptMessage())); mp->setIsImage(true); part.processResult()->setInlineSignatureState(mp->signatureState()); part.processResult()->setInlineEncryptionState(mp->encryptionState()); diff --git a/mimetreeparser/src/messagepart.h b/mimetreeparser/src/messagepart.h --- a/mimetreeparser/src/messagepart.h +++ b/mimetreeparser/src/messagepart.h @@ -179,23 +179,24 @@ class MIMETREEPARSER_EXPORT TextMessagePart : public MessagePartList { Q_OBJECT - Q_PROPERTY(bool showTextFrame READ showTextFrame CONSTANT) Q_PROPERTY(bool showLink READ showLink CONSTANT) + Q_PROPERTY(bool isFirstTextPart READ isFirstTextPart CONSTANT) + Q_PROPERTY(bool hasLabel READ hasLabel CONSTANT) Q_PROPERTY(QString label READ label CONSTANT) Q_PROPERTY(QString comment READ comment CONSTANT) public: typedef QSharedPointer Ptr; - TextMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, bool drawFrame, bool decryptMessage); + TextMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, bool decryptMessage); virtual ~TextMessagePart(); KMMsgSignatureState signatureState() const; KMMsgEncryptionState encryptionState() const; bool decryptMessage() const; bool showLink() const; - bool showTextFrame() const; - void setShowTextFrame(bool showFrame); + bool isFirstTextPart() const; + bool hasLabel() const; /** The attachment filename, or the closest approximation thereof we have. */ QString label() const; @@ -209,7 +210,6 @@ KMMsgSignatureState mSignatureState; KMMsgEncryptionState mEncryptionState; - bool mDrawFrame; bool mDecryptMessage; friend class ObjectTreeParser; @@ -220,7 +220,7 @@ Q_OBJECT public: typedef QSharedPointer Ptr; - AttachmentMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, bool drawFrame, bool decryptMessage); + AttachmentMessagePart(MimeTreeParser::ObjectTreeParser *otp, KMime::Content *node, bool decryptMessage); virtual ~AttachmentMessagePart(); bool neverDisplayInline() const; diff --git a/mimetreeparser/src/messagepart.cpp b/mimetreeparser/src/messagepart.cpp --- a/mimetreeparser/src/messagepart.cpp +++ b/mimetreeparser/src/messagepart.cpp @@ -268,9 +268,8 @@ //-----TextMessageBlock---------------------- -TextMessagePart::TextMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool drawFrame, bool decryptMessage) +TextMessagePart::TextMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool decryptMessage) : MessagePartList(otp) - , mDrawFrame(drawFrame) , mDecryptMessage(decryptMessage) { if (!node) { @@ -384,14 +383,14 @@ return !temporaryFilePath().isEmpty(); } -bool TextMessagePart::showTextFrame() const +bool TextMessagePart::isFirstTextPart() const { - return mDrawFrame; + return content()->topLevel()->textContent() == content(); } -void TextMessagePart::setShowTextFrame(bool showFrame) +bool TextMessagePart::hasLabel() const { - mDrawFrame = showFrame; + return !NodeHelper::fileName(content()).isEmpty(); } QString TextMessagePart::label() const @@ -420,8 +419,8 @@ //-----AttachmentMessageBlock---------------------- -AttachmentMessagePart::AttachmentMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool drawFrame, bool decryptMessage) - : TextMessagePart(otp, node, drawFrame, decryptMessage) +AttachmentMessagePart::AttachmentMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool decryptMessage) + : TextMessagePart(otp, node, decryptMessage) , mIsImage(false) , mNeverDisplayInline(false) {