aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/async/imap/MCIMAPMessageRenderingOperation.cc72
-rw-r--r--src/async/imap/MCIMAPMessageRenderingOperation.h55
-rw-r--r--src/core/imap/MCIMAPSession.cc48
-rw-r--r--src/core/imap/MCIMAPSession.h9
-rw-r--r--src/core/renderer/MCHTMLBodyRendererCallback.cc16
-rw-r--r--src/core/renderer/MCHTMLBodyRendererCallback.h27
-rw-r--r--src/core/renderer/MCMessageRendererHelper.cpp33
-rw-r--r--src/core/renderer/MCMessageRendererHelper.h38
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