From f3be74e24f4b460bf309e4b6289973c34b137382 Mon Sep 17 00:00:00 2001 From: "Hoa V. DINH" Date: Mon, 7 Mar 2016 22:14:47 -0800 Subject: Improved error management --- src/objc/imap/MCOIMAPCheckAccountOperation.h | 22 ++++++++ src/objc/imap/MCOIMAPCheckAccountOperation.mm | 74 +++++++++++++++++++++++++++ src/objc/imap/MCOIMAPSession.mm | 2 +- 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/objc/imap/MCOIMAPCheckAccountOperation.h create mode 100644 src/objc/imap/MCOIMAPCheckAccountOperation.mm (limited to 'src/objc') diff --git a/src/objc/imap/MCOIMAPCheckAccountOperation.h b/src/objc/imap/MCOIMAPCheckAccountOperation.h new file mode 100644 index 00000000..f2ad3340 --- /dev/null +++ b/src/objc/imap/MCOIMAPCheckAccountOperation.h @@ -0,0 +1,22 @@ +// +// MCOIMAPCheckAccountOperation.h +// mailcore2 +// +// Created by Hoa V. DINH on 3/7/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCOIMAPCHECKACCOUNTOPERATION_H + +#import + +NS_ASSUME_NONNULL_BEGIN +/* The class is used to perform a No-Op operation. */ +@interface MCOIMAPCheckAccountOperation : MCOIMAPOperation + +@end +NS_ASSUME_NONNULL_END + +#endif diff --git a/src/objc/imap/MCOIMAPCheckAccountOperation.mm b/src/objc/imap/MCOIMAPCheckAccountOperation.mm new file mode 100644 index 00000000..f1aa59b4 --- /dev/null +++ b/src/objc/imap/MCOIMAPCheckAccountOperation.mm @@ -0,0 +1,74 @@ +// +// MCOIMAPCheckAccountOperation.m +// mailcore2 +// +// Created by Hoa V. DINH on 3/7/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#import "MCOIMAPCheckAccountOperation.h" + +#include "MCIMAPCheckAccountOperation.h" + +#import "MCOOperation+Private.h" +#import "MCOUtils.h" + +typedef void (^CompletionType)(NSError *error); + +@implementation MCOIMAPCheckAccountOperation { + CompletionType _completionBlock; +} + +#define nativeType mailcore::IMAPCheckAccountOperation + ++ (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 (^)(NSError *error))completionBlock +{ + _completionBlock = [completionBlock copy]; + [self start]; +} + +- (void) cancel +{ + [_completionBlock release]; + _completionBlock = nil; + [super cancel]; +} + +- (void) operationCompleted +{ + if (_completionBlock == NULL) + return; + + nativeType *op = MCO_NATIVE_INSTANCE; + if (op->error() == mailcore::ErrorNone) { + _completionBlock(nil); + } else { + NSError * error = [NSError mco_errorWithErrorCode:op->error()]; + if (op->loginResponse() != NULL) { + NSDictionary * userInfo = @{@"IMAPServerError": MCO_TO_OBJC(op->loginResponse())}; + error = [NSError errorWithDomain:[error domain] code:[error code] userInfo:userInfo]; + } + _completionBlock(error); + } + [_completionBlock release]; + _completionBlock = nil; +} + +@end diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index fdd57886..bec998c8 100755 --- a/src/objc/imap/MCOIMAPSession.mm +++ b/src/objc/imap/MCOIMAPSession.mm @@ -616,7 +616,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, - (MCOIMAPOperation *)checkAccountOperation { IMAPOperation *coreOp = MCO_NATIVE_INSTANCE->checkAccountOperation(); - return OPAQUE_OPERATION(coreOp); + return MCO_TO_OBJC_OP(coreOp); } - (MCOIMAPCapabilityOperation *) capabilityOperation -- cgit v1.2.3