aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/renderer/MCHTMLRenderer.cpp
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-05-01 22:54:40 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-05-01 22:54:40 -0700
commit5b9afdca3c850e7b33ac9555e8dc3e5e77d4e241 (patch)
treeed5a01295758618b4e96b5017cbadccf59154c5a /src/core/renderer/MCHTMLRenderer.cpp
parent7f4125a9f28c9509c7cc2735c844a50e433501b2 (diff)
Added partID to RFC 822 messages, provided a way to retrieve data for serialized MessageParser
Diffstat (limited to 'src/core/renderer/MCHTMLRenderer.cpp')
-rw-r--r--src/core/renderer/MCHTMLRenderer.cpp53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/core/renderer/MCHTMLRenderer.cpp b/src/core/renderer/MCHTMLRenderer.cpp
index c42bcb45..4c149df9 100644
--- a/src/core/renderer/MCHTMLRenderer.cpp
+++ b/src/core/renderer/MCHTMLRenderer.cpp
@@ -16,7 +16,7 @@
using namespace mailcore;
-class HTMLRendererIMAPDummyCallback : public HTMLRendererIMAPCallback {
+class HTMLRendererIMAPDummyCallback : public HTMLRendererIMAPCallback, public HTMLRendererRFC822Callback {
private:
Array *mRequiredParts;
@@ -44,6 +44,12 @@ public:
return mRequiredParts;
}
+ virtual Data * dataForRFC822Part(String * folder, Attachment * part)
+ {
+ mRequiredParts->addObject(part);
+ return Data::data();
+ }
+
};
enum {
@@ -53,7 +59,8 @@ enum {
};
struct htmlRendererContext {
- HTMLRendererIMAPCallback * dataCallback;
+ HTMLRendererIMAPCallback * imapDataCallback;
+ HTMLRendererRFC822Callback * rfc822DataCallback;
HTMLRendererTemplateCallback * htmlCallback;
int firstRendered;
String * folder;
@@ -82,6 +89,7 @@ static String * renderTemplate(String * templateContent, HashMap * values);
static String * htmlForAbstractMessage(String * folder, AbstractMessage * message,
HTMLRendererIMAPCallback * dataCallback,
+ HTMLRendererRFC822Callback * rfc822DataCallback,
HTMLRendererTemplateCallback * htmlCallback,
Array * attachments,
Array * relatedAttachments);
@@ -176,7 +184,8 @@ static bool messagePartContainsMimeType(AbstractMessagePart * part, String * mim
}
static String * htmlForAbstractMessage(String * folder, AbstractMessage * message,
- HTMLRendererIMAPCallback * dataCallback,
+ HTMLRendererIMAPCallback * imapDataCallback,
+ HTMLRendererRFC822Callback * rfc822DataCallback,
HTMLRendererTemplateCallback * htmlCallback,
Array * attachments,
Array * relatedAttachments)
@@ -197,7 +206,8 @@ static String * htmlForAbstractMessage(String * folder, AbstractMessage * messag
MCAssert(mainPart != NULL);
htmlRendererContext context;
- context.dataCallback = dataCallback;
+ context.imapDataCallback = imapDataCallback;
+ context.rfc822DataCallback = rfc822DataCallback;
context.htmlCallback = htmlCallback;
context.relatedAttachments = NULL;
context.attachments = NULL;
@@ -310,10 +320,15 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte
String * charset = part->charset();
Data * data = NULL;
if (part->className()->isEqual(MCSTR("mailcore::IMAPPart"))) {
- data = context->dataCallback->dataForIMAPPart(context->folder, (IMAPPart *) part);
+ data = context->imapDataCallback->dataForIMAPPart(context->folder, (IMAPPart *) part);
}
else if (part->className()->isEqual(MCSTR("mailcore::Attachment"))) {
data = ((Attachment *) part)->data();
+ if (data == NULL) {
+ // It may be NULL when mailcore::MessageParser::attachments() is invoked when
+ // when mailcore::MessageParser has been serialized/unserialized.
+ data = context->rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part);
+ }
MCAssert(data != NULL);
}
if (data == NULL)
@@ -329,12 +344,15 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte
String * charset = part->charset();
Data * data = NULL;
if (part->className()->isEqual(MCSTR("mailcore::IMAPPart"))) {
- data = context->dataCallback->dataForIMAPPart(context->folder, (IMAPPart *) part);
+ data = context->imapDataCallback->dataForIMAPPart(context->folder, (IMAPPart *) part);
}
else if (part->className()->isEqual(MCSTR("mailcore::Attachment"))) {
data = ((Attachment *) part)->data();
- // It may be NULL when mailcore::MessageParser::attachments() is invoked when
- // when mailcore::MessageParser has been serialized/unserialized.
+ if (data == NULL) {
+ // It may be NULL when mailcore::MessageParser::attachments() is invoked when
+ // when mailcore::MessageParser has been serialized/unserialized.
+ data = context->rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part);
+ }
}
if (data == NULL)
return NULL;
@@ -381,7 +399,7 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte
if (context->htmlCallback->canPreviewPart(part)) {
if (part->className()->isEqual(MCSTR("mailcore::IMAPPart"))) {
- context->dataCallback->prefetchImageIMAPPart(context->folder, (IMAPPart *) part);
+ context->imapDataCallback->prefetchImageIMAPPart(context->folder, (IMAPPart *) part);
}
String * url = String::stringWithUTF8Format("x-mailcore-image:%s",
part->uniqueID()->UTF8Characters());
@@ -391,7 +409,7 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte
}
else {
if (part->className()->isEqual(MCSTR("mailcore::IMAPPart"))) {
- context->dataCallback->prefetchAttachmentIMAPPart(context->folder, (IMAPPart *) part);
+ context->imapDataCallback->prefetchAttachmentIMAPPart(context->folder, (IMAPPart *) part);
}
HashMap * values = context->htmlCallback->templateValuesForPart(part);
content = renderTemplate(context->htmlCallback->templateForAttachment(part), values);
@@ -552,9 +570,10 @@ static String * renderTemplate(String * templateContent, HashMap * values)
}
String * HTMLRenderer::htmlForRFC822Message(MessageParser * message,
+ HTMLRendererRFC822Callback * dataCallback,
HTMLRendererTemplateCallback * htmlCallback)
{
- return htmlForAbstractMessage(NULL, message, NULL, htmlCallback, NULL, NULL);
+ return htmlForAbstractMessage(NULL, message, NULL, dataCallback, htmlCallback, NULL, NULL);
}
String * HTMLRenderer::htmlForIMAPMessage(String * folder,
@@ -562,14 +581,14 @@ String * HTMLRenderer::htmlForIMAPMessage(String * folder,
HTMLRendererIMAPCallback * dataCallback,
HTMLRendererTemplateCallback * htmlCallback)
{
- return htmlForAbstractMessage(folder, message, dataCallback, htmlCallback, NULL, NULL);
+ return htmlForAbstractMessage(folder, message, dataCallback, NULL, htmlCallback, NULL, NULL);
}
Array * HTMLRenderer::attachmentsForMessage(AbstractMessage * message)
{
Array * attachments = Array::array();
- HTMLRendererIMAPCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
- String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, NULL, attachments, NULL);
+ HTMLRendererIMAPDummyCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
+ String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, dataCallback, NULL, attachments, NULL);
delete dataCallback;
dataCallback = NULL;
(void) ignoredResult; // remove unused variable warning.
@@ -579,8 +598,8 @@ Array * HTMLRenderer::attachmentsForMessage(AbstractMessage * message)
Array * HTMLRenderer::htmlInlineAttachmentsForMessage(AbstractMessage * message)
{
Array * htmlInlineAttachments = Array::array();
- HTMLRendererIMAPCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
- String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, NULL, NULL, htmlInlineAttachments);
+ HTMLRendererIMAPDummyCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
+ String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, dataCallback, NULL, NULL, htmlInlineAttachments);
delete dataCallback;
dataCallback = NULL;
(void) ignoredResult; // remove unused variable warning.
@@ -590,7 +609,7 @@ Array * HTMLRenderer::htmlInlineAttachmentsForMessage(AbstractMessage * message)
Array * HTMLRenderer::requiredPartsForRendering(AbstractMessage * message)
{
HTMLRendererIMAPDummyCallback * dataCallback = new HTMLRendererIMAPDummyCallback();
- String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, NULL, NULL, NULL);
+ String * ignoredResult = htmlForAbstractMessage(NULL, message, dataCallback, dataCallback, NULL, NULL, NULL);
Array *requiredParts = dataCallback->requiredParts();