aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/renderer/MCHTMLRendererCallback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/renderer/MCHTMLRendererCallback.cpp')
-rw-r--r--src/core/renderer/MCHTMLRendererCallback.cpp283
1 files changed, 283 insertions, 0 deletions
diff --git a/src/core/renderer/MCHTMLRendererCallback.cpp b/src/core/renderer/MCHTMLRendererCallback.cpp
new file mode 100644
index 00000000..edaf7e92
--- /dev/null
+++ b/src/core/renderer/MCHTMLRendererCallback.cpp
@@ -0,0 +1,283 @@
+//
+// MCHTMLRendererCallback.cpp
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 2/2/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "MCHTMLRendererCallback.h"
+
+#include "MCAddressDisplay.h"
+#include "MCDateFormatter.h"
+#include "MCSizeFormatter.h"
+#include "MCAttachment.h"
+
+using namespace mailcore;
+
+mailcore::HashMap * HTMLRendererTemplateCallback::templateValuesForHeader(mailcore::MessageHeader * header)
+{
+ mailcore::HashMap * result = mailcore::HashMap::hashMap();
+
+ if (header->from() != NULL) {
+ result->setObjectForKey(MCSTR("HASFROM"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("FROM"), mailcore::AddressDisplay::displayStringForAddress(header->from())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTFROM"), mailcore::AddressDisplay::shortDisplayStringForAddress(header->from())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTFROM"), mailcore::AddressDisplay::veryShortDisplayStringForAddress(header->from())->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOFROM"), mailcore::HashMap::hashMap());
+ }
+
+ if ((header->to() != NULL) && (header->to()->count() > 0)) {
+ result->setObjectForKey(MCSTR("HASTO"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("TO"), mailcore::AddressDisplay::displayStringForAddresses(header->to())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTTO"), mailcore::AddressDisplay::shortDisplayStringForAddresses(header->to())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTTO"), mailcore::AddressDisplay::veryShortDisplayStringForAddresses(header->to())->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOTO"), mailcore::HashMap::hashMap());
+ }
+
+ if ((header->cc() != NULL) && (header->cc()->count() > 0)) {
+ result->setObjectForKey(MCSTR("HASCC"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("CC"), mailcore::AddressDisplay::displayStringForAddresses(header->cc())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTCC"), mailcore::AddressDisplay::shortDisplayStringForAddresses(header->cc())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTCC"), mailcore::AddressDisplay::veryShortDisplayStringForAddresses(header->cc())->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOCC"), mailcore::HashMap::hashMap());
+ }
+
+ if ((header->bcc() != NULL) && (header->bcc()->count() > 0)) {
+ result->setObjectForKey(MCSTR("HASBCC"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("BCC"), mailcore::AddressDisplay::displayStringForAddresses(header->bcc())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTBCC"), mailcore::AddressDisplay::shortDisplayStringForAddresses(header->bcc())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTBCC"), mailcore::AddressDisplay::veryShortDisplayStringForAddresses(header->bcc())->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOBCC"), mailcore::HashMap::hashMap());
+ }
+
+ mailcore::Array * recipient = new mailcore::Array();
+ recipient->addObjectsFromArray(header->to());
+ recipient->addObjectsFromArray(header->cc());
+ recipient->addObjectsFromArray(header->bcc());
+
+ if (recipient->count() > 0) {
+ result->setObjectForKey(MCSTR("HASRECIPIENT"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("RECIPIENT"), mailcore::AddressDisplay::displayStringForAddresses(recipient)->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTRECIPIENT"), mailcore::AddressDisplay::shortDisplayStringForAddresses(recipient)->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTRECIPIENT"), mailcore::AddressDisplay::veryShortDisplayStringForAddresses(recipient)->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NORECIPIENT"), mailcore::HashMap::hashMap());
+ }
+ recipient->release();
+
+ if ((header->replyTo() != NULL) && (header->replyTo()->count() > 0)) {
+ result->setObjectForKey(MCSTR("HASREPLYTO"), mailcore::HashMap::hashMap());
+ result->setObjectForKey(MCSTR("REPLYTO"), mailcore::AddressDisplay::displayStringForAddresses(header->replyTo())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SHORTREPLYTO"), mailcore::AddressDisplay::shortDisplayStringForAddresses(header->replyTo())->htmlEncodedString());
+ result->setObjectForKey(MCSTR("VERYSHORTREPLYTO"), mailcore::AddressDisplay::veryShortDisplayStringForAddresses(header->replyTo())->htmlEncodedString());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOREPLYTO"), mailcore::HashMap::hashMap());
+ }
+
+ if ((header->subject() != NULL) && (header->subject()->length() > 0)) {
+ result->setObjectForKey(MCSTR("EXTRACTEDSUBJECT"), header->partialExtractedSubject()->htmlEncodedString());
+ result->setObjectForKey(MCSTR("SUBJECT"), header->subject()->htmlEncodedString());
+ result->setObjectForKey(MCSTR("HASSUBJECT"), mailcore::HashMap::hashMap());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOSUBJECT"), mailcore::HashMap::hashMap());
+ }
+
+ mailcore::String * dateString;
+ static mailcore::DateFormatter * fullFormatter = NULL;
+ if (fullFormatter == NULL) {
+ fullFormatter = new mailcore::DateFormatter();
+ fullFormatter->setDateStyle(mailcore::DateFormatStyleFull);
+ fullFormatter->setTimeStyle(mailcore::DateFormatStyleFull);
+ }
+ dateString = fullFormatter->stringFromDate(header->date());
+ if (dateString != NULL) {
+ result->setObjectForKey(MCSTR("FULLDATE"), dateString->htmlEncodedString());
+ }
+ static mailcore::DateFormatter * longFormatter = NULL;
+ if (longFormatter == NULL) {
+ longFormatter = new mailcore::DateFormatter();
+ longFormatter->setDateStyle(mailcore::DateFormatStyleLong);
+ longFormatter->setTimeStyle(mailcore::DateFormatStyleLong);
+ }
+ dateString = longFormatter->stringFromDate(header->date());
+ if (dateString != NULL) {
+ result->setObjectForKey(MCSTR("LONGDATE"), dateString->htmlEncodedString());
+ }
+ static mailcore::DateFormatter * mediumFormatter = NULL;
+ if (mediumFormatter == NULL) {
+ mediumFormatter = new mailcore::DateFormatter();
+ mediumFormatter->setDateStyle(mailcore::DateFormatStyleMedium);
+ mediumFormatter->setTimeStyle(mailcore::DateFormatStyleMedium);
+ }
+ dateString = mediumFormatter->stringFromDate(header->date());
+ if (dateString != NULL) {
+ result->setObjectForKey(MCSTR("MEDIUMDATE"), dateString->htmlEncodedString());
+ }
+ static mailcore::DateFormatter * shortFormatter = NULL;
+ if (shortFormatter == NULL) {
+ shortFormatter = new mailcore::DateFormatter();
+ shortFormatter->setDateStyle(mailcore::DateFormatStyleShort);
+ shortFormatter->setTimeStyle(mailcore::DateFormatStyleShort);
+ }
+ dateString = shortFormatter->stringFromDate(header->date());
+ if (dateString != NULL) {
+ result->setObjectForKey(MCSTR("SHORTDATE"), dateString->htmlEncodedString());
+ }
+
+ return result;
+}
+
+mailcore::HashMap * HTMLRendererTemplateCallback::templateValuesForPart(mailcore::AbstractPart * part)
+{
+ mailcore::HashMap * result = mailcore::HashMap::hashMap();
+ mailcore::String * filename = NULL;
+
+ if (part->filename() != NULL) {
+ filename = part->filename()->lastPathComponent();
+ }
+
+ if (filename != NULL) {
+ result->setObjectForKey(MCSTR("FILENAME"), filename->htmlEncodedString());
+ result->setObjectForKey(MCSTR("HASFILENAME"), mailcore::HashMap::hashMap());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOFILENAME"), mailcore::HashMap::hashMap());
+ }
+
+ if (part->className()->isEqual(MCSTR("mailcore::IMAPPart"))) {
+ mailcore::IMAPPart * imapPart = (mailcore::IMAPPart *) part;
+ mailcore::String * value = mailcore::SizeFormatter::stringWithSize(imapPart->decodedSize());
+ result->setObjectForKey(MCSTR("SIZE"), value);
+ result->setObjectForKey(MCSTR("HASSIZE"), mailcore::HashMap::hashMap());
+ }
+ else if (part->className()->isEqual(MCSTR("mailcore::Attachment"))) {
+ mailcore::Attachment * attachment = (mailcore::Attachment *) part;
+ mailcore::String * value = mailcore::SizeFormatter::stringWithSize(attachment->data()->length());
+ result->setObjectForKey(MCSTR("SIZE"), value);
+ result->setObjectForKey(MCSTR("HASSIZE"), mailcore::HashMap::hashMap());
+ }
+ else {
+ result->setObjectForKey(MCSTR("NOSIZE"), mailcore::HashMap::hashMap());
+ }
+
+ if (part->contentID() != NULL) {
+ result->setObjectForKey(MCSTR("CONTENTID"), part->contentID());
+ }
+ if (part->uniqueID() != NULL) {
+ result->setObjectForKey(MCSTR("UNIQUEID"), part->uniqueID());
+ }
+
+ return result;
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForMainHeader(MessageHeader * header)
+{
+ return MCSTR("<div style=\"background-color:#eee\">\
+ {{#HASFROM}}\
+ <div><b>From:</b> {{FROM}}</div>\
+ {{/HASFROM}}\
+ {{#HASTO}}\
+ <div><b>To:</b> {{TO}}</div>\
+ {{/HASTO}}\
+ {{#HASCC}}\
+ <div><b>Cc:</b> {{CC}}</div>\
+ {{/HASCC}}\
+ {{#HASBCC}}\
+ <div><b>Bcc:</b> {{BCC}}</div>\
+ {{/HASBCC}}\
+ {{#NORECIPIENT}}\
+ <div><b>To:</b> <i>Undisclosed recipient</i></div>\
+ {{/NORECIPIENT}}\
+ {{#HASSUBJECT}}\
+ <div><b>Subject:</b> {{EXTRACTEDSUBJECT}}</div>\
+ {{/HASSUBJECT}}\
+ {{#NOSUBJECT}}\
+ <div><b>Subject:</b> <i>No Subject</i></div>\
+ {{/NOSUBJECT}}\
+ <div><b>Date:</b> {{LONGDATE}}</div>\
+ </div>");
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForEmbeddedMessageHeader(MessageHeader * header)
+{
+ return templateForMainHeader(header);
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForImage(AbstractPart * part)
+{
+ return MCSTR("");
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForAttachment(AbstractPart * part)
+{
+ return MCSTR("{{#HASSIZE}}\
+ {{#HASFILENAME}}\
+ <div>- {{FILENAME}}, {{SIZE}}</div>\
+ {{/HASFILENAME}}\
+ {{#NOFILENAME}}\
+ <div>- Untitled, {{SIZE}}</div>\
+ {{/NOFILENAME}}\
+ {{/HASSIZE}}\
+ {{#NOSIZE}}\
+ {{#HASFILENAME}}\
+ <div>- {{FILENAME}}</div>\
+ {{/HASFILENAME}}\
+ {{#NOFILENAME}}\
+ <div>- Untitled</div>\
+ {{/NOFILENAME}}\
+ {{/NOSIZE}}\
+ ");
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForMessage(AbstractMessage * message)
+{
+ return MCSTR("<div style=\"padding-bottom: 20px;\">{{HEADER}}</div><div>{{BODY}}</div>");
+}
+
+
+mailcore::String * HTMLRendererTemplateCallback::templateForEmbeddedMessage(AbstractMessagePart * part)
+{
+ return MCSTR("<div style=\"padding-bottom: 20px;\">{{HEADER}}</div><div>{{BODY}}</div>");
+}
+
+mailcore::String * HTMLRendererTemplateCallback::templateForAttachmentSeparator()
+{
+ return MCSTR("<hr/>");
+}
+
+mailcore::String * HTMLRendererTemplateCallback::filterHTMLForMessage(mailcore::String * html)
+{
+ return html;
+}
+
+mailcore::String * HTMLRendererTemplateCallback::cleanHTMLForPart(mailcore::String * html)
+{
+ return html->cleanedHTMLString();
+}
+
+mailcore::String * HTMLRendererTemplateCallback::filterHTMLForPart(mailcore::String * html)
+{
+ return html;
+}
+
+bool HTMLRendererTemplateCallback::canPreviewPart(AbstractPart * part)
+{
+ return false;
+}
+
+bool HTMLRendererTemplateCallback::shouldShowPart(AbstractPart * part)
+{
+ return true;
+}