Index: messageviewer/src/interfaces/bodypart.h =================================================================== --- messageviewer/src/interfaces/bodypart.h +++ messageviewer/src/interfaces/bodypart.h @@ -45,6 +45,8 @@ namespace MessageViewer { class NodeHelper; +class ObjectTreeParser; +class ProcessResult; namespace Interface { @@ -188,6 +190,12 @@ * for real-world plugins. Still, there should be a nicer way for this. */ virtual MessageViewer::NodeHelper *nodeHelper() const = 0; + + /** + * For making it easier to refactor, add objectTreeParser + */ + virtual MessageViewer::ObjectTreeParser *objectTreeParser() const = 0; + virtual MessageViewer::ProcessResult *processResult() const = 0; }; } // namespace Interface Index: messageviewer/src/viewer/messagepart.h =================================================================== --- messageviewer/src/viewer/messagepart.h +++ messageviewer/src/viewer/messagepart.h @@ -61,6 +61,7 @@ KMime::Content *mNode; }; + // The attachment mark is a div that is placed around the attchment. It is used for drawing // a yellow border around the attachment when scrolling to it. When scrolling to it, the border // color of the div is changed, see KMReaderWin::scrollToAttachment(). Index: messageviewer/src/viewer/objecttreeparser.cpp =================================================================== --- messageviewer/src/viewer/objecttreeparser.cpp +++ messageviewer/src/viewer/objecttreeparser.cpp @@ -354,7 +354,7 @@ // First, try if an external plugin can handle this MIME part if (const Interface::BodyPartFormatter * formatter = BodyPartFormatterFactory::instance()->createFor(mediaType, subType)) { - PartNodeBodyPart part(mTopLevelContent, node, mNodeHelper, codecFor(node)); + PartNodeBodyPart part(this, &processResult, mTopLevelContent, node, mNodeHelper, codecFor(node)); // Set the default display strategy for this body part relying on the // identity of Interface::BodyPart::Display and AttachmentStrategy::Display part.setDefaultDisplay((Interface::BodyPart::Display) attachmentStrategy()->defaultDisplay(node)); Index: messageviewer/src/viewer/partnodebodypart.h =================================================================== --- messageviewer/src/viewer/partnodebodypart.h +++ messageviewer/src/viewer/partnodebodypart.h @@ -58,7 +58,7 @@ class PartNodeBodyPart : public Interface::BodyPart { public: - explicit PartNodeBodyPart(KMime::Content *topLevelContent, KMime::Content *content, + explicit PartNodeBodyPart(ObjectTreeParser *otp, ProcessResult *result, KMime::Content *topLevelContent, KMime::Content *content, NodeHelper *nodeHelper, const QTextCodec *codec = 0); QString makeLink(const QString &path) const Q_DECL_OVERRIDE; @@ -87,12 +87,24 @@ return mNodeHelper; } + ObjectTreeParser *objectTreeParser() const Q_DECL_OVERRIDE + { + return mObjectTreeParser; + } + + ProcessResult *processResult() const Q_DECL_OVERRIDE + { + return mProcessResult; + } + private: KMime::Content *mTopLevelContent; KMime::Content *mContent; const QTextCodec *mCodec; BodyPart::Display mDefaultDisplay; NodeHelper *mNodeHelper; + ObjectTreeParser *mObjectTreeParser; + ProcessResult *mProcessResult; }; } Index: messageviewer/src/viewer/partnodebodypart.cpp =================================================================== --- messageviewer/src/viewer/partnodebodypart.cpp +++ messageviewer/src/viewer/partnodebodypart.cpp @@ -33,6 +33,7 @@ #include "partnodebodypart.h" #include "messageviewer/nodehelper.h" +#include "messageviewer/objecttreeparser.h" #include "messageviewer_debug.h" #include @@ -42,10 +43,12 @@ static int serial = 0; -PartNodeBodyPart::PartNodeBodyPart(KMime::Content *topLevelContent, KMime::Content *content, +PartNodeBodyPart::PartNodeBodyPart(ObjectTreeParser *otp, ProcessResult *result, KMime::Content *topLevelContent, KMime::Content *content, NodeHelper *nodeHelper, const QTextCodec *codec) : Interface::BodyPart(), mTopLevelContent(topLevelContent), mContent(content), mCodec(codec), mDefaultDisplay(Interface::BodyPart::None), mNodeHelper(nodeHelper) + , mObjectTreeParser(otp) + , mProcessResult(result) {} QString PartNodeBodyPart::makeLink(const QString &path) const Index: messageviewer/src/viewer/urlhandlermanager.cpp =================================================================== --- messageviewer/src/viewer/urlhandlermanager.cpp +++ messageviewer/src/viewer/urlhandlermanager.cpp @@ -322,7 +322,7 @@ return false; } - PartNodeBodyPart part(w->message().data(), node, w->nodeHelper(), w->overrideCodec()); + PartNodeBodyPart part(0, 0, w->message().data(), node, w->nodeHelper(), w->overrideCodec()); BodyPartHandlerList::const_iterator end(mHandlers.constEnd()); for (BodyPartHandlerList::const_iterator it = mHandlers.constBegin() ; it != end ; ++it) { @@ -342,7 +342,7 @@ return false; } - PartNodeBodyPart part(w->message().data(), node, w->nodeHelper(), w->overrideCodec()); + PartNodeBodyPart part(0, 0, w->message().data(), node, w->nodeHelper(), w->overrideCodec()); BodyPartHandlerList::const_iterator end(mHandlers.constEnd()); for (BodyPartHandlerList::const_iterator it = mHandlers.constBegin() ; it != end ; ++it) if ((*it)->handleContextMenuRequest(&part, path, p)) { @@ -359,7 +359,7 @@ return QString(); } - PartNodeBodyPart part(w->message().data(), node, w->nodeHelper(), w->overrideCodec()); + PartNodeBodyPart part(0, 0, w->message().data(), node, w->nodeHelper(), w->overrideCodec()); BodyPartHandlerList::const_iterator end(mHandlers.constEnd()); for (BodyPartHandlerList::const_iterator it = mHandlers.constBegin() ; it != end ; ++it) { const QString msg = (*it)->statusBarMessage(&part, path);