aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc/imap/MCOIMAPSession.mm
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-08-24 22:38:07 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-08-24 22:38:07 -0700
commitf8ab0cc697223156e7136d85ecf9f02f1889cb6d (patch)
tree07bf5bb3b731a6ee0d22de4b3311d16d53cf1939 /src/objc/imap/MCOIMAPSession.mm
parentb7febcf978c5faf6d70a132b88394d074df9c790 (diff)
Fixed #196: callback to notify when operations are running or not
Diffstat (limited to 'src/objc/imap/MCOIMAPSession.mm')
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.mm61
1 files changed, 54 insertions, 7 deletions
diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm
index ce814435..8b4bb363 100755
--- a/src/objc/imap/MCOIMAPSession.mm
+++ b/src/objc/imap/MCOIMAPSession.mm
@@ -22,19 +22,20 @@
#import <MailCore/MCAsync.h>
#include "MCIMAPMessageRenderingOperation.h"
-
+#include "MCOperationQueueCallback.h"
using namespace mailcore;
@interface MCOIMAPSession ()
- (void) _logWithSender:(void *)sender connectionType:(MCOConnectionLogType)logType data:(NSData *)data;
+- (void) _queueRunningChanged;
@end
-class MCOIMAPConnectionLoggerBridge : public Object, public ConnectionLogger {
+class MCOIMAPCallbackBridge : public Object, public ConnectionLogger, public OperationQueueCallback {
public:
- MCOIMAPConnectionLoggerBridge(MCOIMAPSession * session)
+ MCOIMAPCallbackBridge(MCOIMAPSession * session)
{
mSession = session;
}
@@ -44,6 +45,16 @@ public:
[mSession _logWithSender:sender connectionType:(MCOConnectionLogType)logType data:MCO_TO_OBJC(data)];
}
+ virtual void queueStartRunning()
+ {
+ [mSession _queueRunningChanged];
+ }
+
+ virtual void queueStoppedRunning()
+ {
+ [mSession _queueRunningChanged];
+ }
+
private:
MCOIMAPSession * mSession;
};
@@ -51,7 +62,8 @@ private:
@implementation MCOIMAPSession {
IMAPAsyncSession * _session;
MCOConnectionLogger _connectionLogger;
- MCOIMAPConnectionLoggerBridge * _loggerBridge;
+ MCOIMAPCallbackBridge * _callbackBridge;
+ MCOOperationQueueRunningChangeBlock _operationQueueRunningChangeBlock;
}
#define nativeType mailcore::IMAPAsyncSession
@@ -65,13 +77,17 @@ private:
self = [super init];
_session = new IMAPAsyncSession();
- _loggerBridge = new MCOIMAPConnectionLoggerBridge(self);
+ _callbackBridge = new MCOIMAPCallbackBridge(self);
+ _session->setOperationQueueCallback(_callbackBridge);
return self;
}
- (void)dealloc {
- MC_SAFE_RELEASE(_loggerBridge);
+ _session->setConnectionLogger(NULL);
+ _session->setOperationQueueCallback(NULL);
+ MC_SAFE_RELEASE(_callbackBridge);
+ [_operationQueueRunningChangeBlock release];
[_connectionLogger release];
_session->release();
[super dealloc];
@@ -116,7 +132,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, ma
_connectionLogger = [connectionLogger copy];
if (_connectionLogger != nil) {
- _session->setConnectionLogger(_loggerBridge);
+ _session->setConnectionLogger(_callbackBridge);
}
else {
_session->setConnectionLogger(NULL);
@@ -128,6 +144,24 @@ MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, ma
return _connectionLogger;
}
+- (void) setOperationQueueRunningChangeBlock:(MCOOperationQueueRunningChangeBlock)operationQueueRunningChangeBlock
+{
+ [_operationQueueRunningChangeBlock release];
+ _operationQueueRunningChangeBlock = [operationQueueRunningChangeBlock copy];
+
+ if (_operationQueueRunningChangeBlock != nil) {
+ _session->setOperationQueueCallback(_callbackBridge);
+ }
+ else {
+ _session->setOperationQueueCallback(NULL);
+ }
+}
+
+- (MCOOperationQueueRunningChangeBlock) operationQueueRunningChangeBlock
+{
+ return _operationQueueRunningChangeBlock;
+}
+
#pragma mark - Operations
#define MCO_TO_OBJC_OP(op) [self _objcOperationFromNativeOp:op];
@@ -407,4 +441,17 @@ MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, ma
return MCO_TO_OBJC_OP(coreOp);
}
+- (void) _queueRunningChanged
+{
+ if (_operationQueueRunningChangeBlock == NULL)
+ return;
+
+ _operationQueueRunningChangeBlock();
+}
+
+- (BOOL) isOperationQueueRunning
+{
+ return _session->isOperationQueueRunning();
+}
+
@end