aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc/imap
diff options
context:
space:
mode:
authorGravatar Paul Young <paulyoungonline@gmail.com>2013-07-07 21:20:46 -0400
committerGravatar Paul Young <paulyoungonline@gmail.com>2013-07-07 21:20:46 -0400
commitdc6c77f2452637b62a79f08208989eec7d0ea758 (patch)
treebc8ef69f267088406411156ecedd15ec47cbc681 /src/objc/imap
parentff02bb072177705d888207920e4ca084792a9bb6 (diff)
WIP: Objective-C bridge of IMAP rendering methods.
Diffstat (limited to 'src/objc/imap')
-rw-r--r--src/objc/imap/MCOIMAPMessage.h21
-rw-r--r--src/objc/imap/MCOIMAPMessage.mm53
-rw-r--r--src/objc/imap/MCOIMAPMessageRenderingOperation.h35
-rw-r--r--src/objc/imap/MCOIMAPMessageRenderingOperation.mm60
-rw-r--r--src/objc/imap/MCOIMAPSession.h17
-rw-r--r--src/objc/imap/MCOIMAPSession.mm9
6 files changed, 183 insertions, 12 deletions
diff --git a/src/objc/imap/MCOIMAPMessage.h b/src/objc/imap/MCOIMAPMessage.h
index 22823891..c70342a0 100644
--- a/src/objc/imap/MCOIMAPMessage.h
+++ b/src/objc/imap/MCOIMAPMessage.h
@@ -26,6 +26,7 @@
#import <MailCore/MCOAbstractMessage.h>
#import <MailCore/MCOConstants.h>
+#import <MailCore/MCOIMAPSession.h>
@protocol MCOHTMLRendererIMAPDelegate;
@@ -71,17 +72,29 @@
delegate:(id <MCOHTMLRendererIMAPDelegate>)delegate;
/** HTML rendering of the message to be displayed in a web view.*/
-- (NSString *) htmlRenderingWithFolder:(NSString *)folder;
+- (NSString *) htmlRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock;
/** HTML rendering of the body of the message to be displayed in a web view.*/
-- (NSString *) htmlBodyRenderingWithFolder:(NSString *)folder;
+- (NSString *) htmlBodyRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock;
/** Text rendering of the message.*/
-- (NSString *) plainTextRenderingWithFolder:(NSString *)folder;
+- (NSString *) plainTextRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock;
/** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up.
This method can be used to generate the summary of the message.*/
-- (NSString *) plainTextBodyRenderingWithFolder:(NSString *)folder;
+- (NSString *) plainTextBodyRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock;
@end
diff --git a/src/objc/imap/MCOIMAPMessage.mm b/src/objc/imap/MCOIMAPMessage.mm
index 5ba4ef1f..1a289f97 100644
--- a/src/objc/imap/MCOIMAPMessage.mm
+++ b/src/objc/imap/MCOIMAPMessage.mm
@@ -15,6 +15,7 @@
#import "MCOAbstractMessageRendererCallback.h"
#import "MCOHTMLRendererDelegate.h"
#import "MCOHTMLRendererIMAPDelegate.h"
+#import "MCOIMAPMessageRenderingOperation.h"
@implementation MCOIMAPMessage {
mailcore::IMAPMessage * _message;
@@ -65,24 +66,60 @@ MCO_OBJC_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setGmailMessageID, gmailMessageID
return result;
}
-- (NSString *) htmlRenderingWithFolder:(NSString *)folder
+- (NSString *) htmlRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock
{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->htmlRendering([folder mco_mcString]));
+ MCOIMAPMessageRenderingOperation * op = [session renderingOperationForMessage:self
+ inFolder:folder
+ type:MCOIMAPMessageRenderingTypeHTML];
+
+ [op start:^(NSString * htmlString, NSError * error) ] {
+ completionBlock(htmlString, error);
+ }];
}
-- (NSString *) htmlBodyRenderingWithFolder:(NSString *)folder
+- (NSString *) htmlBodyRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock
{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->htmlBodyRendering([folder mco_mcString]));
+ MCOIMAPMessageRenderingOperation * op = [session renderingOperationForMessage:self
+ inFolder:folder
+ type:MCOIMAPMessageRenderingTypeHTMLBody];
+
+ [op start:^(NSString * htmlString, NSError * error) ] {
+ completionBlock(htmlString, error);
+ }];
}
-- (NSString *) plainTextRenderingWithFolder:(NSString *)folder
+- (NSString *) plainTextRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock
{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->plainTextRendering([folder mco_mcString]));
+ MCOIMAPMessageRenderingOperation * op = [session renderingOperationForMessage:self
+ inFolder:folder
+ type:MCOIMAPMessageRenderingTypePlainText];
+
+ [op start:^(NSString * htmlString, NSError * error) ] {
+ completionBlock(htmlString, error);
+ }];
}
-- (NSString *) plainTextBodyRenderingWithFolder:(NSString *)folder
+- (NSString *) plainTextBodyRenderingWithSession:(MCOIMAPSession *)session
+ folder:(NSString *)folder
+ done:(void (^)(NSString * htmlString,
+ NSError * error))completionBlock
{
- return MCO_TO_OBJC(MCO_NATIVE_INSTANCE->plainTextBodyRendering([folder mco_mcString]));
+ MCOIMAPMessageRenderingOperation * op = [session renderingOperationForMessage:self
+ inFolder:folder
+ type:MCOIMAPMessageRenderingTypePlainTextBody];
+
+ [op start:^(NSString * htmlString, NSError * error) ] {
+ completionBlock(htmlString, error);
+ }];
}
@end
diff --git a/src/objc/imap/MCOIMAPMessageRenderingOperation.h b/src/objc/imap/MCOIMAPMessageRenderingOperation.h
new file mode 100644
index 00000000..c22909a2
--- /dev/null
+++ b/src/objc/imap/MCOIMAPMessageRenderingOperation.h
@@ -0,0 +1,35 @@
+//
+// MCOIMAPMessageRenderingOperation.h
+// mailcore2
+//
+// Created by Paul Young on 07/07/2013.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef __MAILCORE_MCOIMAPMESSAGERENDERINGOPERATION_H_
+
+#define __MAILCORE_MCOIMAPMESSAGERENDERINGOPERATION_H_
+
+#import <MailCore/MCOIMAPBaseOperation.h>
+
+/**
+ The class is used to get the HTML string of a message.
+ */
+
+@interface MCOIMAPMessageRenderingOperation : MCOIMAPBaseOperation
+
+/**
+ Starts the asynchronous operation.
+
+ @param completionBlock Called when the operation is finished.
+
+ - On success `error` will be nil and `htmlString` will contain the message
+
+ - On failure, `error` will be set and `htmlString` will be nil
+ */
+
+- (void) start:(void (^)(NSString * htmlString, NSError * error))completionBlock;
+
+@end
+
+#endif
diff --git a/src/objc/imap/MCOIMAPMessageRenderingOperation.mm b/src/objc/imap/MCOIMAPMessageRenderingOperation.mm
new file mode 100644
index 00000000..28f4b028
--- /dev/null
+++ b/src/objc/imap/MCOIMAPMessageRenderingOperation.mm
@@ -0,0 +1,60 @@
+//
+// MCOIMAPMessageRenderingOperation.mm
+// mailcore2
+//
+// Created by Paul Young on 07/07/2013.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOIMAPMessageRenderingOperation.h"
+
+#include "MCAsyncIMAP.h"
+
+#import "MCOOperation+Private.h"
+#import "MCOUtils.h"
+
+typedef void (^CompletionType)(NSString * htmlString, NSError * error);
+
+@implementation MCOIMAPMessageRenderingOperation {
+ CompletionType _completionBlock;
+}
+
+#define nativeType mailcore::IMAPMessageRenderingOperation
+
++ (void) load
+{
+ MCORegisterClass(self, &typeid(nativeType));
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ nativeType * op = (nativeType *) object;
+ return [[[self alloc] initWithMCOperation:op] autorelease];
+}
+
+- (void) dealloc
+{
+ [_completionBlock release];
+ [super dealloc];
+}
+
+- (void)start:(void (^)(NSString * htmlString, NSError * error))completionBlock {
+ _completionBlock = [completionBlock copy];
+ [self start];
+}
+
+- (void)operationCompleted {
+ if (_completionBlock == NULL)
+ return;
+
+ nativeType *op = MCO_NATIVE_INSTANCE;
+ if (op->error() == mailcore::ErrorNone) {
+ _completionBlock(htmlString, info);
+ } else {
+ _completionBlock(nil, [NSError mco_errorWithErrorCode:op->error()]);
+ }
+ [_completionBlock release];
+ _completionBlock = nil;
+}
+
+@end
diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h
index 3a6cbc6f..7177a7d0 100644
--- a/src/objc/imap/MCOIMAPSession.h
+++ b/src/objc/imap/MCOIMAPSession.h
@@ -29,6 +29,7 @@
@class MCOIMAPSearchExpression;
@class MCOIMAPIdentityOperation;
@class MCOIMAPCapabilityOperation;
+@class MCOIMAPMessageRenderingOperation;
/**
This is the main IMAP class from which all operations are created
@@ -534,6 +535,22 @@
- (MCOIMAPSearchOperation *) searchExpressionOperationWithFolder:(NSString *)folder
expression:(MCOIMAPSearchExpression *)expression;
+/** @name Rendering Operations */
+
+/**
+ Returns an operation to render messages in a simple fashion.
+
+ MCOIMAPMessageRenderingOperation * op = [session renderingOperationWithMessage:msg
+ folder:@"INBOX"
+ renderingType:IMAPMessageRenderingTypeHTML];
+ [op start:^(NSError * error) {
+ ...
+ }];
+*/
+- (MCOIMAPMessageRenderingOperation *) renderingOperationWithMessage:(MCOIMAPMessage *)message
+ folder:(NSString *)folder
+ type:(MCOIMAPMessageRenderingType)type;
+
@end
#endif
diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm
index 1dff0f1f..3da45bf0 100644
--- a/src/objc/imap/MCOIMAPSession.mm
+++ b/src/objc/imap/MCOIMAPSession.mm
@@ -14,6 +14,7 @@
#import "MCOIMAPOperation.h"
#import "MCOIMAPFetchFoldersOperation.h"
#import "MCOIMAPBaseOperation+Private.h"
+#import "MCOIMAPMessageRenderingOperation.h"
#import "MCOUtils.h"
@@ -354,4 +355,12 @@ MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, ma
_connectionLogger(sender, logType, data);
}
+- (MCOIMAPMessageRenderingOperation *) renderingOperationWithMessage:(MCOIMAPMessage *)message
+ folder:(NSString *)folder
+ type:(MCOIMAPMessageRenderingType)type
+{
+ MCOIMAPMessageRenderingOperation * coreOp = MCO_NATIVE_INSTANCE->renderingOperation(message, [folder mco_mcString], type);
+ return MCO_TO_OBJC_OP(coreOp);
+}
+
@end