diff --git a/messageviewer/src/messagepartthemes/default/autotests/quotehtmltest.cpp b/messageviewer/src/messagepartthemes/default/autotests/quotehtmltest.cpp --- a/messageviewer/src/messagepartthemes/default/autotests/quotehtmltest.cpp +++ b/messageviewer/src/messagepartthemes/default/autotests/quotehtmltest.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -33,6 +34,63 @@ QTEST_GUILESS_MAIN(QuoteHtmlTest) +class MyRenderContext : public MessageViewer::RenderContext +{ +public: + virtual ~MyRenderContext() {} + + CSSHelperBase *cssHelper() const override + { + return mCssHelper; + } + + void renderSubParts(const MimeTreeParser::MessagePart::Ptr &msgPart, HtmlWriter *htmlWriter) override + { + Q_UNUSED(msgPart); + Q_UNUSED(htmlWriter); + } + + bool isHiddenHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override + { + Q_UNUSED(msgPart); + return false; + } + + MimeTreeParser::IconType displayHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override + { + Q_UNUSED(msgPart); + return MimeTreeParser::IconType::NoIcon; + } + + bool showEmoticons() const override + { + return false; + } + + bool showExpandQuotesMark() const override + { + return mShowExpandQuotesMark; + } + + int levelQuote() const override + { + return mLevelQuote; + } + + bool mShowExpandQuotesMark = false; + int mLevelQuote = 1; + CSSHelperBase *mCssHelper = nullptr; + +protected: + bool renderWithFactory(const QMetaObject *mo, const MimeTreeParser::MessagePart::Ptr &msgPart, HtmlWriter *writer) override + { + Q_UNUSED(mo); + Q_UNUSED(msgPart); + Q_UNUSED(writer); + return false; + } +}; + void QuoteHtmlTest::initTestCase() { MessageViewer::Test::setupEnv(); @@ -140,9 +198,10 @@ QFETCH(int, quotelevel); BufferedHtmlWriter testWriter; Test::CSSHelper testCSSHelper; - Test::ObjectTreeSource emptySource(&testWriter, &testCSSHelper); - emptySource.setShowExpandQuotesMark(showExpandQuotesMark); - emptySource.setLevelQuote(quotelevel); + MyRenderContext context; + context.mCssHelper = &testCSSHelper; + context.mLevelQuote = quotelevel; + context.mShowExpandQuotesMark = showExpandQuotesMark; - QCOMPARE(quotedHTML(data, &emptySource, &testCSSHelper), result); + QCOMPARE(quotedHTML(data, &context, &testCSSHelper), result); } 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 @@ -41,6 +41,9 @@ void setShowOnlyOneMimePart(bool onlyOneMimePart); void setAttachmentStrategy(const AttachmentStrategy *strategy); + void setShowEmoticons(bool showEmoticons); + void setShowExpandQuotesMark(bool showExpandQuotesMark); + void setLevelQuote(int levelQuote); void render(const MimeTreeParser::MessagePartPtr &msgPart, HtmlWriter *writer); private: DefaultRendererPrivate *d; 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 @@ -1033,11 +1033,27 @@ return MimeTreeParser::NoIcon; } + +bool DefaultRendererPrivate::showEmoticons() const +{ + return mShowEmoticons; +} + +bool DefaultRendererPrivate::showExpandQuotesMark() const +{ + return mShowExpandQuotesMark; +} + bool DefaultRendererPrivate::showOnlyOneMimePart() const { return mShowOnlyOneMimePart; } +int DefaultRendererPrivate::levelQuote() const +{ + return mLevelQuote; +} + DefaultRenderer::DefaultRenderer(CSSHelperBase *cssHelper) : d(new DefaultRendererPrivate(cssHelper, MessagePartRendererFactory::instance())) { @@ -1058,6 +1074,21 @@ d->mAttachmentStrategy = strategy; } +void DefaultRenderer::setShowEmoticons(bool showEmoticons) +{ + d->mShowEmoticons = showEmoticons; +} + +void DefaultRenderer::setShowExpandQuotesMark(bool showExpandQuotesMark) +{ + d->mShowExpandQuotesMark = showExpandQuotesMark; +} + +void DefaultRenderer::setLevelQuote(int levelQuote) +{ + d->mLevelQuote = levelQuote; +} + void DefaultRenderer::render(const MimeTreeParser::MessagePart::Ptr &msgPart, HtmlWriter *writer) { d->mMsgPart = msgPart; 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,13 +58,21 @@ bool isHiddenHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override; MimeTreeParser::IconType displayHint(const MimeTreeParser::MessagePart::Ptr &msgPart) override; + bool showEmoticons() const override; + bool showExpandQuotesMark() const override; bool showOnlyOneMimePart() const override; + int levelQuote() const override; - bool mShowOnlyOneMimePart = false; MimeTreeParser::MessagePart::Ptr mMsgPart; CSSHelperBase *mCSSHelper = nullptr; const MessagePartRendererFactory *mRendererFactory = nullptr; const AttachmentStrategy *mAttachmentStrategy = nullptr; + + int mLevelQuote = 1; + + bool mShowEmoticons = false; + bool mShowExpandQuotesMark = false; + bool mShowOnlyOneMimePart = false; }; } #endif 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,7 +64,10 @@ virtual bool isHiddenHint(const MimeTreeParser::MessagePart::Ptr &msgPart) = 0; virtual MimeTreeParser::IconType displayHint(const MimeTreeParser::MessagePart::Ptr &msgPart) = 0; + virtual bool showEmoticons() const = 0; + virtual bool showExpandQuotesMark() const = 0; virtual bool showOnlyOneMimePart() const = 0; + virtual int levelQuote() 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/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 @@ -43,7 +43,7 @@ htmlWriter->write(block.enter()); } - htmlWriter->write(quotedHTML(msgPart->text(), msgPart->source(), context->cssHelper())); + htmlWriter->write(quotedHTML(msgPart->text(), context, context->cssHelper())); htmlWriter->write(block.exit()); return true; } diff --git a/messageviewer/src/messagepartthemes/default/plugins/quotehtml.h b/messageviewer/src/messagepartthemes/default/plugins/quotehtml.h --- a/messageviewer/src/messagepartthemes/default/plugins/quotehtml.h +++ b/messageviewer/src/messagepartthemes/default/plugins/quotehtml.h @@ -22,16 +22,11 @@ #include -namespace MimeTreeParser { -namespace Interface { -class ObjectTreeSource; -} -} - namespace MessageViewer { class CSSHelperBase; +class RenderContext; } -QString quotedHTML(const QString &s, MimeTreeParser::Interface::ObjectTreeSource *source, MessageViewer::CSSHelperBase *cssHelper); +QString quotedHTML(const QString &s, MessageViewer::RenderContext *context, MessageViewer::CSSHelperBase *cssHelper); #endif diff --git a/messageviewer/src/messagepartthemes/default/plugins/quotehtml.cpp b/messageviewer/src/messagepartthemes/default/plugins/quotehtml.cpp --- a/messageviewer/src/messagepartthemes/default/plugins/quotehtml.cpp +++ b/messageviewer/src/messagepartthemes/default/plugins/quotehtml.cpp @@ -22,7 +22,7 @@ #include "utils/iconnamecache.h" #include "viewer/csshelperbase.h" -#include +#include #include @@ -106,12 +106,12 @@ return prevLineLength + wordLength + 1 < WRAP_COL; } -QString quotedHTML(const QString &s, MimeTreeParser::Interface::ObjectTreeSource *source, MessageViewer::CSSHelperBase *cssHelper) +QString quotedHTML(const QString &s, MessageViewer::RenderContext *context, MessageViewer::CSSHelperBase *cssHelper) { Q_ASSERT(cssHelper); KTextToHTML::Options convertFlags = KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText; - if (source->showEmoticons()) { + if (context->showEmoticons()) { convertFlags |= KTextToHTML::ReplaceSmileys; } QString htmlStr; @@ -143,7 +143,7 @@ QString collapseIconPath; QString expandIconPath; - if (source->showExpandQuotesMark()) { + if (context->showExpandQuotesMark()) { collapseIconPath = MessageViewer::IconNameCache::instance()->iconPathFromLocal(QStringLiteral( "quotecollapse.png")); expandIconPath @@ -191,8 +191,8 @@ bool actHidden = false; // This quoted line needs be hidden - if (source->showExpandQuotesMark() && source->levelQuote() >= 0 - && source->levelQuote() <= actQuoteLevel) { + if (context->showExpandQuotesMark() && context->levelQuote() >= 0 + && context->levelQuote() <= actQuoteLevel) { actHidden = true; } @@ -212,7 +212,7 @@ if (actQuoteLevel == -1) { htmlStr += normalStartTag; } else { - if (source->showExpandQuotesMark()) { + if (context->showExpandQuotesMark()) { // Add blockquote if (previousQuoteDepth < actQuoteLevel) { htmlStr 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 @@ -42,19 +42,20 @@ void setHtmlMode(MimeTreeParser::Util::HtmlMode mode, const QList &availableModes) override; MimeTreeParser::Util::HtmlMode preferredMode() const override; void setAllowDecryption(bool allowDecryption); - int levelQuote() const override; const QTextCodec *overrideCodec() override; QString createMessageHeader(KMime::Message *message) override; virtual const AttachmentStrategy *attachmentStrategy(); virtual HtmlWriter *htmlWriter(); virtual CSSHelperBase *cssHelper(); bool autoImportKeys() const override; - bool showEmoticons() const override; - bool showExpandQuotesMark() const override; const MimeTreeParser::BodyPartFormatterFactory *bodyPartFormatterFactory() override; void render(const MimeTreeParser::MessagePartPtr &msgPart, bool showOnlyOneMimePart) override; bool isPrinting() const override; + + virtual bool showEmoticons() const; + virtual bool showExpandQuotesMark() const; + virtual int levelQuote() const; 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 @@ -148,8 +148,13 @@ qCWarning(MESSAGEVIEWER_LOG) << "no htmlWriter - skipping rendering."; return; } + auto renderer = DefaultRenderer(cssHelper()); - renderer.setShowOnlyOneMimePart(showOnlyOneMimePart); renderer.setAttachmentStrategy(attachmentStrategy()); + renderer.setLevelQuote(levelQuote()); + renderer.setShowEmoticons(showEmoticons()); + renderer.setShowExpandQuotesMark(showExpandQuotesMark()); + renderer.setShowOnlyOneMimePart(showOnlyOneMimePart); + renderer.render(msgPart, 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 @@ -20,7 +20,7 @@ #ifndef MAILVIEWER_OBJECTTREEVIEWERSOURCE_H #define MAILVIEWER_OBJECTTREEVIEWERSOURCE_H -#include +#include "objecttreeemptysource.h" class QString; @@ -30,7 +30,7 @@ class ViewerPrivate; /** An ObjectTreeParser source working on a MailViewer object */ -class MailViewerSource : public MimeTreeParser::Interface::ObjectTreeSource +class MailViewerSource : public MessageViewer::EmptySource { public: explicit MailViewerSource(ViewerPrivate *viewer); @@ -43,14 +43,13 @@ int levelQuote() const override; const QTextCodec *overrideCodec() override; QString createMessageHeader(KMime::Message *message) override; - const AttachmentStrategy *attachmentStrategy(); - virtual HtmlWriter *htmlWriter(); + const AttachmentStrategy *attachmentStrategy() override; + HtmlWriter *htmlWriter() override; + CSSHelperBase *cssHelper() override; bool autoImportKeys() const override; bool showEmoticons() const override; bool showExpandQuotesMark() const override; - const MimeTreeParser::BodyPartFormatterFactory *bodyPartFormatterFactory() override; - void render(const MimeTreeParser::MessagePartPtr &msgPart, bool showOnlyOneMimePart) 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 @@ -31,7 +31,7 @@ using namespace MessageViewer; MailViewerSource::MailViewerSource(ViewerPrivate *viewer) - : MimeTreeParser::Interface::ObjectTreeSource() + : MessageViewer::EmptySource() , mViewer(viewer) { } @@ -99,6 +99,11 @@ return mViewer->attachmentStrategy(); } +CSSHelperBase *MailViewerSource::cssHelper() +{ + return mViewer->cssHelper(); +} + HtmlWriter *MailViewerSource::htmlWriter() { return mViewer->htmlWriter(); @@ -119,20 +124,7 @@ return MessageViewer::MessageViewerSettings::self()->showExpandQuotesMark(); } -const MimeTreeParser::BodyPartFormatterFactory *MailViewerSource::bodyPartFormatterFactory() -{ - return MimeTreeParser::BodyPartFormatterFactory::instance(); -} - bool MailViewerSource::isPrinting() const { return mViewer->mPrinting; } - -void MailViewerSource::render(const MimeTreeParser::MessagePartPtr &msgPart, bool showOnlyOneMimePart) -{ - auto renderer = DefaultRenderer(mViewer->cssHelper()); - renderer.setShowOnlyOneMimePart(showOnlyOneMimePart); - renderer.setAttachmentStrategy(attachmentStrategy()); - renderer.render(msgPart, htmlWriter()); -} diff --git a/mimetreeparser/autotests/CMakeLists.txt b/mimetreeparser/autotests/CMakeLists.txt --- a/mimetreeparser/autotests/CMakeLists.txt +++ b/mimetreeparser/autotests/CMakeLists.txt @@ -31,7 +31,7 @@ KF5::MimeTreeParser Qt5::Test KF5::Mime - Gpgmepp + QGpgme ) add_gpg_crypto_test(${_name} mimetreeparser-${_name}) endmacro () diff --git a/mimetreeparser/autotests/setupenv.h b/mimetreeparser/autotests/setupenv.h --- a/mimetreeparser/autotests/setupenv.h +++ b/mimetreeparser/autotests/setupenv.h @@ -63,16 +63,6 @@ return true; } - bool showEmoticons() const override - { - return false; - } - - bool showExpandQuotesMark() const override - { - return false; - } - const BodyPartFormatterFactory *bodyPartFormatterFactory() override { return &mBodyPartFormatterFactory; @@ -114,11 +104,6 @@ mPreferredMode = mode; } - int levelQuote() const override - { - return 1; - } - const QTextCodec *overrideCodec() override { return nullptr; 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 @@ -65,20 +65,14 @@ /** Return true to include the signature details in the generated html */ virtual bool showSignatureDetails() const = 0; - virtual int levelQuote() const = 0; - /** The override codec that should be used for the mail */ virtual const QTextCodec *overrideCodec() = 0; virtual QString createMessageHeader(KMime::Message *message) = 0; /** should keys be imported automatically **/ virtual bool autoImportKeys() const = 0; - virtual bool showEmoticons() const = 0; - - virtual bool showExpandQuotesMark() const = 0; - virtual const BodyPartFormatterFactory *bodyPartFormatterFactory() = 0; virtual void render(const MessagePartPtr &msgPart, bool showOnlyOneMimePart) = 0;