aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/imap/MCIMAPMessage.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/imap/MCIMAPMessage.cc')
-rw-r--r--src/core/imap/MCIMAPMessage.cc71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc
index 6d8311ed..7f5f4427 100644
--- a/src/core/imap/MCIMAPMessage.cc
+++ b/src/core/imap/MCIMAPMessage.cc
@@ -1,9 +1,17 @@
#include "MCIMAPMessage.h"
#include "MCMessageHeader.h"
+#include "MCIMAPPart.h"
+#include "MCIMAPMessagePart.h"
+#include "MCIMAPMultipart.h"
+#include "MCHTMLRenderer.h"
using namespace mailcore;
+static AbstractPart * partForPartIDInPart(AbstractPart * part, String * partID);
+static AbstractPart * partForPartIDInMultipart(AbstractMultipart * part, String * partID);
+static AbstractPart * partForPartIDInMessagePart(AbstractMessagePart * part, String * partID);
+
void IMAPMessage::init()
{
mUid = NULL;
@@ -102,3 +110,66 @@ Array * IMAPMessage::gmailLabels()
return mLabels;
}
+AbstractPart * IMAPMessage::partForPartID(String * partID)
+{
+ return partForPartIDInPart(mainPart(), partID);
+}
+
+static AbstractPart * partForPartIDInPart(AbstractPart * part, String * partID)
+{
+ switch (part->partType()) {
+ case PartTypeSingle:
+ if (partID->isEqual(((IMAPPart *) part)->partID())) {
+ return part;
+ }
+ return NULL;
+ case mailcore::PartTypeMultipartMixed:
+ case mailcore::PartTypeMultipartRelated:
+ case mailcore::PartTypeMultipartAlternative:
+ if (partID->isEqual(((IMAPMultipart *) part)->partID())) {
+ return part;
+ }
+ return partForPartIDInMultipart((AbstractMultipart *) part, partID);
+ case mailcore::PartTypeMessage:
+ if (partID->isEqual(((IMAPMessagePart *) part)->partID())) {
+ return part;
+ }
+ return partForPartIDInMessagePart((AbstractMessagePart *) part, partID);
+ default:
+ return NULL;
+ }
+}
+
+static AbstractPart * partForPartIDInMessagePart(AbstractMessagePart * part, String * partID)
+{
+ return partForPartIDInPart(part->mainPart(), partID);
+}
+
+static AbstractPart * partForPartIDInMultipart(AbstractMultipart * part, String * partID)
+{
+ for(unsigned int i = 0 ; i < part->parts()->count() ; i ++) {
+ mailcore::AbstractPart * subpart = (mailcore::AbstractPart *) part->parts()->objectAtIndex(i);
+ mailcore::AbstractPart * result = partForPartIDInPart(subpart, partID);
+ if (result != NULL)
+ return result;
+ }
+ return NULL;
+}
+
+AbstractPart * IMAPMessage::partForContentID(String * contentID)
+{
+ return mainPart()->partForContentID(contentID);
+}
+
+AbstractPart * IMAPMessage::partForUniqueID(String * uniqueID)
+{
+ return mainPart()->partForUniqueID(uniqueID);
+}
+
+String * IMAPMessage::htmlRendering(String * folder,
+ HTMLRendererIMAPCallback * dataCallback,
+ HTMLRendererTemplateCallback * htmlCallback)
+{
+ return HTMLRenderer::htmlForIMAPMessage(folder, this, dataCallback, htmlCallback);
+}
+