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 @@ -411,7 +411,7 @@ if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } renderSubParts(mp, htmlWriter); @@ -428,7 +428,7 @@ HTMLBlock::Ptr rBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } if (mp->isRoot()) { @@ -468,7 +468,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } const auto html = t->render(&c); htmlWriter->queue(html); @@ -497,7 +497,7 @@ QString bodyText = processHtml(mp->mBodyHTML, extraHead); if (isHtmlPreferred) { - mp->mOtp->nodeHelper()->setNodeDisplayedEmbedded(mp->mNode, true); + mp->mOtp->nodeHelper()->setNodeDisplayedEmbedded(mp->content(), true); mOldWriter->extraHead(extraHead); } @@ -520,7 +520,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } const auto html = t->render(&c); htmlWriter->queue(html); @@ -530,7 +530,7 @@ QString DefaultRendererPrivate::renderEncrypted(const EncryptedMessagePart::Ptr &mp) { - KMime::Content *node = mp->mNode; + KMime::Content *node = mp->content(); const auto metaData = *mp->partMetaData(); Grantlee::Template t = MessageViewer::MessagePartRendererManager::self()->loadByName(QStringLiteral( @@ -584,7 +584,7 @@ QString DefaultRendererPrivate::renderSigned(const SignedMessagePart::Ptr &mp) { - KMime::Content *node = mp->mNode; + KMime::Content *node = mp->content(); const auto metaData = *mp->partMetaData(); auto cryptoProto = mp->mCryptoProto; @@ -840,7 +840,7 @@ if (mp->isAttachment()) { aBlock = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), - mp->attachmentNode())); + mp->attachmentContent())); } htmlWriter->queue(renderSigned(mp)); } @@ -850,7 +850,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } if (mp->hasSubParts()) { renderSubParts(mp, htmlWriter); @@ -875,7 +875,7 @@ if (mp->isAttachment()) { aBlock = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), - mp->attachmentNode())); + mp->attachmentContent())); } htmlWriter->queue(renderEncrypted(mp)); } @@ -886,7 +886,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } if (mp->hasSubParts()) { @@ -908,7 +908,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } auto mode = mp->preferredMode(); @@ -962,7 +962,7 @@ HTMLBlock::Ptr aBlock; if (mp->isAttachment()) { aBlock - = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentNode())); + = HTMLBlock::Ptr(new AttachmentMarkBlock(htmlWriter.data(), mp->attachmentContent())); } const auto html = t->render(&c); htmlWriter->queue(html); diff --git a/messageviewer/src/messagepartthemes/default/partrendered.cpp b/messageviewer/src/messagepartthemes/default/partrendered.cpp --- a/messageviewer/src/messagepartthemes/default/partrendered.cpp +++ b/messageviewer/src/messagepartthemes/default/partrendered.cpp @@ -169,7 +169,7 @@ : mHtml(html) { mShowAttachmentBlock = mp->isAttachment(); - mAttachmentNode = mp->attachmentNode(); + mAttachmentNode = mp->attachmentContent(); } HtmlOnlyPartRendered::~HtmlOnlyPartRendered() @@ -205,7 +205,7 @@ : mShowAttachmentBlock(false) , mAttachmentNode(nullptr) { - auto node = mp->mNode; + auto node = mp->content(); auto nodeHelper = mp->mOtp->nodeHelper(); if (mp->isHidden()) { @@ -240,7 +240,7 @@ mShowAttachmentBlock = mp->isAttachment(); mHtml = t->render(&c); - mAttachmentNode = mp->attachmentNode(); + mAttachmentNode = mp->attachmentContent(); } TextPartRendered::~TextPartRendered() diff --git a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.cpp @@ -48,7 +48,7 @@ return QSharedPointer(); } - KMime::Content *node = mp->mNode; + KMime::Content *node = mp->content(); NodeHelper *nodeHelper = mp->mOtp->nodeHelper(); if (mp->isHidden()) { diff --git a/mimetreeparser/src/viewer/messagepart.h b/mimetreeparser/src/viewer/messagepart.h --- a/mimetreeparser/src/viewer/messagepart.h +++ b/mimetreeparser/src/viewer/messagepart.h @@ -85,7 +85,18 @@ virtual QString plaintextContent() const; virtual QString htmlContent() const; - void setAttachmentFlag(KMime::Content *node); + /** The KMime::Content* node that's represented by this part. + * Can be @c nullptr, e.g. for sub-parts of an inline signed body part. + */ + KMime::Content *content() const; + void setContent(KMime::Content *node); + + /** The KMime::Content* node that's the source of this part. + * This is not necessarily the same as content(), for example for + * broken-up multipart nodes. + */ + KMime::Content *attachmentContent() const; + void setAttachmentContent(KMime::Content *node); bool isAttachment() const; void setIsRoot(bool root); @@ -104,7 +115,6 @@ bool hasSubParts() const; Interface::ObjectTreeSource *source() const; - KMime::Content *attachmentNode() const; protected: void parseInternal(KMime::Content *node, bool onlyOneMimePart); @@ -144,7 +154,6 @@ QString plaintextContent() const override; QString htmlContent() const override; private: - KMime::Content *mNode; bool mOnlyOneMimePart; friend class AlternativeMessagePart; @@ -188,9 +197,6 @@ bool showLink() const; bool showTextFrame() const; -protected: - KMime::Content *mNode = nullptr; - private: void parseContent(); @@ -241,7 +247,6 @@ bool isHtml() const override; private: - KMime::Content *mNode; Interface::ObjectTreeSource *mSource; QString mBodyHTML; QByteArray mCharset; @@ -270,8 +275,6 @@ void fix() const override; private: - KMime::Content *mNode; - Util::HtmlMode mPreferredMode; QMap mChildNodes; @@ -293,7 +296,6 @@ QString text() const override; private: - KMime::Content *mNode; bool mAutoImport; GpgME::ImportResult mImportResult; const QGpgME::Protocol *mCryptoProto; @@ -313,7 +315,6 @@ void fix() const override; private: const KMime::Message::Ptr mMessage; - KMime::Content *mNode; friend class DefaultRendererPrivate; }; @@ -362,7 +363,6 @@ bool mNoSecKey; const QGpgME::Protocol *mCryptoProto; QString mFromAddress; - KMime::Content *mNode = nullptr; bool mDecryptMessage; QByteArray mVerifiedText; std::vector mDecryptRecipients; @@ -406,7 +406,6 @@ protected: const QGpgME::Protocol *mCryptoProto; QString mFromAddress; - KMime::Content *mNode = nullptr; QByteArray mVerifiedText; friend EncryptedMessagePart; diff --git a/mimetreeparser/src/viewer/messagepart.cpp b/mimetreeparser/src/viewer/messagepart.cpp --- a/mimetreeparser/src/viewer/messagepart.cpp +++ b/mimetreeparser/src/viewer/messagepart.cpp @@ -57,6 +57,7 @@ public: MessagePart *mParentPart = nullptr; QVector mBlocks; + KMime::Content *mNode = nullptr; KMime::Content *mAttachmentNode = nullptr; QString mText; PartMetaData mMetaData; @@ -98,17 +99,27 @@ return &d->mMetaData; } -void MessagePart::setAttachmentFlag(KMime::Content *node) +KMime::Content *MessagePart::content() const { - d->mAttachmentNode = node; + return d->mNode; } -bool MessagePart::isAttachment() const +void MessagePart::setContent(KMime::Content *node) +{ + d->mNode = node; +} + +KMime::Content* MessagePart::attachmentContent() const { return d->mAttachmentNode; } -KMime::Content *MessagePart::attachmentNode() const +void MessagePart::setAttachmentContent(KMime::Content *node) +{ + d->mAttachmentNode = node; +} + +bool MessagePart::isAttachment() const { return d->mAttachmentNode; } @@ -258,18 +269,18 @@ TextMessagePart::TextMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool drawFrame, bool showLink, bool decryptMessage) : MessagePartList(otp) - , mNode(node) , mDrawFrame(drawFrame) , mShowLink(showLink) , mDecryptMessage(decryptMessage) , mIsHidden(false) { - if (!mNode) { + if (!node) { qCWarning(MIMETREEPARSER_LOG) << "not a valid node"; return; } - mIsHidden = mOtp->nodeHelper()->isNodeDisplayedHidden(mNode); + setContent(node); + mIsHidden = mOtp->nodeHelper()->isNodeDisplayedHidden(node); parseContent(); } @@ -285,11 +296,11 @@ void TextMessagePart::parseContent() { - const auto aCodec = mOtp->codecFor(mNode); - const QString &fromAddress = mOtp->nodeHelper()->fromAsString(mNode); + const auto aCodec = mOtp->codecFor(content()); + const QString &fromAddress = mOtp->nodeHelper()->fromAsString(content()); mSignatureState = KMMsgNotSigned; mEncryptionState = KMMsgNotEncrypted; - const auto blocks = prepareMessageForDecryption(mNode->decodedContent()); + const auto blocks = prepareMessageForDecryption(content()->decodedContent()); const auto cryptProto = QGpgME::openpgp(); @@ -421,22 +432,22 @@ IconType AttachmentMessagePart::asIcon() const { const AttachmentStrategy *const as = mOtp->attachmentStrategy(); - const bool defaultHidden(as && as->defaultDisplay(mNode) == AttachmentStrategy::None); + const bool defaultHidden(as && as->defaultDisplay(content()) == AttachmentStrategy::None); const bool showOnlyOneMimePart(mOtp->showOnlyOneMimePart()); auto preferredMode = source()->preferredMode(); bool isHtmlPreferred = (preferredMode == Util::Html) || (preferredMode == Util::MultipartHtml); QByteArray mediaType("text"); - if (mNode->contentType(false) && !mNode->contentType()->mediaType().isEmpty() - && !mNode->contentType()->subType().isEmpty()) { - mediaType = mNode->contentType()->mediaType(); + if (content()->contentType(false) && !content()->contentType()->mediaType().isEmpty() + && !content()->contentType()->subType().isEmpty()) { + mediaType = content()->contentType()->mediaType(); } const bool isTextPart = (mediaType == QByteArrayLiteral("text")); bool defaultAsIcon = true; if (!neverDisplayInline()) { if (as) { - defaultAsIcon = as->defaultDisplay(mNode) == AttachmentStrategy::AsIcon; + defaultAsIcon = as->defaultDisplay(content()) == AttachmentStrategy::AsIcon; } } if (isImage() && showOnlyOneMimePart && !neverDisplayInline()) { @@ -449,17 +460,17 @@ } if (isTextPart) { - if (as && as->defaultDisplay(mNode) != AttachmentStrategy::Inline) { + if (as && as->defaultDisplay(content()) != AttachmentStrategy::Inline) { return MimeTreeParser::IconExternal; } return MimeTreeParser::NoIcon; } else { if (isImage() && isHtmlPreferred - && mNode->parent() && mNode->parent()->contentType()->subType() == "related") { + && content()->parent() && content()->parent()->contentType()->subType() == "related") { return MimeTreeParser::IconInline; } - if (defaultHidden && !showOnlyOneMimePart && mNode->parent()) { + if (defaultHidden && !showOnlyOneMimePart && content()->parent()) { return MimeTreeParser::IconInline; } @@ -479,21 +490,21 @@ return false; // never hide when only showing one part, otherwise you'll see nothing const AttachmentStrategy *const as = mOtp->attachmentStrategy(); - const bool defaultHidden(as && as->defaultDisplay(mNode) == AttachmentStrategy::None); + const bool defaultHidden(as && as->defaultDisplay(content()) == AttachmentStrategy::None); auto preferredMode = source()->preferredMode(); bool isHtmlPreferred = (preferredMode == Util::Html) || (preferredMode == Util::MultipartHtml); QByteArray mediaType("text"); - if (mNode->contentType(false) && !mNode->contentType()->mediaType().isEmpty() - && !mNode->contentType()->subType().isEmpty()) { - mediaType = mNode->contentType()->mediaType(); + if (content()->contentType(false) && !content()->contentType()->mediaType().isEmpty() + && !content()->contentType()->subType().isEmpty()) { + mediaType = content()->contentType()->mediaType(); } const bool isTextPart = (mediaType == QByteArrayLiteral("text")); bool defaultAsIcon = true; if (!neverDisplayInline()) { if (as) { - defaultAsIcon = as->defaultDisplay(mNode) == AttachmentStrategy::AsIcon; + defaultAsIcon = as->defaultDisplay(content()) == AttachmentStrategy::AsIcon; } } @@ -507,32 +518,32 @@ hidden = defaultHidden; } else { if (isImage() && isHtmlPreferred - && mNode->parent() && mNode->parent()->contentType()->subType() == "related") { + && content()->parent() && content()->parent()->contentType()->subType() == "related") { hidden = true; } else { - hidden = defaultHidden && mNode->parent(); + hidden = defaultHidden && content()->parent(); hidden |= defaultAsIcon && defaultHidden; } } - mOtp->nodeHelper()->setNodeDisplayedHidden(mNode, hidden); + mOtp->nodeHelper()->setNodeDisplayedHidden(content(), hidden); return hidden; } //-----HtmlMessageBlock---------------------- HtmlMessagePart::HtmlMessagePart(ObjectTreeParser *otp, KMime::Content *node, Interface::ObjectTreeSource *source) : MessagePart(otp, QString()) - , mNode(node) , mSource(source) { - if (!mNode) { + if (!node) { qCWarning(MIMETREEPARSER_LOG) << "not a valid node"; return; } + setContent(node); - const QByteArray partBody(mNode->decodedContent()); - mBodyHTML = mOtp->codecFor(mNode)->toUnicode(partBody); - mCharset = NodeHelper::charset(mNode); + const QByteArray partBody(node->decodedContent()); + mBodyHTML = mOtp->codecFor(node)->toUnicode(partBody); + mCharset = NodeHelper::charset(node); } HtmlMessagePart::~HtmlMessagePart() @@ -559,15 +570,15 @@ MimeMessagePart::MimeMessagePart(ObjectTreeParser *otp, KMime::Content *node, bool onlyOneMimePart) : MessagePart(otp, QString()) - , mNode(node) , mOnlyOneMimePart(onlyOneMimePart) { - if (!mNode) { + if (!node) { qCWarning(MIMETREEPARSER_LOG) << "not a valid node"; return; } + setContent(node); - parseInternal(mNode, mOnlyOneMimePart); + parseInternal(node, mOnlyOneMimePart); } MimeMessagePart::~MimeMessagePart() @@ -593,27 +604,27 @@ AlternativeMessagePart::AlternativeMessagePart(ObjectTreeParser *otp, KMime::Content *node, Util::HtmlMode preferredMode) : MessagePart(otp, QString()) - , mNode(node) , mPreferredMode(preferredMode) { - KMime::Content *dataIcal = findTypeInDirectChilds(mNode, "text/calendar"); - KMime::Content *dataHtml = findTypeInDirectChilds(mNode, "text/html"); - KMime::Content *dataText = findTypeInDirectChilds(mNode, "text/plain"); + setContent(node); + KMime::Content *dataIcal = findTypeInDirectChilds(node, "text/calendar"); + KMime::Content *dataHtml = findTypeInDirectChilds(node, "text/html"); + KMime::Content *dataText = findTypeInDirectChilds(node, "text/plain"); if (!dataHtml) { // If we didn't find the HTML part as the first child of the multipart/alternative, it might // be that this is a HTML message with images, and text/plain and multipart/related are the // immediate children of this multipart/alternative node. // In this case, the HTML node is a child of multipart/related. - dataHtml = findTypeInDirectChilds(mNode, "multipart/related"); + dataHtml = findTypeInDirectChilds(node, "multipart/related"); // Still not found? Stupid apple mail actually puts the attachments inside of the // multipart/alternative, which is wrong. Therefore we also have to look for multipart/mixed // here. // Do this only when prefering HTML mail, though, since otherwise the attachments are hidden // when displaying plain text. if (!dataHtml) { - dataHtml = findTypeInDirectChilds(mNode, "multipart/mixed"); + dataHtml = findTypeInDirectChilds(node, "multipart/mixed"); } } @@ -698,14 +709,14 @@ CertMessagePart::CertMessagePart(ObjectTreeParser *otp, KMime::Content *node, const QGpgME::Protocol *cryptoProto, bool autoImport) : MessagePart(otp, QString()) - , mNode(node) , mAutoImport(autoImport) , mCryptoProto(cryptoProto) { - if (!mNode) { + if (!node) { qCWarning(MIMETREEPARSER_LOG) << "not a valid node"; return; } + setContent(node); if (!mAutoImport) { return; @@ -732,8 +743,8 @@ : MessagePart(otp, text) , mCryptoProto(cryptoProto) , mFromAddress(fromAddress) - , mNode(node) { + setContent(node); partMetaData()->technicalProblem = (mCryptoProto == nullptr); partMetaData()->isSigned = true; partMetaData()->isGoodSignature = false; @@ -768,7 +779,7 @@ const QByteArray mementoName = "verification"; - CryptoBodyPartMemento *m = dynamic_cast(nodeHelper->bodyPartMemento(mNode, mementoName)); + CryptoBodyPartMemento *m = dynamic_cast(nodeHelper->bodyPartMemento(content(), mementoName)); Q_ASSERT(!m || mCryptoProto); //No CryptoPlugin and having a bodyPartMemento -> there is something completely wrong if (!m && mCryptoProto) { @@ -794,7 +805,7 @@ } else { m->exec(); } - nodeHelper->setBodyPartMemento(mNode, mementoName, m); + nodeHelper->setBodyPartMemento(content(), mementoName, m); } } else if (m->isRunning()) { partMetaData()->inProgress = true; @@ -954,7 +965,7 @@ { startVerificationDetached(text, nullptr, QByteArray()); - if (!mNode && partMetaData()->isSigned) { + if (!content() && partMetaData()->isSigned) { setText(aCodec->toUnicode(mVerifiedText)); } } @@ -1003,10 +1014,10 @@ if (partMetaData()->isSigned) { sigStatusToMetaData(); - if (mNode) { - mOtp->nodeHelper()->setSignatureState(mNode, KMMsgFullySigned); + if (content()) { + mOtp->nodeHelper()->setSignatureState(content(), KMMsgFullySigned); if (!textNode) { - mOtp->nodeHelper()->setPartMetaData(mNode, *partMetaData()); + mOtp->nodeHelper()->setPartMetaData(content(), *partMetaData()); if (!mVerifiedText.isEmpty()) { auto tempNode = new KMime::Content(); @@ -1016,7 +1027,7 @@ if (!tempNode->head().isEmpty()) { tempNode->contentDescription()->from7BitString("signed data"); } - mOtp->nodeHelper()->attachExtraContent(mNode, tempNode); + mOtp->nodeHelper()->attachExtraContent(content(), tempNode); parseInternal(tempNode, false); } @@ -1027,16 +1038,16 @@ QString SignedMessagePart::plaintextContent() const { - if (!mNode) { + if (!content()) { return MessagePart::text(); } else { return QString(); } } QString SignedMessagePart::htmlContent() const { - if (!mNode) { + if (!content()) { return MessagePart::text(); } else { return QString(); @@ -1050,9 +1061,9 @@ , mNoSecKey(false) , mCryptoProto(cryptoProto) , mFromAddress(fromAddress) - , mNode(node) , mDecryptMessage(false) { + setContent(node); partMetaData()->technicalProblem = (mCryptoProto == nullptr); partMetaData()->isSigned = false; partMetaData()->isGoodSignature = false; @@ -1174,7 +1185,7 @@ partMetaData()->isSigned = verifyResult.signatures().size() > 0; if (verifyResult.signatures().size() > 0) { - auto subPart = SignedMessagePart::Ptr(new SignedMessagePart(mOtp, MessagePart::text(), mCryptoProto, mFromAddress, mNode)); + auto subPart = SignedMessagePart::Ptr(new SignedMessagePart(mOtp, MessagePart::text(), mCryptoProto, mFromAddress, content())); subPart->setVerificationResult(m, nullptr); appendSubPart(subPart); } @@ -1234,12 +1245,12 @@ void EncryptedMessagePart::startDecryption(KMime::Content *data) { - if (!mNode && !data) { + if (!content() && !data) { return; } if (!data) { - data = mNode; + data = content(); } partMetaData()->isEncrypted = true; @@ -1259,8 +1270,8 @@ partMetaData()->isDecryptable = true; } - if (mNode && !partMetaData()->isSigned) { - mOtp->nodeHelper()->setPartMetaData(mNode, *partMetaData()); + if (content() && !partMetaData()->isSigned) { + mOtp->nodeHelper()->setPartMetaData(content(), *partMetaData()); if (decryptMessage()) { auto tempNode = new KMime::Content(); @@ -1270,25 +1281,25 @@ if (!tempNode->head().isEmpty()) { tempNode->contentDescription()->from7BitString("encrypted data"); } - mOtp->nodeHelper()->attachExtraContent(mNode, tempNode); + mOtp->nodeHelper()->attachExtraContent(content(), tempNode); parseInternal(tempNode, false); } } } QString EncryptedMessagePart::plaintextContent() const { - if (!mNode) { + if (!content()) { return MessagePart::text(); } else { return QString(); } } QString EncryptedMessagePart::htmlContent() const { - if (!mNode) { + if (!content()) { return MessagePart::text(); } else { return QString(); @@ -1312,14 +1323,14 @@ EncapsulatedRfc822MessagePart::EncapsulatedRfc822MessagePart(ObjectTreeParser *otp, KMime::Content *node, const KMime::Message::Ptr &message) : MessagePart(otp, QString()) , mMessage(message) - , mNode(node) { + setContent(node); partMetaData()->isEncrypted = false; partMetaData()->isSigned = false; partMetaData()->isEncapsulatedRfc822Message = true; - mOtp->nodeHelper()->setNodeDisplayedEmbedded(mNode, true); - mOtp->nodeHelper()->setPartMetaData(mNode, *partMetaData()); + mOtp->nodeHelper()->setNodeDisplayedEmbedded(node, true); + mOtp->nodeHelper()->setPartMetaData(node, *partMetaData()); if (!mMessage) { qCWarning(MIMETREEPARSER_LOG) << "Node is of type message/rfc822 but doesn't have a message!"; diff --git a/mimetreeparser/src/viewer/objecttreeparser.cpp b/mimetreeparser/src/viewer/objecttreeparser.cpp --- a/mimetreeparser/src/viewer/objecttreeparser.cpp +++ b/mimetreeparser/src/viewer/objecttreeparser.cpp @@ -174,7 +174,7 @@ mParsedPart->fix(); if (auto mp = toplevelTextNode(mParsedPart)) { if (auto _mp = mp.dynamicCast()) { - extractNodeInfos(_mp->mNode, true); + extractNodeInfos(_mp->content(), true); } else if (auto _mp = mp.dynamicCast()) { if (_mp->mChildNodes.contains(Util::MultipartPlain)) { extractNodeInfos(_mp->mChildNodes[Util::MultipartPlain], true); @@ -221,16 +221,14 @@ processResult.setNeverDisplayInline(true); mNodeHelper->setNodeDisplayedEmbedded(node, false); auto mp = processType(node, processResult, QByteArrayLiteral("application/octet-stream"), onlyOneMimePart); - if (mp) { - mp->setAttachmentFlag(node); - } + mp->setAttachmentContent(node); return mp; } else if (r == Interface::BodyPartFormatter::Ok) { processResult.setNeverDisplayInline(true); return result; } } else { - result->setAttachmentFlag(node); + result->setAttachmentContent(node); return result; } }