aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc
diff options
context:
space:
mode:
Diffstat (limited to 'src/objc')
-rw-r--r--src/objc/abstract/MCOAbstract.h1
-rw-r--r--src/objc/abstract/MCOHTMLRendererDelegate.h30
-rw-r--r--src/objc/rfc822/MCOMessageParser.h22
-rw-r--r--src/objc/rfc822/MCOMessageParser.mm124
4 files changed, 153 insertions, 24 deletions
diff --git a/src/objc/abstract/MCOAbstract.h b/src/objc/abstract/MCOAbstract.h
index af257614..429da6bd 100644
--- a/src/objc/abstract/MCOAbstract.h
+++ b/src/objc/abstract/MCOAbstract.h
@@ -15,5 +15,6 @@
#import <mailcore/MCOAbstractPart.h>
#import <mailcore/MCOAddress.h>
#import <mailcore/MCOMessageHeader.h>
+#import <mailcore/MCOHTMLRendererDelegate.h>
#endif
diff --git a/src/objc/abstract/MCOHTMLRendererDelegate.h b/src/objc/abstract/MCOHTMLRendererDelegate.h
new file mode 100644
index 00000000..b480835e
--- /dev/null
+++ b/src/objc/abstract/MCOHTMLRendererDelegate.h
@@ -0,0 +1,30 @@
+//
+// MCOHTMLRendererDelegate.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/23/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef mailcore2_MCOHTMLRendererDelegate_h
+#define mailcore2_MCOHTMLRendererDelegate_h
+
+@protocol MCOHTMLRendererDelegate <NSObject>
+
+- (BOOL) MCOAbstractMessage:(MCOAbstractMessage *)msg canPreviewPart:(MCOAbstractPart *)part;
+- (NSDictionary *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateValuesForHeader:(MCOMessageHeader *)part;
+- (NSDictionary *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateValuesForPart:(MCOAbstractPart *)part;
+- (NSString *) MCOAbstractMessage_templateForMainHeader:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForImage:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForAttachment:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForMessage:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForEmbeddedMessage:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForEmbeddedMessageHeader:(MCOAbstractMessage *)msg;
+- (NSString *) MCOAbstractMessage_templateForAttachmentSeparator:(MCOAbstractMessage *)msg;
+
+- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg filterHTMLForPart:(NSString *)html;
+- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg filterHTMLForMessage:(NSString *)html;
+
+@end
+
+#endif
diff --git a/src/objc/rfc822/MCOMessageParser.h b/src/objc/rfc822/MCOMessageParser.h
index 7d086d7a..fd1f5304 100644
--- a/src/objc/rfc822/MCOMessageParser.h
+++ b/src/objc/rfc822/MCOMessageParser.h
@@ -12,11 +12,11 @@
#import <mailcore/MCOAbstractMessage.h>
-@protocol MCOMessageParserDelegate;
+@protocol MCOHTMLRendererDelegate;
@interface MCOMessageParser : MCOAbstractMessage
-@property (nonatomic, assign) id <MCOMessageParserDelegate> delegate;
+@property (nonatomic, assign) id <MCOHTMLRendererDelegate> rendererDelegate;
+ (MCOMessageParser *) messageParserWithData:(NSData *)data;
@@ -30,22 +30,4 @@
@end
-@protocol MCOMessageParserDelegate
-
-- (BOOL) MCOMessageParser:(MCOMessageParser *)parser canPreviewPart:(MCOAbstractPart *)part;
-- (NSDictionary *) MCOMessageParser:(MCOMessageParser *)parser templateValuesForHeader:(MCOMessageHeader *)part;
-- (NSDictionary *) MCOMessageParser:(MCOMessageParser *)parser templateValuesForPart:(MCOAbstractPart *)part;
-- (NSString *) MCOMessageParser_templateForMainHeader:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForImage:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForAttachment:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForMessage:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForEmbeddedMessage:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForEmbeddedMessageHeader:(MCOMessageParser *)parser;
-- (NSString *) MCOMessageParser_templateForAttachmentSeparator:(MCOMessageParser *)parser;
-
-- (NSString *) MCOMessageParser_filterHTMLForPart:(NSString *)html;
-- (NSString *) MCOMessageParser_filterHTMLForMessage:(NSString *)html;
-
-@end
-
#endif
diff --git a/src/objc/rfc822/MCOMessageParser.mm b/src/objc/rfc822/MCOMessageParser.mm
index a964c064..5ff3db13 100644
--- a/src/objc/rfc822/MCOMessageParser.mm
+++ b/src/objc/rfc822/MCOMessageParser.mm
@@ -9,16 +9,131 @@
#import "MCOMessageParser.h"
#include "MCRFC822.h"
+#include "MCRenderer.h"
+#import "MCOHTMLRendererDelegate.h"
#import "NSObject+MCO.h"
#import "MCOAbstractMessage+Private.h"
#import "MCOUtils.h"
+class MCOMessageParserRenderedCallback : public mailcore::Object, public mailcore::HTMLRendererTemplateCallback {
+public:
+ MCOMessageParserRenderedCallback(MCOMessageParser * parser)
+ {
+ _parser = parser;
+ }
+
+ virtual bool canPreviewPart(mailcore::AbstractPart * part)
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage:canPreviewPart:)]) {
+ return [rendererDelegate() MCOAbstractMessage:_parser canPreviewPart:MCO_TO_OBJC(part)];
+ }
+ return mailcore::HTMLRendererTemplateCallback::canPreviewPart(part);
+ }
+
+ virtual mailcore::HashMap * templateValuesForHeader(mailcore::MessageHeader * header)
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage:templateValuesForHeader:)]) {
+ return MCO_FROM_OBJC(mailcore::HashMap, [rendererDelegate() MCOAbstractMessage:_parser templateValuesForHeader:MCO_TO_OBJC(header)]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateValuesForHeader(header);
+ }
+
+ virtual mailcore::HashMap * templateValuesForPart(mailcore::AbstractPart * part)
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage:templateValuesForPart:)]) {
+ return MCO_FROM_OBJC(mailcore::HashMap, [rendererDelegate() MCOAbstractMessage:_parser templateValuesForPart:MCO_TO_OBJC(part)]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateValuesForPart(part);
+ }
+
+ virtual mailcore::String * templateForMainHeader()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForMainHeader:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForMainHeader:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForMainHeader();
+ }
+
+ virtual mailcore::String * templateForImage()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForImage:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForImage:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForImage();
+ }
+
+ virtual mailcore::String * templateForAttachment()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForAttachment:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForAttachment:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForAttachment();
+ }
+
+ virtual mailcore::String * templateForMessage()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForMessage:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForMessage:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForMessage();
+ }
+
+ virtual mailcore::String * templateForEmbeddedMessage()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForEmbeddedMessage:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForEmbeddedMessage:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForEmbeddedMessage();
+ }
+
+ virtual mailcore::String * templateForEmbeddedMessageHeader()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForEmbeddedMessageHeader:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForEmbeddedMessageHeader:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForEmbeddedMessageHeader();
+ }
+
+ virtual mailcore::String * templateForAttachmentSeparator()
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage_templateForAttachmentSeparator:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage_templateForAttachmentSeparator:_parser]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::templateForAttachmentSeparator();
+ }
+
+ virtual mailcore::String * filterHTMLForPart(mailcore::String * html)
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage:filterHTMLForPart:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage:_parser filterHTMLForPart:MCO_TO_OBJC(html)]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::filterHTMLForPart(html);
+ }
+
+ virtual mailcore::String * filterHTMLForMessage(mailcore::String * html)
+ {
+ if ([rendererDelegate() respondsToSelector:@selector(MCOAbstractMessage:filterHTMLForMesage:)]) {
+ return MCO_FROM_OBJC(mailcore::String, [rendererDelegate() MCOAbstractMessage:_parser filterHTMLForMessage:MCO_TO_OBJC(html)]);
+ }
+ return mailcore::HTMLRendererTemplateCallback::filterHTMLForMessage(html);
+ }
+
+private:
+ id <MCOHTMLRendererDelegate> rendererDelegate()
+ {
+ return [_parser rendererDelegate];
+ }
+
+ MCOMessageParser * _parser;
+};
+
@implementation MCOMessageParser {
- id <MCOMessageParserDelegate> _delegate;
+ id <MCOHTMLRendererDelegate> _rendererDelegate;
+ MCOMessageParserRenderedCallback * _htmlRenderCallback;
}
-@synthesize delegate = _delegate;
+@synthesize rendererDelegate = _rendererDelegate;
#define nativeType mailcore::MessageParser
@@ -42,12 +157,14 @@
{
mailcore::MessageParser * message = new mailcore::MessageParser([data mco_mcData]);
self = [super initWithMCMessage:message];
+ _htmlRenderCallback = new MCOMessageParserRenderedCallback(self);
message->release();
return self;
}
- (void) dealloc
{
+ _htmlRenderCallback->release();
[super dealloc];
}
@@ -63,8 +180,7 @@
- (NSString *) htmlRendering
{
-#warning should implement callbacks
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->htmlRendering());
+ return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->htmlRendering(_htmlRenderCallback));
}
@end