diff --git a/messageviewer/src/viewer/messagepart.h b/messageviewer/src/viewer/messagepart.h --- a/messageviewer/src/viewer/messagepart.h +++ b/messageviewer/src/viewer/messagepart.h @@ -176,18 +176,23 @@ virtual QString text() const Q_DECL_OVERRIDE; void setText(const QString &text); virtual void html(bool decorate) Q_DECL_OVERRIDE; + void setAttachmentFlag(KMime::Content *node); + bool isAttachment() const; PartMetaData *partMetaData(); protected: void parseInternal(KMime::Content *node, bool onlyOneMimePart); void renderInternalHtml() const; void copyContentFrom() const; QString renderInternalText() const; + HTMLBlock::Ptr attachmentBlock() const; + QString mText; ObjectTreeParser *mOtp; ObjectTreeParser *mSubOtp; PartMetaData mMetaData; + KMime::Content *mAttachmentNode; }; class MimeMessagePart : public MessagePart @@ -221,6 +226,9 @@ const QVector &messageParts() const; +protected: + void htmlInternal(bool decorate); + private: QVector mBlocks; }; diff --git a/messageviewer/src/viewer/messagepart.cpp b/messageviewer/src/viewer/messagepart.cpp --- a/messageviewer/src/viewer/messagepart.cpp +++ b/messageviewer/src/viewer/messagepart.cpp @@ -372,6 +372,7 @@ : mText(text) , mOtp(otp) , mSubOtp(Q_NULLPTR) + , mAttachmentNode(Q_NULLPTR) { } @@ -390,6 +391,24 @@ return &mMetaData; } +void MessagePart::setAttachmentFlag(KMime::Content *node) +{ + mAttachmentNode = node; +} + +bool MessagePart::isAttachment() const +{ + return mAttachmentNode; +} + +HTMLBlock::Ptr MessagePart::attachmentBlock() const +{ + if (mOtp->htmlWriter() && isAttachment()) { + return HTMLBlock::Ptr(new AttachmentMarkBlock(mOtp->htmlWriter(), mAttachmentNode)); + } + return HTMLBlock::Ptr(); +} + QString MessagePart::text() const { return mText; @@ -408,6 +427,8 @@ return; } + const HTMLBlock::Ptr aBlock(attachmentBlock()); + const CryptoBlock block(mOtp, &mMetaData, Q_NULLPTR, QString(), Q_NULLPTR); writer->queue(mOtp->quotedHTML(text(), decorate)); } @@ -470,6 +491,13 @@ { MessageViewer::HtmlWriter *writer = mOtp->htmlWriter(); + const HTMLBlock::Ptr aBlock(attachmentBlock()); + + htmlInternal(decorate); +} + +void MessagePartList::htmlInternal(bool decorate) +{ foreach (const MessagePart::Ptr &mp, mBlocks) { mp->html(decorate); } @@ -600,16 +628,18 @@ void TextMessagePart::html(bool decorate) { + const HTMLBlock::Ptr aBlock(attachmentBlock()); HTMLBlock::Ptr block; MessageViewer::HtmlWriter *writer = mOtp->htmlWriter(); + if (mDrawFrame) { block = HTMLBlock::Ptr(new TextBlock(writer, mOtp->nodeHelper(), mNode, mShowLink)); } if (mAsIcon != MessageViewer::NoIcon) { mOtp->writePartIcon(mNode, (mAsIcon == MessageViewer::IconInline)); } else { - MessagePartList::html(decorate); + MessagePartList::htmlInternal(decorate); } } @@ -658,6 +688,7 @@ return; } + const HTMLBlock::Ptr aBlock(attachmentBlock()); HTMLBlock::Ptr block; if (mSource->htmlMail()) { @@ -738,6 +769,8 @@ void MimeMessagePart::html(bool decorate) { copyContentFrom(); + const HTMLBlock::Ptr aBlock(attachmentBlock()); + renderInternalHtml(); } @@ -799,6 +832,8 @@ return; } + const HTMLBlock::Ptr aBlock(attachmentBlock()); + if (viewHtml() && mHTMLPart) { mHTMLPart->copyContentFrom(); mHTMLPart->html(decorate); @@ -850,6 +885,9 @@ if (!writer) { return; } + + const HTMLBlock::Ptr aBlock(attachmentBlock()); + mOtp->writeCertificateImportResult(mImportResult); } @@ -1044,6 +1082,8 @@ return; } + const HTMLBlock::Ptr aBlock(attachmentBlock()); + if (mMetaData.isEncrypted && !mDecryptMessage) { const CryptoBlock block(mOtp, &mMetaData, mCryptoProto, mFromAddress, mNode); writeDeferredDecryptionBlock(); @@ -1119,6 +1159,8 @@ return; } + const HTMLBlock::Ptr aBlock(attachmentBlock()); + const CryptoBlock block(mOtp, &mMetaData, Q_NULLPTR, mMessage->from()->asUnicodeString(), mMessage.data()); writer->queue(mOtp->mSource->createMessageHeader(mMessage.data())); renderInternalHtml(); @@ -1130,4 +1172,3 @@ { return renderInternalText(); } - diff --git a/messageviewer/src/viewer/objecttreeparser.cpp b/messageviewer/src/viewer/objecttreeparser.cpp --- a/messageviewer/src/viewer/objecttreeparser.cpp +++ b/messageviewer/src/viewer/objecttreeparser.cpp @@ -358,7 +358,7 @@ } if (const auto mp = dynamic_cast(result.data())) { - AttachmentMarkBlock block(htmlWriter(), node); + mp->setAttachmentFlag(node); mp->html(false); bRendered = true; break; @@ -370,7 +370,7 @@ mNodeHelper->setNodeDisplayedEmbedded(node, false); const auto mp = defaultHandling(node, processResult); if (mp) { - AttachmentMarkBlock block(htmlWriter(), node); + mp->setAttachmentFlag(node); mp->html(false); } bRendered = true; @@ -386,7 +386,7 @@ qCCritical(MESSAGEVIEWER_LOG) << "THIS SHOULD NO LONGER HAPPEN:" << mediaType << '/' << subType; const auto mp = defaultHandling(node, processResult); if (mp) { - AttachmentMarkBlock block(htmlWriter(), node); + mp->setAttachmentFlag(node); mp->html(false); } }