aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-03-07 22:14:47 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-03-07 22:14:47 -0800
commitf3be74e24f4b460bf309e4b6289973c34b137382 (patch)
treeda08b5c577685b6fc395d87a287b8d8717cbb149
parenta55c8f370bd663ea1d31fed230987711aa1cf176 (diff)
Improved error management
-rwxr-xr-xbuild-mac/mailcore2.xcodeproj/project.pbxproj16
-rwxr-xr-xsrc/async/imap/MCAsyncIMAP.h1
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.cpp2
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.h3
-rw-r--r--src/async/imap/MCIMAPCheckAccountOperation.cpp21
-rw-r--r--src/async/imap/MCIMAPCheckAccountOperation.h9
-rw-r--r--src/cmake/objc.cmake1
-rw-r--r--src/cmake/public-headers.cmake1
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cpp6
-rwxr-xr-xsrc/core/imap/MCIMAPSession.h2
-rw-r--r--src/core/provider/MCAccountValidator.cpp11
-rw-r--r--src/core/provider/MCAccountValidator.h4
-rw-r--r--src/objc/imap/MCOIMAPCheckAccountOperation.h22
-rw-r--r--src/objc/imap/MCOIMAPCheckAccountOperation.mm74
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.mm2
15 files changed, 165 insertions, 10 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index 51f4e1ee..ff3b170a 100755
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -116,8 +116,6 @@
84D7374F199BFBC8005124E5 /* MCNNTPFetchAllArticlesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; };
84D73750199BFBD9005124E5 /* MCNNTPFetchArticleOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7373C199BF83B005124E5 /* MCNNTPFetchArticleOperation.h */; };
84D73751199BFBDF005124E5 /* MCNNTPFetchAllArticlesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; };
- 84D73752199BFBE3005124E5 /* MCNNTPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73745199BFA8C005124E5 /* MCNNTPCheckAccountOperation.h */; };
- 84D73753199BFBE6005124E5 /* MCNNTPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73745199BFA8C005124E5 /* MCNNTPCheckAccountOperation.h */; };
84D73754199BFBEC005124E5 /* MCNNTPOperationCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; };
84D73755199BFBF2005124E5 /* MCNNTPOperationCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; };
84D73758199BFC8A005124E5 /* MCNNTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73756199BFC8A005124E5 /* MCNNTPDisconnectOperation.cpp */; };
@@ -902,6 +900,10 @@
C6EFFBC9182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */; };
C6EFFBCC1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; };
C6EFFBCD1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; };
+ C6F49A8F1C8E96D00087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; };
+ C6F49A901C8E96D70087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; };
+ C6F49A931C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; settings = {ASSET_TAGS = (); }; };
+ C6F49A941C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; settings = {ASSET_TAGS = (); }; };
C6F5B9E216FEA1E800D9DABD /* MCOIMAPMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */; };
C6F5B9E516FEA27500D9DABD /* MCOIMAPMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */; };
C6F5B9E816FEA28600D9DABD /* MCOIMAPMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */; };
@@ -1041,6 +1043,7 @@
27E91D601A80D3F4005A3244 /* MCMXRecordResolverOperation.h in CopyFiles */,
27478E861A76475F004AE621 /* MCOAccountValidator.h in CopyFiles */,
27478E871A76475F004AE621 /* MCAccountValidator.h in CopyFiles */,
+ C6F49A901C8E96D70087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */,
C673EBF01A46B45300A53F7F /* MCIMAPFolderInfo.h in CopyFiles */,
C6181D3319FE0F8D0088FBBC /* MCIMAPFetchParsedContentOperation.h in CopyFiles */,
C6181D3219FE0F8A0088FBBC /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */,
@@ -1069,7 +1072,6 @@
C69BA85E17DEFD9F00D601B7 /* NSIndexSet+MCO.h in CopyFiles */,
84391346199C3ABB00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */,
84D7373A199BF81D005124E5 /* MCNNTPOperation.h in CopyFiles */,
- 84D73753199BFBE6005124E5 /* MCNNTPCheckAccountOperation.h in CopyFiles */,
84D73748199BFACA005124E5 /* MCNNTPAsyncSession.h in CopyFiles */,
84D7375F199BFF38005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */,
C6E665001790963E0063F2CF /* MCIMAPMessageRenderingOperation.h in CopyFiles */,
@@ -1281,6 +1283,7 @@
27478E881A7647AC004AE621 /* MCOAccountValidator.h in CopyFiles */,
27478E891A7647AC004AE621 /* MCAccountValidator.h in CopyFiles */,
C673EBEF1A46B44E00A53F7F /* MCIMAPFolderInfo.h in CopyFiles */,
+ C6F49A8F1C8E96D00087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */,
8199FBF719FAF3AF0040BBC3 /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */,
8199FBF819FAF3AF0040BBC3 /* MCIMAPFetchParsedContentOperation.h in CopyFiles */,
C6D4FD3619FA9F4F001F7E01 /* MCNNTPFetchServerTimeOperation.h in CopyFiles */,
@@ -1309,7 +1312,6 @@
84D73786199C0118005124E5 /* MCONNTPFetchArticleOperation.h in CopyFiles */,
84391347199C3ABD00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */,
84D73749199BFACF005124E5 /* MCNNTPAsyncSession.h in CopyFiles */,
- 84D73752199BFBE3005124E5 /* MCNNTPCheckAccountOperation.h in CopyFiles */,
4B3C1BE217ABFF7C008BBF4C /* MCOIMAPQuotaOperation.h in CopyFiles */,
84D7374E199BFBBA005124E5 /* MCNNTPFetchHeaderOperation.h in CopyFiles */,
84D7375E199BFF34005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */,
@@ -2066,6 +2068,8 @@
C6EFFBC7182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPMultiDisconnectOperation.h; sourceTree = "<group>"; };
C6EFFBCA1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMultiDisconnectOperation.h; sourceTree = "<group>"; };
C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMultiDisconnectOperation.mm; sourceTree = "<group>"; };
+ C6F49A911C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPCheckAccountOperation.h; sourceTree = "<group>"; };
+ C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPCheckAccountOperation.mm; sourceTree = "<group>"; };
C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMessage.h; sourceTree = "<group>"; };
C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMessage.mm; sourceTree = "<group>"; };
C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMessagePart.h; sourceTree = "<group>"; };
@@ -3152,6 +3156,8 @@
C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */,
1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */,
1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */,
+ C6F49A911C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.h */,
+ C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */,
);
path = imap;
sourceTree = "<group>";
@@ -3634,6 +3640,7 @@
C64BB22E16E5C1EE000DB34C /* MCIndexSet.cpp in Sources */,
84D73764199BFFC7005124E5 /* MCONNTPSession.mm in Sources */,
C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */,
+ C6F49A931C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */,
BDCD7CE51A70771B0001DCC3 /* ustring.cpp in Sources */,
C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */,
C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */,
@@ -3912,6 +3919,7 @@
1820E7D61BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp in Sources */,
C6BA2BEE1705F4E6003F0E9E /* MCIMAPCapabilityOperation.cpp in Sources */,
C6BA2BEF1705F4E6003F0E9E /* MCIndexSet.cpp in Sources */,
+ C6F49A941C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */,
84D73765199BFFC7005124E5 /* MCONNTPSession.mm in Sources */,
BDCD7CE61A70771B0001DCC3 /* ustring.cpp in Sources */,
C6BA2BF01705F4E6003F0E9E /* MCOAbstractMessage.mm in Sources */,
diff --git a/src/async/imap/MCAsyncIMAP.h b/src/async/imap/MCAsyncIMAP.h
index 1fb51de0..e6d6d367 100755
--- a/src/async/imap/MCAsyncIMAP.h
+++ b/src/async/imap/MCAsyncIMAP.h
@@ -35,5 +35,6 @@
#include <MailCore/MCIMAPOperationCallback.h>
#include <MailCore/MCIMAPMessageRenderingOperation.h>
#include <MailCore/MCIMAPCustomCommandOperation.h>
+#include <MailCore/MCIMAPCheckAccountOperation.h>
#endif
diff --git a/src/async/imap/MCIMAPAsyncSession.cpp b/src/async/imap/MCIMAPAsyncSession.cpp
index 976dce95..aa7be032 100755
--- a/src/async/imap/MCIMAPAsyncSession.cpp
+++ b/src/async/imap/MCIMAPAsyncSession.cpp
@@ -719,7 +719,7 @@ IMAPOperation * IMAPAsyncSession::connectOperation()
return op;
}
-IMAPOperation * IMAPAsyncSession::checkAccountOperation()
+IMAPCheckAccountOperation * IMAPAsyncSession::checkAccountOperation()
{
IMAPCheckAccountOperation * op = new IMAPCheckAccountOperation();
op->setMainSession(this);
diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h
index f5129a26..873c3dde 100755
--- a/src/async/imap/MCIMAPAsyncSession.h
+++ b/src/async/imap/MCIMAPAsyncSession.h
@@ -42,6 +42,7 @@ namespace mailcore {
class IMAPIdentity;
class OperationQueueCallback;
class IMAPCustomCommandOperation;
+ class IMAPCheckAccountOperation;
class MAILCORE_EXPORT IMAPAsyncSession : public Object {
public:
@@ -163,7 +164,7 @@ namespace mailcore {
virtual IMAPIdentityOperation * identityOperation(IMAPIdentity * identity);
virtual IMAPOperation * connectOperation();
- virtual IMAPOperation * checkAccountOperation();
+ virtual IMAPCheckAccountOperation * checkAccountOperation();
virtual IMAPOperation * disconnectOperation();
virtual IMAPCapabilityOperation * capabilityOperation();
diff --git a/src/async/imap/MCIMAPCheckAccountOperation.cpp b/src/async/imap/MCIMAPCheckAccountOperation.cpp
index 5baa89a9..4a833711 100644
--- a/src/async/imap/MCIMAPCheckAccountOperation.cpp
+++ b/src/async/imap/MCIMAPCheckAccountOperation.cpp
@@ -13,11 +13,30 @@
using namespace mailcore;
+IMAPCheckAccountOperation::IMAPCheckAccountOperation()
+{
+ mLoginResponse = NULL;
+}
+
+IMAPCheckAccountOperation::~IMAPCheckAccountOperation()
+{
+ MC_SAFE_RELEASE(mLoginResponse);
+}
+
void IMAPCheckAccountOperation::main()
{
ErrorCode error;
session()->session()->connectIfNeeded(&error);
- if (error == ErrorNone)
+ if (error == ErrorNone) {
session()->session()->login(&error);
+ if (error != ErrorNone) {
+ MC_SAFE_REPLACE_COPY(String, mLoginResponse, session()->session()->loginResponse());
+ }
+ }
setError(error);
}
+
+String * IMAPCheckAccountOperation::loginResponse()
+{
+ return mLoginResponse;
+}
diff --git a/src/async/imap/MCIMAPCheckAccountOperation.h b/src/async/imap/MCIMAPCheckAccountOperation.h
index 9c81f00e..b6ce9dbf 100644
--- a/src/async/imap/MCIMAPCheckAccountOperation.h
+++ b/src/async/imap/MCIMAPCheckAccountOperation.h
@@ -17,8 +17,17 @@
namespace mailcore {
class MAILCORE_EXPORT IMAPCheckAccountOperation : public IMAPOperation {
+ public:
+ IMAPCheckAccountOperation();
+ virtual ~IMAPCheckAccountOperation();
+
+ virtual String * loginResponse();
+
public: // subclass behavior
virtual void main();
+
+ private:
+ String * mLoginResponse;
};
}
diff --git a/src/cmake/objc.cmake b/src/cmake/objc.cmake
index aeb01d3b..f4e10b28 100644
--- a/src/cmake/objc.cmake
+++ b/src/cmake/objc.cmake
@@ -43,6 +43,7 @@ set(objc_imap_files
objc/imap/MCOIMAPSearchOperation.mm
objc/imap/MCOIMAPNoopOperation.mm
objc/imap/MCOIMAPCustomCommandOperation.mm
+ objc/imap/MCOIMAPCheckAccountOperation.mm
objc/imap/MCOIMAPSession.mm
)
diff --git a/src/cmake/public-headers.cmake b/src/cmake/public-headers.cmake
index bcbdb0b6..a6bd7f93 100644
--- a/src/cmake/public-headers.cmake
+++ b/src/cmake/public-headers.cmake
@@ -102,6 +102,7 @@ async/imap/MCIMAPQuotaOperation.h
async/imap/MCIMAPOperationCallback.h
async/imap/MCIMAPMessageRenderingOperation.h
async/imap/MCIMAPCustomCommandOperation.h
+async/imap/MCIMAPCheckAccountOperation.h
async/pop/MCAsyncPOP.h
async/pop/MCPOPAsyncSession.h
async/pop/MCPOPOperation.h
diff --git a/src/core/imap/MCIMAPSession.cpp b/src/core/imap/MCIMAPSession.cpp
index 8b8565d9..8f404cc9 100755
--- a/src/core/imap/MCIMAPSession.cpp
+++ b/src/core/imap/MCIMAPSession.cpp
@@ -480,6 +480,11 @@ bool IMAPSession::isVoIPEnabled()
return mVoIPEnabled;
}
+String * IMAPSession::loginResponse()
+{
+ return mLoginResponse;
+}
+
static bool hasError(int errorCode)
{
return ((errorCode != MAILIMAP_NO_ERROR) && (errorCode != MAILIMAP_NO_ERROR_AUTHENTICATED) &&
@@ -829,6 +834,7 @@ void IMAPSession::login(ErrorCode * pError)
if (mImap->imap_response != NULL) {
response = String::stringWithUTF8Characters(mImap->imap_response);
}
+ MC_SAFE_REPLACE_COPY(String, mLoginResponse, response);
if (response->locationOfString(MCSTR("not enabled for IMAP use")) != -1) {
* pError = ErrorGmailIMAPNotEnabled;
}
diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h
index 9c6ba95b..fa230d40 100755
--- a/src/core/imap/MCIMAPSession.h
+++ b/src/core/imap/MCIMAPSession.h
@@ -207,6 +207,8 @@ namespace mailcore {
/** Check if the automatic query of the capabilities of the IMAP server is enabled. */
virtual bool isAutomaticConfigurationEnabled();
+
+ virtual String * loginResponse();
public: // private
virtual void loginIfNeeded(ErrorCode * pError);
diff --git a/src/core/provider/MCAccountValidator.cpp b/src/core/provider/MCAccountValidator.cpp
index 1e6ebdd9..d35bd000 100644
--- a/src/core/provider/MCAccountValidator.cpp
+++ b/src/core/provider/MCAccountValidator.cpp
@@ -18,6 +18,7 @@
#include "MCPOPOperation.h"
#include "MCSMTPOperation.h"
#include "MCMXRecordResolverOperation.h"
+#include "MCIMAPCheckAccountOperation.h"
using namespace mailcore;
@@ -47,6 +48,7 @@ void AccountValidator::init()
mImapError = ErrorNone;
mPopError = ErrorNone;
mSmtpError = ErrorNone;
+ mImapLoginResponse = NULL;
mCurrentServiceIndex = 0;
mCurrentServiceTested = 0;
@@ -77,6 +79,7 @@ AccountValidator::AccountValidator()
AccountValidator::~AccountValidator()
{
pthread_mutex_destroy(&mConnectionLoggerLock);
+ MC_SAFE_RELEASE(mImapLoginResponse);
MC_SAFE_RELEASE(mEmail);
MC_SAFE_RELEASE(mUsername);
MC_SAFE_RELEASE(mPassword);
@@ -256,7 +259,7 @@ void AccountValidator::checkNextHost()
mImapSession->setConnectionType(mImapServer->connectionType());
mImapSession->setConnectionLogger(this);
- mOperation = (IMAPOperation *)mImapSession->checkAccountOperation();
+ mOperation = mImapSession->checkAccountOperation();
mOperation->retain();
mOperation->setCallback(this);
mOperation->start();
@@ -340,6 +343,7 @@ void AccountValidator::checkNextHostDone()
if (mCurrentServiceTested == SERVICE_IMAP) {
mImapError = ((IMAPOperation *)mOperation)->error();
+ MC_SAFE_REPLACE_COPY(String, mImapLoginResponse, ((IMAPCheckAccountOperation *)mOperation)->loginResponse());
error = mImapError;
mImapSession->setConnectionLogger(NULL);
MC_SAFE_RELEASE(mImapSession);
@@ -506,6 +510,11 @@ ErrorCode AccountValidator::smtpError()
return mSmtpError;
}
+String * AccountValidator::imapLoginResponse()
+{
+ return mImapLoginResponse;
+}
+
void AccountValidator::setConnectionLogger(ConnectionLogger * logger)
{
pthread_mutex_lock(&mConnectionLoggerLock);
diff --git a/src/core/provider/MCAccountValidator.h b/src/core/provider/MCAccountValidator.h
index 788458b6..7029870f 100644
--- a/src/core/provider/MCAccountValidator.h
+++ b/src/core/provider/MCAccountValidator.h
@@ -64,7 +64,8 @@ namespace mailcore {
virtual ErrorCode imapError();
virtual ErrorCode popError();
virtual ErrorCode smtpError();
-
+ virtual String * imapLoginResponse();
+
virtual void start();
virtual void cancel();
@@ -89,6 +90,7 @@ namespace mailcore {
ErrorCode mImapError;
ErrorCode mPopError;
ErrorCode mSmtpError;
+ String * mImapLoginResponse;
MailProvider * mProvider;
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 <MailCore/MCOIMAPOperation.h>
+
+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