diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/async/imap/MCIMAPMessageRenderingOperation.cc | 72 | ||||
-rw-r--r-- | src/async/imap/MCIMAPMessageRenderingOperation.h | 55 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSession.cc | 48 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSession.h | 9 | ||||
-rw-r--r-- | src/core/renderer/MCHTMLBodyRendererCallback.cc | 16 | ||||
-rw-r--r-- | src/core/renderer/MCHTMLBodyRendererCallback.h | 27 | ||||
-rw-r--r-- | src/core/renderer/MCMessageRendererHelper.cpp | 33 | ||||
-rw-r--r-- | src/core/renderer/MCMessageRendererHelper.h | 38 |
8 files changed, 298 insertions, 0 deletions
diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.cc b/src/async/imap/MCIMAPMessageRenderingOperation.cc new file mode 100644 index 00000000..513eacde --- /dev/null +++ b/src/async/imap/MCIMAPMessageRenderingOperation.cc @@ -0,0 +1,72 @@ +// +// MCIMAPMessageRenderingOperation.cc +// mailcore2 +// +// Created by Paul Young on 27/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCIMAPMessageRenderingOperation.h" + +#include "MCIMAPSession.h" +#include "MCIMAPAsyncConnection.h" + +using namespace mailcore; + +IMAPMessageRenderingOperation::IMAPMessageRenderingOperation() +{ + mMessage = NULL; + mRenderingType = RenderingTypePlainTextBody; + mResult = NULL; +} + +IMAPMessageRenderingOperation::~IMAPMessageRenderingOperation() +{ + MC_SAFE_RELEASE(mMessage); + MC_SAFE_RELEASE(mResult); +} + +void IMAPMessageRenderingOperation::setRenderingType(IMAPMessageRenderingType type) +{ + mRenderingType = type; +} + +IMAPMessageRenderingType IMAPMessageRenderingOperation::renderingType() +{ + return mRenderingType; +} + +void IMAPMessageRenderingOperation::setMessage(IMAPMessage * message) +{ + mMessage = MC_SAFE_REPLACE_COPY(IMAPMessage, mMessage, message); +} + +IMAPMessage * IMAPMessageRenderingOperation::message() +{ + return mMessage; +} + +String * IMAPMessageRenderingOperation::result() +{ + return mResult; +} + +void IMAPMessageRenderingOperation::main() +{ + ErrorCode error; + + if (mRenderingType == RenderingTypeHTML) { + mResult = session()->session()->htmlRendering(mMessage, folder()); + } + else if (mRenderingType == RenderingTypeHTMLBody) { + mResult = session()->session()->htmlBodyRendering(mMessage, folder()); + } + else if (mRenderingType == RenderingTypePlainText) { + mResult = session()->session()->plainTextRendering(mMessage, folder()); + } + else if (mRenderingType == RenderingTypePlainTextBody) { + mResult = session()->session()->plainTextBodyRendering(mMessage, folder()); + } + + setError(error); +} diff --git a/src/async/imap/MCIMAPMessageRenderingOperation.h b/src/async/imap/MCIMAPMessageRenderingOperation.h new file mode 100644 index 00000000..b9634ee6 --- /dev/null +++ b/src/async/imap/MCIMAPMessageRenderingOperation.h @@ -0,0 +1,55 @@ +// +// MCIMAPMessageRenderingOperation.h +// mailcore2 +// +// Created by Paul Young on 27/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE_MCIMAPMessageRenderingOperation_H_ + +#define __MAILCORE_MCIMAPMessageRenderingOperation_H_ + +#include <MailCore/MCIMAPOperation.h> +#include <MailCore/MCIMAPMessage.h> + +#ifdef __cplusplus + +namespace mailcore { + + // If this type becomes public it must be moved to MCConstants.h + typedef enum { + RenderingTypeHTML, + RenderingTypeHTMLBody, + RenderingTypePlainText, + RenderingTypePlainTextBody + } IMAPMessageRenderingType; + + class IMAPMessageRenderingOperation : public IMAPOperation { + public: + IMAPMessageRenderingOperation(); + virtual ~IMAPMessageRenderingOperation(); + + virtual void setRenderingType(IMAPMessageRenderingType type); + virtual IMAPMessageRenderingType renderingType(); + + virtual void setMessage(IMAPMessage * message); + virtual IMAPMessage * message(); + + // Result. + virtual String * result(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPMessageRenderingType mRenderingType; + String * mResult; + IMAPMessage * mMessage; + + }; +} + +#endif + +#endif diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 8437cded..125cae2f 100644 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -16,6 +16,10 @@ #include "MCIMAPFolderStatus.h" #include "MCConnectionLogger.h" #include "MCConnectionLoggerUtils.h" +#include "MCHTMLRenderer.h" +#include "MCMessageRendererHelper.h" +#include "MCString.h" +#include "MCUtils.h" using namespace mailcore; @@ -3016,3 +3020,47 @@ ConnectionLogger * IMAPSession::connectionLogger() { return mConnectionLogger; } + +String * htmlRendering(IMAPMessage * message, String * folder) +{ + MessageRendererHelper * messageRendererHelper = new MessageRendererHelper; + String * htmlString = HTMLRenderer::htmlForIMAPMessage(folder, + message, + messageRendererHelper->dataCallback(), + NULL); + + return htmlString; +} + +String * htmlBodyRendering(IMAPMessage * message, String * folder) +{ + MessageRendererHelper * messageRendererHelper = new MessageRendererHelper; + + String * htmlBodyString = HTMLRenderer::htmlForIMAPMessage(folder, + message, + messageRendererHelper->dataCallback(), + messageRendererHelper->htmlBodyCallback()); + + return htmlBodyString; +} + +String * plainTextRendering(IMAPMessage * message, String * folder) +{ + String * htmlString = htmlRendering(message, folder); + String * plainTextString = htmlString->flattenHTML(); + + return plainTextString; +} + +String * plainTextBodyRendering(IMAPMessage * message, String * folder) +{ + String * htmlBodyString = htmlBodyRendering(message, folder); + String * plainTextBodyString = htmlBodyString->flattenHTML(); + + plainTextBodyString->replaceOccurrencesOfString(MCSTR("\n"), MCSTR(" ")); + plainTextBodyString->replaceOccurrencesOfString(MCSTR("\r"), MCSTR(" ")); + plainTextBodyString->replaceOccurrencesOfString(MCSTR("\t"), MCSTR(" ")); + plainTextBodyString->replaceOccurrencesOfString(MCSTR(" "), MCSTR(" ")); + + return plainTextBodyString; +} diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h index 212f0876..53510b0b 100644 --- a/src/core/imap/MCIMAPSession.h +++ b/src/core/imap/MCIMAPSession.h @@ -4,6 +4,7 @@ #include <MailCore/MCBaseTypes.h> #include <MailCore/MCMessageConstants.h> +#include <MailCore/MCIMAPMessage.h> #ifdef __cplusplus @@ -140,6 +141,14 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); + virtual String * htmlRendering(IMAPMessage * message, String * folder); + virtual String * htmlBodyRendering(IMAPMessage * message, String * folder); + + virtual String * plainTextRendering(IMAPMessage * message, String * folder); + + // Double spaces, tab and return characters will be replaced with single spaces. + virtual String * plainTextBodyRendering(IMAPMessage * message, String * folder); + public: // private virtual void loginIfNeeded(ErrorCode * pError); virtual void connectIfNeeded(ErrorCode * pError); diff --git a/src/core/renderer/MCHTMLBodyRendererCallback.cc b/src/core/renderer/MCHTMLBodyRendererCallback.cc new file mode 100644 index 00000000..98bb2a2f --- /dev/null +++ b/src/core/renderer/MCHTMLBodyRendererCallback.cc @@ -0,0 +1,16 @@ +// +// MCHTMLBodyRendererCallback.cc +// mailcore2 +// +// Created by Paul Young on 02/07/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCHTMLBodyRendererCallback.h" + +using namespace mailcore; + +mailcore::String * HTMLBodyRendererTemplateCallback::templateForMainHeader(MessageHeader * header) +{ + return MCSTR(""); +} diff --git a/src/core/renderer/MCHTMLBodyRendererCallback.h b/src/core/renderer/MCHTMLBodyRendererCallback.h new file mode 100644 index 00000000..20b922bb --- /dev/null +++ b/src/core/renderer/MCHTMLBodyRendererCallback.h @@ -0,0 +1,27 @@ +// +// MCHTMLBodyRendererCallback.h +// mailcore2 +// +// Created by Paul Young on 02/07/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE_MCHTMLBODYRENDERERCALLBACK_H_ + +#define __MAILCORE_MCHTMLBODYRENDERERCALLBACK_H_ + +#include <MailCore/MCHTMLRendererCallback.h> + +#ifdef __cplusplus + +namespace mailcore { + + class HTMLBodyRendererTemplateCallback : public HTMLRendererTemplateCallback { + virtual String * templateForMainHeader(MessageHeader * header); + }; + +} + +#endif + +#endif diff --git a/src/core/renderer/MCMessageRendererHelper.cpp b/src/core/renderer/MCMessageRendererHelper.cpp new file mode 100644 index 00000000..bd4a1745 --- /dev/null +++ b/src/core/renderer/MCMessageRendererHelper.cpp @@ -0,0 +1,33 @@ +// +// MCMessageRendererHelper.cpp +// mailcore2 +// +// Created by Paul Young on 28/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCMessageRendererHelper.h" + +using namespace mailcore; + +MessageRendererHelper::MessageRendererHelper() +{ + mDataCallback = new HTMLRendererIMAPCallback(); + mHtmlCallback = new HTMLBodyRendererTemplateCallback(); +} + +MessageRendererHelper::~MessageRendererHelper() +{ + MC_SAFE_RELEASE(mDataCallback); + MC_SAFE_RELEASE(mHtmlCallback); +} + +HTMLRendererIMAPCallback * MessageRendererHelper::dataCallback() +{ + return mDataCallback; +} + +HTMLBodyRendererTemplateCallback * MessageRendererHelper::htmlBodyCallback() +{ + return mHtmlCallback; +} diff --git a/src/core/renderer/MCMessageRendererHelper.h b/src/core/renderer/MCMessageRendererHelper.h new file mode 100644 index 00000000..716c91a2 --- /dev/null +++ b/src/core/renderer/MCMessageRendererHelper.h @@ -0,0 +1,38 @@ +// +// MCMessageRendererHelper.h +// mailcore2 +// +// Created by Paul Young on 28/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE_MCMESSAGERENDERERHELPER_H_ + +#define __MAILCORE_MCMESSAGERENDERERHELPER_H_ + +#include "MCHTMLRendererCallback.h" +#include "MCHTMLBodyRendererCallback.h" +#include "MCIMAPSession.h" + +#ifdef __cplusplus + +namespace mailcore { + + class MessageRendererHelper { + public: + MessageRendererHelper(); + ~MessageRendererHelper(); + + virtual HTMLRendererIMAPCallback * dataCallback(); + virtual HTMLBodyRendererTemplateCallback * htmlBodyCallback(); + + private: + HTMLRendererIMAPCallback * mDataCallback; + HTMLBodyRendererTemplateCallback * mHtmlCallback; + + }; +} + +#endif + +#endif |