diff options
Diffstat (limited to 'src/objc')
-rw-r--r-- | src/objc/abstract/MCOAbstract.h | 1 | ||||
-rw-r--r-- | src/objc/abstract/MCOHTMLRendererDelegate.h | 30 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMessageParser.h | 22 | ||||
-rw-r--r-- | src/objc/rfc822/MCOMessageParser.mm | 124 |
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 |