diff --git a/messageviewer/src/messagepartthemes/default/autotests/rendertest.cpp b/messageviewer/src/messagepartthemes/default/autotests/rendertest.cpp --- a/messageviewer/src/messagepartthemes/default/autotests/rendertest.cpp +++ b/messageviewer/src/messagepartthemes/default/autotests/rendertest.cpp @@ -260,19 +260,16 @@ testRender(); } -QString renderTreeHelper(const MimeTreeParser::Interface::MessagePart::Ptr &messagePart, QString indent) +QString renderTreeHelper(const MimeTreeParser::MessagePart::Ptr &messagePart, QString indent) { const QString line = QStringLiteral("%1 * %3\n").arg(indent, QString::fromUtf8(messagePart->metaObject()->className())); QString ret = line; indent += QStringLiteral(" "); - const auto m = messagePart.dynamicCast(); - if (m) { - foreach (const auto &subPart, m->subParts()) { - ret += renderTreeHelper(subPart, indent); - } + foreach (const auto &subPart, messagePart->subParts()) { + ret += renderTreeHelper(subPart, indent); } return ret; } diff --git a/messageviewer/src/messagepartthemes/default/defaultrenderer.h b/messageviewer/src/messagepartthemes/default/defaultrenderer.h --- a/messageviewer/src/messagepartthemes/default/defaultrenderer.h +++ b/messageviewer/src/messagepartthemes/default/defaultrenderer.h @@ -27,19 +27,17 @@ namespace MimeTreeParser { class DefaultRendererPrivate; class HtmlWriter; -namespace Interface { class MessagePart; typedef QSharedPointer MessagePartPtr; } -} namespace MessageViewer { class CSSHelperBase; class DefaultRenderer : public MimeTreeParser::Interface::MessagePartRenderer { public: - DefaultRenderer(const MimeTreeParser::Interface::MessagePartPtr &msgPart, CSSHelperBase *cssHelder, MimeTreeParser::HtmlWriter *writer); + DefaultRenderer(const MimeTreeParser::MessagePartPtr &msgPart, CSSHelperBase *cssHelder, MimeTreeParser::HtmlWriter *writer); ~DefaultRenderer(); QString html() const override; 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 @@ -364,7 +364,7 @@ MimeTreeParser::HtmlWriter *mBaseWriter = nullptr; }; -DefaultRendererPrivate::DefaultRendererPrivate(const Interface::MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, HtmlWriter *writer, const MessagePartRendererFactory *rendererFactory) +DefaultRendererPrivate::DefaultRendererPrivate(const MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, HtmlWriter *writer, const MessagePartRendererFactory *rendererFactory) : mMsgPart(msgPart) , mOldWriter(writer) , mCSSHelper(cssHelper) @@ -384,20 +384,12 @@ CSSHelperBase *DefaultRendererPrivate::cssHelper() const { - auto mp = mMsgPart.dynamicCast(); - if (mp) { - return mCSSHelper; - } - return nullptr; + return mCSSHelper; } Interface::ObjectTreeSource *DefaultRendererPrivate::source() const { - auto mp = mMsgPart.dynamicCast(); - if (mp) { - return mp->source(); - } - return nullptr; + return mMsgPart->source(); } void DefaultRendererPrivate::renderSubParts(const MessagePart::Ptr &msgPart, const QSharedPointer &htmlWriter) @@ -539,7 +531,7 @@ QString DefaultRendererPrivate::renderEncrypted(const EncryptedMessagePart::Ptr &mp) { KMime::Content *node = mp->mNode; - const auto metaData = mp->mMetaData; + const auto metaData = *mp->partMetaData(); Grantlee::Template t = MessageViewer::MessagePartRendererManager::self()->loadByName(QStringLiteral( ":/encryptedmessagepart.html")); @@ -593,7 +585,7 @@ QString DefaultRendererPrivate::renderSigned(const SignedMessagePart::Ptr &mp) { KMime::Content *node = mp->mNode; - const auto metaData = mp->mMetaData; + const auto metaData = *mp->partMetaData(); auto cryptoProto = mp->mCryptoProto; const bool isSMIME = cryptoProto && (cryptoProto == QGpgME::smime()); @@ -841,7 +833,7 @@ QString DefaultRendererPrivate::render(const SignedMessagePart::Ptr &mp) { auto htmlWriter = QSharedPointer(new CacheHtmlWriter(mOldWriter)); - const auto metaData = mp->mMetaData; + const auto metaData = *mp->partMetaData(); if (metaData.isSigned || metaData.inProgress) { { HTMLBlock::Ptr aBlock; @@ -875,7 +867,7 @@ QString DefaultRendererPrivate::render(const EncryptedMessagePart::Ptr &mp) { auto htmlWriter = QSharedPointer(new CacheHtmlWriter(mOldWriter)); - const auto metaData = mp->mMetaData; + const auto metaData = *mp->partMetaData(); if (metaData.isEncrypted || metaData.inProgress) { { @@ -978,7 +970,7 @@ return htmlWriter->html; } -QSharedPointer DefaultRendererPrivate::renderWithFactory(QString className, const Interface::MessagePart::Ptr &msgPart) +QSharedPointer DefaultRendererPrivate::renderWithFactory(QString className, const MessagePart::Ptr &msgPart) { if (mRendererFactory) { const auto registry = mRendererFactory->typeRegistry(className); @@ -992,7 +984,7 @@ return QSharedPointer(); } -QString DefaultRendererPrivate::renderFactory(const Interface::MessagePart::Ptr &msgPart, const QSharedPointer &htmlWriter) +QString DefaultRendererPrivate::renderFactory(const MessagePart::Ptr &msgPart, const QSharedPointer &htmlWriter) { const QString className = QString::fromUtf8(msgPart->metaObject()->className()); @@ -1059,7 +1051,7 @@ return QString(); } -DefaultRenderer::DefaultRenderer(const MimeTreeParser::Interface::MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, MimeTreeParser::HtmlWriter *writer) +DefaultRenderer::DefaultRenderer(const MimeTreeParser::MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, MimeTreeParser::HtmlWriter *writer) : d(new MimeTreeParser::DefaultRendererPrivate(msgPart, cssHelper, writer, 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 @@ -39,7 +39,7 @@ class DefaultRendererPrivate { public: - DefaultRendererPrivate(const Interface::MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, HtmlWriter *writer, const MessagePartRendererFactory *rendererFactory); + DefaultRendererPrivate(const MessagePart::Ptr &msgPart, CSSHelperBase *cssHelper, HtmlWriter *writer, const MessagePartRendererFactory *rendererFactory); ~DefaultRendererPrivate(); QString alignText(); @@ -59,11 +59,11 @@ QString render(const EncryptedMessagePart::Ptr &mp); QString render(const AlternativeMessagePart::Ptr &mp); QString render(const CertMessagePart::Ptr &mp); - QSharedPointer renderWithFactory(QString className, const Interface::MessagePart::Ptr &msgPart); - QString renderFactory(const Interface::MessagePart::Ptr &msgPart, const QSharedPointer &htmlWriter); + QSharedPointer renderWithFactory(QString className, const MessagePart::Ptr &msgPart); + QString renderFactory(const MessagePart::Ptr &msgPart, const QSharedPointer &htmlWriter); QString mHtml; - Interface::MessagePart::Ptr mMsgPart; + MessagePart::Ptr mMsgPart; HtmlWriter *mOldWriter = nullptr; CSSHelperBase *mCSSHelper = nullptr; 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 @@ -39,20 +39,18 @@ namespace MimeTreeParser { class DefaultRendererPrivate; -namespace Interface { class MessagePart; typedef QSharedPointer MessagePartPtr; } -} class PartRendered; class MessagePartRendererBase { public: MessagePartRendererBase(); virtual ~MessagePartRendererBase(); - virtual QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *, const MimeTreeParser::Interface::MessagePartPtr &) + virtual QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *, const MimeTreeParser::MessagePartPtr &) const = 0; }; #endif diff --git a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/attachmentmessagepartrenderer.h @@ -29,7 +29,7 @@ public: AttachmentMessagePartRenderer(); virtual ~AttachmentMessagePartRenderer(); - QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) + QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const override; }; 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 @@ -40,7 +40,7 @@ { } -QSharedPointer AttachmentMessagePartRenderer::render(DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) +QSharedPointer AttachmentMessagePartRenderer::render(DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const { auto mp = msgPart.dynamicCast(); diff --git a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.h @@ -29,7 +29,7 @@ public: MessagePartRenderer(); virtual ~MessagePartRenderer(); - QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) + QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const override; }; diff --git a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/messagepartrenderer.cpp @@ -33,14 +33,9 @@ } QSharedPointer MessagePartRenderer::render( - MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) const + MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const { - auto mp = msgPart.dynamicCast(); - if (mp) { - return QSharedPointer(new HtmlOnlyPartRendered(mp, - quotedHTML(mp->text(), - mp->source(), + return QSharedPointer(new HtmlOnlyPartRendered(msgPart, quotedHTML(msgPart->text(), + msgPart->source(), drp->cssHelper()))); - } - return QSharedPointer(); } diff --git a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h --- a/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h +++ b/messageviewer/src/messagepartthemes/default/plugins/textmessagepartrenderer.h @@ -29,7 +29,7 @@ public: TextMessagePartRenderer(); virtual ~TextMessagePartRenderer(); - QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) + QSharedPointer render(MimeTreeParser::DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const override; }; 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 @@ -32,7 +32,7 @@ { } -QSharedPointer TextMessagePartRenderer::render(DefaultRendererPrivate *drp, const MimeTreeParser::Interface::MessagePartPtr &msgPart) +QSharedPointer TextMessagePartRenderer::render(DefaultRendererPrivate *drp, const MimeTreeParser::MessagePartPtr &msgPart) const { auto mp = msgPart.dynamicCast(); diff --git a/messageviewer/src/viewer/objecttreeemptysource.h b/messageviewer/src/viewer/objecttreeemptysource.h --- a/messageviewer/src/viewer/objecttreeemptysource.h +++ b/messageviewer/src/viewer/objecttreeemptysource.h @@ -52,7 +52,7 @@ bool showExpandQuotesMark() const override; const MimeTreeParser::BodyPartFormatterBaseFactory *bodyPartFormatterFactory() override; MimeTreeParser::Interface::MessagePartRendererPtr messagePartTheme( - MimeTreeParser::Interface::MessagePartPtr msgPart) override; + MimeTreeParser::MessagePartPtr msgPart) override; bool isPrinting() const override; private: EmptySourcePrivate *const d; diff --git a/messageviewer/src/viewer/objecttreeemptysource.cpp b/messageviewer/src/viewer/objecttreeemptysource.cpp --- a/messageviewer/src/viewer/objecttreeemptysource.cpp +++ b/messageviewer/src/viewer/objecttreeemptysource.cpp @@ -142,7 +142,7 @@ } MimeTreeParser::Interface::MessagePartRendererPtr EmptySource::messagePartTheme( - MimeTreeParser::Interface::MessagePart::Ptr msgPart) + MimeTreeParser::MessagePartPtr msgPart) { return MimeTreeParser::Interface::MessagePartRenderer::Ptr( new DefaultRenderer(msgPart, cssHelper(), htmlWriter())); diff --git a/messageviewer/src/viewer/objecttreeviewersource.h b/messageviewer/src/viewer/objecttreeviewersource.h --- a/messageviewer/src/viewer/objecttreeviewersource.h +++ b/messageviewer/src/viewer/objecttreeviewersource.h @@ -49,7 +49,7 @@ bool showExpandQuotesMark() const override; const MimeTreeParser::BodyPartFormatterBaseFactory *bodyPartFormatterFactory() override; MimeTreeParser::Interface::MessagePartRendererPtr messagePartTheme( - MimeTreeParser::Interface::MessagePartPtr msgPart) override; + MimeTreeParser::MessagePartPtr msgPart) override; bool isPrinting() const override; private: ViewerPrivate *mViewer = nullptr; diff --git a/messageviewer/src/viewer/objecttreeviewersource.cpp b/messageviewer/src/viewer/objecttreeviewersource.cpp --- a/messageviewer/src/viewer/objecttreeviewersource.cpp +++ b/messageviewer/src/viewer/objecttreeviewersource.cpp @@ -130,7 +130,7 @@ } MimeTreeParser::Interface::MessagePartRendererPtr MailViewerSource::messagePartTheme( - MimeTreeParser::Interface::MessagePart::Ptr msgPart) + MimeTreeParser::MessagePartPtr msgPart) { return MimeTreeParser::Interface::MessagePartRenderer::Ptr( new DefaultRenderer(msgPart, mViewer->cssHelper(), mViewer->htmlWriter())); diff --git a/mimetreeparser/autotests/setupenv.h b/mimetreeparser/autotests/setupenv.h --- a/mimetreeparser/autotests/setupenv.h +++ b/mimetreeparser/autotests/setupenv.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -148,7 +149,7 @@ return QString(); //do nothing } - Interface::MessagePartRenderer::Ptr messagePartTheme(Interface::MessagePart::Ptr msgPart) override + Interface::MessagePartRenderer::Ptr messagePartTheme(MessagePart::Ptr msgPart) override { Q_UNUSED(msgPart); return Interface::MessagePartRenderer::Ptr(); diff --git a/mimetreeparser/src/bodyformatter/applicationpgpencrypted.h b/mimetreeparser/src/bodyformatter/applicationpgpencrypted.h --- a/mimetreeparser/src/bodyformatter/applicationpgpencrypted.h +++ b/mimetreeparser/src/bodyformatter/applicationpgpencrypted.h @@ -28,7 +28,7 @@ { static const ApplicationPGPEncryptedBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/applicationpgpencrypted.cpp b/mimetreeparser/src/bodyformatter/applicationpgpencrypted.cpp --- a/mimetreeparser/src/bodyformatter/applicationpgpencrypted.cpp +++ b/mimetreeparser/src/bodyformatter/applicationpgpencrypted.cpp @@ -42,7 +42,7 @@ return self; } -Interface::MessagePart::Ptr ApplicationPGPEncryptedBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr ApplicationPGPEncryptedBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node(part.content()); diff --git a/mimetreeparser/src/bodyformatter/applicationpkcs7mime.h b/mimetreeparser/src/bodyformatter/applicationpkcs7mime.h --- a/mimetreeparser/src/bodyformatter/applicationpkcs7mime.h +++ b/mimetreeparser/src/bodyformatter/applicationpkcs7mime.h @@ -28,7 +28,7 @@ { static const ApplicationPkcs7MimeBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/applicationpkcs7mime.cpp b/mimetreeparser/src/bodyformatter/applicationpkcs7mime.cpp --- a/mimetreeparser/src/bodyformatter/applicationpkcs7mime.cpp +++ b/mimetreeparser/src/bodyformatter/applicationpkcs7mime.cpp @@ -45,7 +45,7 @@ return self; } -Interface::MessagePart::Ptr ApplicationPkcs7MimeBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr ApplicationPkcs7MimeBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); diff --git a/mimetreeparser/src/bodyformatter/mailman.h b/mimetreeparser/src/bodyformatter/mailman.h --- a/mimetreeparser/src/bodyformatter/mailman.h +++ b/mimetreeparser/src/bodyformatter/mailman.h @@ -28,7 +28,7 @@ { static const MailmanBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); private: diff --git a/mimetreeparser/src/bodyformatter/mailman.cpp b/mimetreeparser/src/bodyformatter/mailman.cpp --- a/mimetreeparser/src/bodyformatter/mailman.cpp +++ b/mimetreeparser/src/bodyformatter/mailman.cpp @@ -56,7 +56,7 @@ return false; } -Interface::MessagePart::Ptr MailmanBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MailmanBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *curNode = part.content(); diff --git a/mimetreeparser/src/bodyformatter/multipartalternative.h b/mimetreeparser/src/bodyformatter/multipartalternative.h --- a/mimetreeparser/src/bodyformatter/multipartalternative.h +++ b/mimetreeparser/src/bodyformatter/multipartalternative.h @@ -28,7 +28,7 @@ { static const MultiPartAlternativeBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/multipartalternative.cpp b/mimetreeparser/src/bodyformatter/multipartalternative.cpp --- a/mimetreeparser/src/bodyformatter/multipartalternative.cpp +++ b/mimetreeparser/src/bodyformatter/multipartalternative.cpp @@ -40,7 +40,7 @@ return self; } -Interface::MessagePart::Ptr MultiPartAlternativeBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MultiPartAlternativeBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); if (node->contents().isEmpty()) { diff --git a/mimetreeparser/src/bodyformatter/multipartencrypted.h b/mimetreeparser/src/bodyformatter/multipartencrypted.h --- a/mimetreeparser/src/bodyformatter/multipartencrypted.h +++ b/mimetreeparser/src/bodyformatter/multipartencrypted.h @@ -28,7 +28,7 @@ { static const MultiPartEncryptedBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/multipartencrypted.cpp b/mimetreeparser/src/bodyformatter/multipartencrypted.cpp --- a/mimetreeparser/src/bodyformatter/multipartencrypted.cpp +++ b/mimetreeparser/src/bodyformatter/multipartencrypted.cpp @@ -42,7 +42,7 @@ return self; } -Interface::MessagePart::Ptr MultiPartEncryptedBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MultiPartEncryptedBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); diff --git a/mimetreeparser/src/bodyformatter/multipartmixed.h b/mimetreeparser/src/bodyformatter/multipartmixed.h --- a/mimetreeparser/src/bodyformatter/multipartmixed.h +++ b/mimetreeparser/src/bodyformatter/multipartmixed.h @@ -28,7 +28,7 @@ { static const MultiPartMixedBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/multipartmixed.cpp b/mimetreeparser/src/bodyformatter/multipartmixed.cpp --- a/mimetreeparser/src/bodyformatter/multipartmixed.cpp +++ b/mimetreeparser/src/bodyformatter/multipartmixed.cpp @@ -38,7 +38,7 @@ return self; } -Interface::MessagePart::Ptr MultiPartMixedBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MultiPartMixedBodyPartFormatter::process(Interface::BodyPart &part) const { if (part.content()->contents().isEmpty()) { return MessagePart::Ptr(); diff --git a/mimetreeparser/src/bodyformatter/multipartsigned.h b/mimetreeparser/src/bodyformatter/multipartsigned.h --- a/mimetreeparser/src/bodyformatter/multipartsigned.h +++ b/mimetreeparser/src/bodyformatter/multipartsigned.h @@ -28,7 +28,7 @@ { static const MultiPartSignedBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/multipartsigned.cpp b/mimetreeparser/src/bodyformatter/multipartsigned.cpp --- a/mimetreeparser/src/bodyformatter/multipartsigned.cpp +++ b/mimetreeparser/src/bodyformatter/multipartsigned.cpp @@ -42,7 +42,7 @@ return self; } -Interface::MessagePart::Ptr MultiPartSignedBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MultiPartSignedBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); if (node->contents().size() != 2) { diff --git a/mimetreeparser/src/bodyformatter/texthtml.h b/mimetreeparser/src/bodyformatter/texthtml.h --- a/mimetreeparser/src/bodyformatter/texthtml.h +++ b/mimetreeparser/src/bodyformatter/texthtml.h @@ -28,7 +28,7 @@ { static const TextHtmlBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } diff --git a/mimetreeparser/src/bodyformatter/texthtml.cpp b/mimetreeparser/src/bodyformatter/texthtml.cpp --- a/mimetreeparser/src/bodyformatter/texthtml.cpp +++ b/mimetreeparser/src/bodyformatter/texthtml.cpp @@ -39,7 +39,7 @@ return self; } -Interface::MessagePart::Ptr TextHtmlBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr TextHtmlBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); HtmlMessagePart::Ptr mp(new HtmlMessagePart(part.objectTreeParser(), node, part.source())); diff --git a/mimetreeparser/src/bodyformatter/textplain.h b/mimetreeparser/src/bodyformatter/textplain.h --- a/mimetreeparser/src/bodyformatter/textplain.h +++ b/mimetreeparser/src/bodyformatter/textplain.h @@ -28,7 +28,7 @@ { static const TextPlainBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override; + MessagePartPtr process(Interface::BodyPart &part) const override; static const Interface::BodyPartFormatter *create(); }; } 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 @@ -39,7 +39,7 @@ return self; } -Interface::MessagePart::Ptr TextPlainBodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr TextPlainBodyPartFormatter::process(Interface::BodyPart &part) const { KMime::Content *node = part.content(); const bool isFirstTextPart = (node->topLevel()->textContent() == node); diff --git a/mimetreeparser/src/bodyformatter/utils.cpp b/mimetreeparser/src/bodyformatter/utils.cpp --- a/mimetreeparser/src/bodyformatter/utils.cpp +++ b/mimetreeparser/src/bodyformatter/utils.cpp @@ -59,8 +59,8 @@ return text; } else if (const auto alternative = mp.dynamicCast()) { return alternative; - } else if (const auto m = mp.dynamicCast()) { - auto ret = toplevelTextNode(m); + } else { + auto ret = toplevelTextNode(mp); if (ret) { return ret; } diff --git a/mimetreeparser/src/interfaces/bodypartformatter.h b/mimetreeparser/src/interfaces/bodypartformatter.h --- a/mimetreeparser/src/interfaces/bodypartformatter.h +++ b/mimetreeparser/src/interfaces/bodypartformatter.h @@ -43,33 +43,12 @@ namespace MimeTreeParser { class HtmlWriter; +class MessagePart; +typedef QSharedPointer MessagePartPtr; namespace Interface { class BodyPartURLHandler; class BodyPart; -class MessagePartPrivate; - -class MIMETREEPARSER_EXPORT MessagePart : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString plaintextContent READ plaintextContent) - Q_PROPERTY(QString htmlContent READ htmlContent) -public: - typedef QSharedPointer Ptr; - MessagePart(); - virtual ~MessagePart(); - - virtual QString text() const; - - void setParentPart(MessagePart *parentPart); - MessagePart *parentPart() const; - - virtual QString plaintextContent() const; - virtual QString htmlContent() const; - -private: - MessagePartPrivate *d; -}; class MIMETREEPARSER_EXPORT BodyPartFormatter { @@ -99,7 +78,7 @@ */ virtual Result format(BodyPart *part, MimeTreeParser::HtmlWriter *writer) const; - virtual MessagePart::Ptr process(BodyPart &part) const; + virtual MimeTreeParser::MessagePartPtr process(BodyPart &part) const; }; /** diff --git a/mimetreeparser/src/interfaces/bodypartformatter.cpp b/mimetreeparser/src/interfaces/bodypartformatter.cpp --- a/mimetreeparser/src/interfaces/bodypartformatter.cpp +++ b/mimetreeparser/src/interfaces/bodypartformatter.cpp @@ -38,62 +38,16 @@ using namespace MimeTreeParser::Interface; -namespace MimeTreeParser { -namespace Interface { -class MessagePartPrivate -{ -public: - MessagePart *mParentPart = nullptr; -}; -} -} - -MessagePart::MessagePart() - : QObject() - , d(new MessagePartPrivate) -{ -} - -MessagePart::~MessagePart() -{ - delete d; -} - -QString MessagePart::text() const -{ - return QString(); -} - -MessagePart *MessagePart::parentPart() const -{ - return d->mParentPart; -} - -void MessagePart::setParentPart(MessagePart *parentPart) -{ - d->mParentPart = parentPart; -} - -QString MessagePart::htmlContent() const -{ - return text(); -} - -QString MessagePart::plaintextContent() const -{ - return text(); -} - BodyPartFormatter::Result BodyPartFormatter::format(BodyPart *part, MimeTreeParser::HtmlWriter *writer) const { Q_UNUSED(part); Q_UNUSED(writer); return Failed; } -MessagePart::Ptr BodyPartFormatter::process(BodyPart&) const +MimeTreeParser::MessagePart::Ptr BodyPartFormatter::process(BodyPart &part) const { - auto mp = MessagePart::Ptr(new LegacyPluginMessagePart); + auto mp = MimeTreeParser::MessagePart::Ptr(new LegacyPluginMessagePart(part.objectTreeParser())); return mp; } diff --git a/mimetreeparser/src/interfaces/objecttreesource.h b/mimetreeparser/src/interfaces/objecttreesource.h --- a/mimetreeparser/src/interfaces/objecttreesource.h +++ b/mimetreeparser/src/interfaces/objecttreesource.h @@ -32,9 +32,9 @@ class HtmlWriter; class AttachmentStrategy; class BodyPartFormatterBaseFactory; -namespace Interface { class MessagePart; typedef QSharedPointer MessagePartPtr; +namespace Interface { class MessagePartRenderer; typedef QSharedPointer MessagePartRendererPtr; } diff --git a/mimetreeparser/src/viewer/bodypartformatter.cpp b/mimetreeparser/src/viewer/bodypartformatter.cpp --- a/mimetreeparser/src/viewer/bodypartformatter.cpp +++ b/mimetreeparser/src/viewer/bodypartformatter.cpp @@ -63,7 +63,7 @@ { static const AnyTypeBodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override + MessagePart::Ptr process(Interface::BodyPart &part) const override { KMime::Content *node = part.content(); const auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, false, true, part.source()->decryptMessage())); @@ -98,7 +98,7 @@ return self; } - Interface::MessagePart::Ptr process(Interface::BodyPart &part) const override + MessagePart::Ptr process(Interface::BodyPart &part) const override { KMime::Content *node = part.content(); auto mp = AttachmentMessagePart::Ptr(new AttachmentMessagePart(part.objectTreeParser(), node, false, true, part.source()->decryptMessage())); @@ -136,7 +136,7 @@ { static const MessageRfc822BodyPartFormatter *self; public: - Interface::MessagePart::Ptr process(Interface::BodyPart &) const override; + MessagePart::Ptr process(Interface::BodyPart &) const override; static const MimeTreeParser::Interface::BodyPartFormatter *create(); }; @@ -150,7 +150,7 @@ return self; } -Interface::MessagePart::Ptr MessageRfc822BodyPartFormatter::process(Interface::BodyPart &part) const +MessagePart::Ptr MessageRfc822BodyPartFormatter::process(Interface::BodyPart &part) const { const KMime::Message::Ptr message = part.content()->bodyAsMessage(); return MessagePart::Ptr(new EncapsulatedRfc822MessagePart(part.objectTreeParser(), part.content(), message)); 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 @@ -37,7 +37,6 @@ #include class QTextCodec; -class PartPrivate; class TextPartRendered; class AttachmentMessagePartRenderer; @@ -56,29 +55,36 @@ namespace MimeTreeParser { class ObjectTreeParser; class HtmlWriter; -class HTMLBlock; -typedef QSharedPointer HTMLBlockPtr; class CryptoBodyPartMemento; +class MessagePartPrivate; class MultiPartAlternativeBodyPartFormatter; namespace Interface { class ObjectTreeSource; } -class MIMETREEPARSER_EXPORT MessagePart : public Interface::MessagePart +class MIMETREEPARSER_EXPORT MessagePart : public QObject { Q_OBJECT + Q_PROPERTY(QString plaintextContent READ plaintextContent) + Q_PROPERTY(QString htmlContent READ htmlContent) Q_PROPERTY(bool attachment READ isAttachment) Q_PROPERTY(bool root READ isRoot) Q_PROPERTY(bool isHtml READ isHtml) Q_PROPERTY(bool isHidden READ isHidden) public: typedef QSharedPointer Ptr; MessagePart(ObjectTreeParser *otp, const QString &text); + ~MessagePart(); - virtual ~MessagePart(); + void setParentPart(MessagePart *parentPart); + MessagePart *parentPart() const; - QString text() const override; + virtual QString text() const; void setText(const QString &text); + + virtual QString plaintextContent() const; + virtual QString htmlContent() const; + void setAttachmentFlag(KMime::Content *node); bool isAttachment() const; @@ -88,13 +94,13 @@ virtual bool isHtml() const; virtual bool isHidden() const; - PartMetaData *partMetaData(); + PartMetaData *partMetaData() const; /* only a function that should be removed if the refactoring is over */ virtual void fix() const; - void appendSubPart(const Interface::MessagePart::Ptr &messagePart); - const QVector &subParts() const; + void appendSubPart(const MessagePart::Ptr &messagePart); + const QVector &subParts() const; bool hasSubParts() const; Interface::ObjectTreeSource *source() const; @@ -104,23 +110,18 @@ void parseInternal(KMime::Content *node, bool onlyOneMimePart); QString renderInternalText() const; - QString mText; ObjectTreeParser *mOtp = nullptr; - PartMetaData mMetaData; private: - QVector mBlocks; - - KMime::Content *mAttachmentNode = nullptr; - bool mRoot; + std::unique_ptr d; }; // remove once all plugins are ported away from BPF::format() -class MIMETREEPARSER_EXPORT LegacyPluginMessagePart : public Interface::MessagePart +class MIMETREEPARSER_EXPORT LegacyPluginMessagePart : public MessagePart { Q_OBJECT public: - LegacyPluginMessagePart(); + LegacyPluginMessagePart(MimeTreeParser::ObjectTreeParser *otp); ~LegacyPluginMessagePart(); HtmlWriter *htmlWriter() const; @@ -147,7 +148,6 @@ bool mOnlyOneMimePart; friend class AlternativeMessagePart; - friend class ::PartPrivate; }; class MIMETREEPARSER_EXPORT MessagePartList : public MessagePart @@ -162,7 +162,6 @@ QString plaintextContent() const override; QString htmlContent() const override; -private: }; enum IconType { @@ -204,9 +203,7 @@ friend class ::TextPartRendered; friend class ::AttachmentMessagePartRenderer; - friend class DefaultRendererPrivate; friend class ObjectTreeParser; - friend class ::PartPrivate; }; class MIMETREEPARSER_EXPORT AttachmentMessagePart : public TextMessagePart @@ -250,7 +247,6 @@ QByteArray mCharset; friend class DefaultRendererPrivate; - friend class ::PartPrivate; }; class MIMETREEPARSER_EXPORT AlternativeMessagePart : public MessagePart @@ -284,7 +280,6 @@ friend class DefaultRendererPrivate; friend class ObjectTreeParser; friend class MultiPartAlternativeBodyPartFormatter; - friend class ::PartPrivate; }; class MIMETREEPARSER_EXPORT CertMessagePart : public MessagePart @@ -373,7 +368,6 @@ std::vector mDecryptRecipients; friend class DefaultRendererPrivate; - friend class ::PartPrivate; }; class MIMETREEPARSER_EXPORT SignedMessagePart : public MessagePart @@ -417,7 +411,6 @@ friend EncryptedMessagePart; friend class DefaultRendererPrivate; - friend class ::PartPrivate; }; } 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 @@ -51,56 +51,86 @@ using namespace MimeTreeParser; //------MessagePart----------------------- +namespace MimeTreeParser { +class MessagePartPrivate +{ +public: + MessagePart *mParentPart = nullptr; + QVector mBlocks; + KMime::Content *mAttachmentNode = nullptr; + QString mText; + PartMetaData mMetaData; + bool mRoot = false; +}; +} + MessagePart::MessagePart(ObjectTreeParser *otp, const QString &text) - : mText(text) - , mOtp(otp) - , mAttachmentNode(nullptr) - , mRoot(false) + : mOtp(otp) + , d(new MessagePartPrivate) +{ + d->mText = text; +} + +MessagePart::~MessagePart() = default; + +MessagePart *MessagePart::parentPart() const { + return d->mParentPart; } -MessagePart::~MessagePart() +void MessagePart::setParentPart(MessagePart *parentPart) { + d->mParentPart = parentPart; } -PartMetaData *MessagePart::partMetaData() +QString MessagePart::htmlContent() const { - return &mMetaData; + return text(); +} + +QString MessagePart::plaintextContent() const +{ + return text(); +} + +PartMetaData *MessagePart::partMetaData() const +{ + return &d->mMetaData; } void MessagePart::setAttachmentFlag(KMime::Content *node) { - mAttachmentNode = node; + d->mAttachmentNode = node; } bool MessagePart::isAttachment() const { - return mAttachmentNode; + return d->mAttachmentNode; } KMime::Content *MessagePart::attachmentNode() const { - return mAttachmentNode; + return d->mAttachmentNode; } void MessagePart::setIsRoot(bool root) { - mRoot = root; + d->mRoot = root; } bool MessagePart::isRoot() const { - return mRoot; + return d->mRoot; } QString MessagePart::text() const { - return mText; + return d->mText; } void MessagePart::setText(const QString &text) { - mText = text; + d->mText = text; } bool MessagePart::isHtml() const @@ -122,7 +152,7 @@ void MessagePart::parseInternal(KMime::Content *node, bool onlyOneMimePart) { auto subMessagePart = mOtp->parseObjectTreeInternal(node, onlyOneMimePart); - mRoot = subMessagePart->isRoot(); + d->mRoot = subMessagePart->isRoot(); foreach (const auto &part, subMessagePart->subParts()) { appendSubPart(part); } @@ -147,20 +177,20 @@ } } -void MessagePart::appendSubPart(const Interface::MessagePart::Ptr &messagePart) +void MessagePart::appendSubPart(const MessagePart::Ptr &messagePart) { messagePart->setParentPart(this); - mBlocks.append(messagePart); + d->mBlocks.append(messagePart); } -const QVector &MessagePart::subParts() const +const QVector &MessagePart::subParts() const { - return mBlocks; + return d->mBlocks; } bool MessagePart::hasSubParts() const { - return !mBlocks.isEmpty(); + return !d->mBlocks.isEmpty(); } //-----LegacyMessagePart-------------------- @@ -179,8 +209,9 @@ QString text; }; -LegacyPluginMessagePart::LegacyPluginMessagePart() - : m_htmlWriter(new LegacyHtmlWriter) +LegacyPluginMessagePart::LegacyPluginMessagePart(ObjectTreeParser *otp) + : MessagePart(otp, QString()) + , m_htmlWriter(new LegacyHtmlWriter) { } @@ -703,37 +734,37 @@ , mFromAddress(fromAddress) , mNode(node) { - mMetaData.technicalProblem = (mCryptoProto == nullptr); - mMetaData.isSigned = true; - mMetaData.isGoodSignature = false; - mMetaData.keyTrust = GpgME::Signature::Unknown; - mMetaData.status = i18n("Wrong Crypto Plug-In."); - mMetaData.status_code = GPGME_SIG_STAT_NONE; + partMetaData()->technicalProblem = (mCryptoProto == nullptr); + partMetaData()->isSigned = true; + partMetaData()->isGoodSignature = false; + partMetaData()->keyTrust = GpgME::Signature::Unknown; + partMetaData()->status = i18n("Wrong Crypto Plug-In."); + partMetaData()->status_code = GPGME_SIG_STAT_NONE; } SignedMessagePart::~SignedMessagePart() { } void SignedMessagePart::setIsSigned(bool isSigned) { - mMetaData.isSigned = isSigned; + partMetaData()->isSigned = isSigned; } bool SignedMessagePart::isSigned() const { - return mMetaData.isSigned; + return partMetaData()->isSigned; } bool SignedMessagePart::okVerify(const QByteArray &data, const QByteArray &signature, KMime::Content *textNode) { NodeHelper *nodeHelper = mOtp->nodeHelper(); - mMetaData.isSigned = false; - mMetaData.technicalProblem = (mCryptoProto == nullptr); - mMetaData.keyTrust = GpgME::Signature::Unknown; - mMetaData.status = i18n("Wrong Crypto Plug-In."); - mMetaData.status_code = GPGME_SIG_STAT_NONE; + partMetaData()->isSigned = false; + partMetaData()->technicalProblem = (mCryptoProto == nullptr); + partMetaData()->keyTrust = GpgME::Signature::Unknown; + partMetaData()->status = i18n("Wrong Crypto Plug-In."); + partMetaData()->status_code = GPGME_SIG_STAT_NONE; const QByteArray mementoName = "verification"; @@ -757,30 +788,30 @@ QObject::connect(m, &CryptoBodyPartMemento::update, nodeHelper, &NodeHelper::update); if (m->start()) { - mMetaData.inProgress = true; + partMetaData()->inProgress = true; mOtp->mHasPendingAsyncJobs = true; } } else { m->exec(); } nodeHelper->setBodyPartMemento(mNode, mementoName, m); } } else if (m->isRunning()) { - mMetaData.inProgress = true; + partMetaData()->inProgress = true; mOtp->mHasPendingAsyncJobs = true; } else { - mMetaData.inProgress = false; + partMetaData()->inProgress = false; mOtp->mHasPendingAsyncJobs = false; } - if (m && !mMetaData.inProgress) { + if (m && !partMetaData()->inProgress) { if (!signature.isEmpty()) { mVerifiedText = data; } setVerificationResult(m, textNode); } - if (!m && !mMetaData.inProgress) { + if (!m && !partMetaData()->inProgress) { QString errorMsg; QString cryptPlugLibName; QString cryptPlugDisplayName; @@ -801,14 +832,14 @@ errorMsg = i18n("Crypto plug-in \"%1\" cannot verify signatures.", cryptPlugLibName); } - mMetaData.errorText = i18n("The message is signed, but the " + partMetaData()->errorText = i18n("The message is signed, but the " "validity of the signature cannot be " "verified.
" "Reason: %1", errorMsg); } - return mMetaData.isSigned; + return partMetaData()->isSigned; } static int signatureToStatus(const GpgME::Signature &sig) @@ -839,14 +870,14 @@ void SignedMessagePart::sigStatusToMetaData() { GpgME::Key key; - if (mMetaData.isSigned) { + if (partMetaData()->isSigned) { GpgME::Signature signature = mSignatures.front(); - mMetaData.status_code = signatureToStatus(signature); - mMetaData.isGoodSignature = mMetaData.status_code & GPGME_SIG_STAT_GOOD; + partMetaData()->status_code = signatureToStatus(signature); + partMetaData()->isGoodSignature = partMetaData()->status_code & GPGME_SIG_STAT_GOOD; // save extended signature status flags - mMetaData.sigSummary = signature.summary(); + partMetaData()->sigSummary = signature.summary(); - if (mMetaData.isGoodSignature && !key.keyID()) { + if (partMetaData()->isGoodSignature && !key.keyID()) { // Search for the key by its fingerprint so that we can check for // trust etc. QGpgME::KeyListJob *job = mCryptoProto->keyListJob(false); // local, no sigs @@ -874,14 +905,14 @@ } if (key.keyID()) { - mMetaData.keyId = key.keyID(); + partMetaData()->keyId = key.keyID(); } - if (mMetaData.keyId.isEmpty()) { - mMetaData.keyId = signature.fingerprint(); + if (partMetaData()->keyId.isEmpty()) { + partMetaData()->keyId = signature.fingerprint(); } - mMetaData.keyTrust = signature.validity(); + partMetaData()->keyTrust = signature.validity(); if (key.numUserIDs() > 0 && key.userID(0).id()) { - mMetaData.signer = prettifyDN(key.userID(0).id()); + partMetaData()->signer = prettifyDN(key.userID(0).id()); } for (uint iMail = 0; iMail < key.numUserIDs(); ++iMail) { // The following if /should/ always result in TRUE but we @@ -894,25 +925,25 @@ email = email.mid(1, email.length() - 2); } if (!email.isEmpty()) { - mMetaData.signerMailAddresses.append(email); + partMetaData()->signerMailAddresses.append(email); } } } if (signature.creationTime()) { - mMetaData.creationTime.setTime_t(signature.creationTime()); + partMetaData()->creationTime.setTime_t(signature.creationTime()); } else { - mMetaData.creationTime = QDateTime(); + partMetaData()->creationTime = QDateTime(); } - if (mMetaData.signer.isEmpty()) { + if (partMetaData()->signer.isEmpty()) { if (key.numUserIDs() > 0 && key.userID(0).name()) { - mMetaData.signer = prettifyDN(key.userID(0).name()); + partMetaData()->signer = prettifyDN(key.userID(0).name()); } - if (!mMetaData.signerMailAddresses.empty()) { - if (mMetaData.signer.isEmpty()) { - mMetaData.signer = mMetaData.signerMailAddresses.front(); + if (!partMetaData()->signerMailAddresses.empty()) { + if (partMetaData()->signer.isEmpty()) { + partMetaData()->signer = partMetaData()->signerMailAddresses.front(); } else { - mMetaData.signer += QLatin1String(" <") + mMetaData.signerMailAddresses.front() + QLatin1Char('>'); + partMetaData()->signer += QLatin1String(" <") + partMetaData()->signerMailAddresses.front() + QLatin1Char('>'); } } } @@ -923,24 +954,24 @@ { startVerificationDetached(text, nullptr, QByteArray()); - if (!mNode && mMetaData.isSigned) { + if (!mNode && partMetaData()->isSigned) { setText(aCodec->toUnicode(mVerifiedText)); } } void SignedMessagePart::startVerificationDetached(const QByteArray &text, KMime::Content *textNode, const QByteArray &signature) { - mMetaData.isEncrypted = false; - mMetaData.isDecryptable = false; + partMetaData()->isEncrypted = false; + partMetaData()->isDecryptable = false; if (textNode) { parseInternal(textNode, false); } okVerify(text, signature, textNode); - if (!mMetaData.isSigned) { - mMetaData.creationTime = QDateTime(); + if (!partMetaData()->isSigned) { + partMetaData()->creationTime = QDateTime(); } } @@ -966,16 +997,16 @@ mSignatures = vm->verifyResult().signatures(); } } - mMetaData.auditLogError = m->auditLogError(); - mMetaData.auditLog = m->auditLogAsHtml(); - mMetaData.isSigned = !mSignatures.empty(); + partMetaData()->auditLogError = m->auditLogError(); + partMetaData()->auditLog = m->auditLogAsHtml(); + partMetaData()->isSigned = !mSignatures.empty(); - if (mMetaData.isSigned) { + if (partMetaData()->isSigned) { sigStatusToMetaData(); if (mNode) { mOtp->nodeHelper()->setSignatureState(mNode, KMMsgFullySigned); if (!textNode) { - mOtp->nodeHelper()->setPartMetaData(mNode, mMetaData); + mOtp->nodeHelper()->setPartMetaData(mNode, *partMetaData()); if (!mVerifiedText.isEmpty()) { auto tempNode = new KMime::Content(); @@ -1022,14 +1053,14 @@ , mNode(node) , mDecryptMessage(false) { - mMetaData.technicalProblem = (mCryptoProto == nullptr); - mMetaData.isSigned = false; - mMetaData.isGoodSignature = false; - mMetaData.isEncrypted = false; - mMetaData.isDecryptable = false; - mMetaData.keyTrust = GpgME::Signature::Unknown; - mMetaData.status = i18n("Wrong Crypto Plug-In."); - mMetaData.status_code = GPGME_SIG_STAT_NONE; + partMetaData()->technicalProblem = (mCryptoProto == nullptr); + partMetaData()->isSigned = false; + partMetaData()->isGoodSignature = false; + partMetaData()->isEncrypted = false; + partMetaData()->isDecryptable = false; + partMetaData()->keyTrust = GpgME::Signature::Unknown; + partMetaData()->status = i18n("Wrong Crypto Plug-In."); + partMetaData()->status_code = GPGME_SIG_STAT_NONE; } EncryptedMessagePart::~EncryptedMessagePart() @@ -1048,17 +1079,17 @@ void EncryptedMessagePart::setIsEncrypted(bool encrypted) { - mMetaData.isEncrypted = encrypted; + partMetaData()->isEncrypted = encrypted; } bool EncryptedMessagePart::isEncrypted() const { - return mMetaData.isEncrypted; + return partMetaData()->isEncrypted; } bool EncryptedMessagePart::isDecryptable() const { - return mMetaData.isDecryptable; + return partMetaData()->isDecryptable; } bool EncryptedMessagePart::passphraseError() const @@ -1074,7 +1105,7 @@ startDecryption(content); - if (!mMetaData.inProgress && mMetaData.isDecryptable) { + if (!partMetaData()->inProgress && partMetaData()->isDecryptable) { if (hasSubParts()) { auto _mp = (subParts()[0]).dynamicCast(); if (_mp) { @@ -1091,10 +1122,10 @@ bool EncryptedMessagePart::okDecryptMIME(KMime::Content &data) { mPassphraseError = false; - mMetaData.inProgress = false; - mMetaData.errorText.clear(); - mMetaData.auditLogError = GpgME::Error(); - mMetaData.auditLog.clear(); + partMetaData()->inProgress = false; + partMetaData()->errorText.clear(); + partMetaData()->auditLogError = GpgME::Error(); + partMetaData()->auditLog.clear(); bool bDecryptionOk = false; bool cannotDecrypt = false; NodeHelper *nodeHelper = mOtp->nodeHelper(); @@ -1119,7 +1150,7 @@ QObject::connect(newM, &CryptoBodyPartMemento::update, nodeHelper, &NodeHelper::update); if (newM->start()) { - mMetaData.inProgress = true; + partMetaData()->inProgress = true; mOtp->mHasPendingAsyncJobs = true; } else { m = newM; @@ -1131,16 +1162,16 @@ nodeHelper->setBodyPartMemento(&data, "decryptverify", newM); } } else if (m->isRunning()) { - mMetaData.inProgress = true; + partMetaData()->inProgress = true; mOtp->mHasPendingAsyncJobs = true; m = nullptr; } if (m) { const QByteArray &plainText = m->plainText(); const GpgME::DecryptionResult &decryptResult = m->decryptResult(); const GpgME::VerificationResult &verifyResult = m->verifyResult(); - mMetaData.isSigned = verifyResult.signatures().size() > 0; + partMetaData()->isSigned = verifyResult.signatures().size() > 0; if (verifyResult.signatures().size() > 0) { auto subPart = SignedMessagePart::Ptr(new SignedMessagePart(mOtp, MessagePart::text(), mCryptoProto, mFromAddress, mNode)); @@ -1154,17 +1185,17 @@ // ss << decryptResult << '\n' << verifyResult; // qCDebug(MIMETREEPARSER_LOG) << ss.str().c_str(); - if (!bDecryptionOk && mMetaData.isSigned) { + if (!bDecryptionOk && partMetaData()->isSigned) { //Only a signed part - mMetaData.isEncrypted = false; + partMetaData()->isEncrypted = false; bDecryptionOk = true; mDecryptedData = plainText; } else { mPassphraseError = decryptResult.error().isCanceled() || decryptResult.error().code() == GPG_ERR_NO_SECKEY; - mMetaData.isEncrypted = decryptResult.error().code() != GPG_ERR_NO_DATA; - mMetaData.errorText = QString::fromLocal8Bit(decryptResult.error().asString()); - if (mMetaData.isEncrypted && decryptResult.numRecipients() > 0) { - mMetaData.keyId = decryptResult.recipient(0).keyID(); + partMetaData()->isEncrypted = decryptResult.error().code() != GPG_ERR_NO_DATA; + partMetaData()->errorText = QString::fromLocal8Bit(decryptResult.error().asString()); + if (partMetaData()->isEncrypted && decryptResult.numRecipients() > 0) { + partMetaData()->keyId = decryptResult.recipient(0).keyID(); } if (bDecryptionOk) { @@ -1188,14 +1219,14 @@ } if (!mCryptoProto) { - mMetaData.errorText = i18n("No appropriate crypto plug-in was found."); + partMetaData()->errorText = i18n("No appropriate crypto plug-in was found."); } else if (cannotDecrypt) { - mMetaData.errorText = i18n("Crypto plug-in \"%1\" cannot decrypt messages.", + partMetaData()->errorText = i18n("Crypto plug-in \"%1\" cannot decrypt messages.", cryptPlugLibName); } else if (!passphraseError()) { - mMetaData.errorText = i18n("Crypto plug-in \"%1\" could not decrypt the data.", cryptPlugLibName) + partMetaData()->errorText = i18n("Crypto plug-in \"%1\" could not decrypt the data.", cryptPlugLibName) + QLatin1String("
") - + i18n("Error: %1", mMetaData.errorText); + + i18n("Error: %1", partMetaData()->errorText); } } return bDecryptionOk; @@ -1211,25 +1242,25 @@ data = mNode; } - mMetaData.isEncrypted = true; + partMetaData()->isEncrypted = true; bool bOkDecrypt = okDecryptMIME(*data); - if (mMetaData.inProgress) { + if (partMetaData()->inProgress) { return; } - mMetaData.isDecryptable = bOkDecrypt; + partMetaData()->isDecryptable = bOkDecrypt; - if (!mMetaData.isDecryptable) { + if (!partMetaData()->isDecryptable) { setText(QString::fromUtf8(mDecryptedData.constData())); } - if (mMetaData.isEncrypted && !decryptMessage()) { - mMetaData.isDecryptable = true; + if (partMetaData()->isEncrypted && !decryptMessage()) { + partMetaData()->isDecryptable = true; } - if (mNode && !mMetaData.isSigned) { - mOtp->nodeHelper()->setPartMetaData(mNode, mMetaData); + if (mNode && !partMetaData()->isSigned) { + mOtp->nodeHelper()->setPartMetaData(mNode, *partMetaData()); if (decryptMessage()) { auto tempNode = new KMime::Content(); @@ -1283,12 +1314,12 @@ , mMessage(message) , mNode(node) { - mMetaData.isEncrypted = false; - mMetaData.isSigned = false; - mMetaData.isEncapsulatedRfc822Message = true; + partMetaData()->isEncrypted = false; + partMetaData()->isSigned = false; + partMetaData()->isEncapsulatedRfc822Message = true; mOtp->nodeHelper()->setNodeDisplayedEmbedded(mNode, true); - mOtp->nodeHelper()->setPartMetaData(mNode, mMetaData); + mOtp->nodeHelper()->setPartMetaData(mNode, *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.h b/mimetreeparser/src/viewer/objecttreeparser.h --- a/mimetreeparser/src/viewer/objecttreeparser.h +++ b/mimetreeparser/src/viewer/objecttreeparser.h @@ -48,10 +48,6 @@ } namespace MimeTreeParser { -namespace Interface { -class MessagePart; -typedef QSharedPointer MessagePartPtr; -} class PartMetaData; class ViewerPrivate; @@ -337,7 +333,7 @@ * top-level content. */ MessagePartPtr parseObjectTreeInternal(KMime::Content *node, bool mOnlyOneMimePart); - Interface::MessagePartPtr processType(KMime::Content *node, MimeTreeParser::ProcessResult &processResult, const QByteArray &mimeType, bool onlyOneMimePart); + MessagePartPtr processType(KMime::Content *node, MimeTreeParser::ProcessResult &processResult, const QByteArray &mimeType, bool onlyOneMimePart); private: 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 @@ -197,7 +197,7 @@ return mParsedPart; } -Interface::MessagePartPtr ObjectTreeParser::processType(KMime::Content *node, ProcessResult &processResult, const QByteArray &mimeType, bool onlyOneMimePart) +MessagePartPtr ObjectTreeParser::processType(KMime::Content *node, ProcessResult &processResult, const QByteArray &mimeType, bool onlyOneMimePart) { const auto formatters = mSource->bodyPartFormatterFactory()->formattersForType(QString::fromUtf8(mimeType)); Q_ASSERT(!formatters.empty()); @@ -209,7 +209,7 @@ mNodeHelper->setNodeDisplayedEmbedded(node, true); - const Interface::MessagePart::Ptr result = formatter->process(part); + const MessagePart::Ptr result = formatter->process(part); if (!result) { continue; } @@ -222,18 +222,15 @@ mNodeHelper->setNodeDisplayedEmbedded(node, false); auto mp = processType(node, processResult, QByteArrayLiteral("application/octet-stream"), onlyOneMimePart); if (mp) { - if (auto _mp = mp.dynamicCast()) { - _mp->setAttachmentFlag(node); - } + mp->setAttachmentFlag(node); } return mp; } else if (r == Interface::BodyPartFormatter::Ok) { processResult.setNeverDisplayInline(true); return result; } } else { - if (auto mp = result.dynamicCast()) - mp->setAttachmentFlag(node); + result->setAttachmentFlag(node); return result; } }