diff options
-rwxr-xr-x | src/async/imap/MCIMAPAsyncConnection.cc | 5 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncConnection.h | 1 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.cc | 8 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.h | 1 | ||||
-rw-r--r-- | src/core/basetypes/MCOperationQueue.cc | 13 | ||||
-rw-r--r-- | src/core/basetypes/MCOperationQueue.h | 1 | ||||
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.h | 5 | ||||
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.mm | 5 |
8 files changed, 39 insertions, 0 deletions
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc index 266a120f..04d3a93c 100755 --- a/src/async/imap/MCIMAPAsyncConnection.cc +++ b/src/async/imap/MCIMAPAsyncConnection.cc @@ -552,6 +552,11 @@ unsigned int IMAPAsyncConnection::operationsCount() return mQueue->count(); } +void IMAPAsyncConnection::cancelAllOperations() +{ + mQueue->cancelAllOperations(); +} + void IMAPAsyncConnection::runOperation(IMAPOperation * operation) { if (mScheduledAutomaticDisconnect) { diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h index 28bac80c..6af22b50 100755 --- a/src/async/imap/MCIMAPAsyncConnection.h +++ b/src/async/imap/MCIMAPAsyncConnection.h @@ -167,6 +167,7 @@ namespace mailcore { virtual void runOperation(IMAPOperation * operation); virtual IMAPSession * session(); + virtual void cancelAllOperations(); virtual unsigned int operationsCount(); virtual void setLastFolder(String * folder); diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc index 44f753c9..c037768f 100755 --- a/src/async/imap/MCIMAPAsyncSession.cc +++ b/src/async/imap/MCIMAPAsyncSession.cc @@ -567,6 +567,14 @@ bool IMAPAsyncSession::isOperationQueueRunning() return mQueueRunning; } +void IMAPAsyncSession::cancelAllOperations() +{ + for(unsigned int i = 0 ; i < mSessions->count() ; i ++) { + IMAPAsyncConnection * currentSession = (IMAPAsyncConnection *) mSessions->objectAtIndex(i); + currentSession->cancelAllOperations(); + } +} + void IMAPAsyncSession::operationRunningStateChanged() { bool isRunning = false; diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index ddd672e0..b00af1d3 100755 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -97,6 +97,7 @@ namespace mailcore { virtual void setOperationQueueCallback(OperationQueueCallback * callback); virtual OperationQueueCallback * operationQueueCallback(); virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); virtual IMAPIdentity * serverIdentity(); virtual IMAPIdentity * clientIdentity(); diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc index 73b62f19..2e1f03b1 100644 --- a/src/core/basetypes/MCOperationQueue.cc +++ b/src/core/basetypes/MCOperationQueue.cc @@ -49,6 +49,19 @@ void OperationQueue::addOperation(Operation * op) startThread(); } +void OperationQueue::cancelAllOperations() +{ + pthread_mutex_lock(&mLock); + for (int i=0 ; i<mOperations->count(); i++) + { + Operation * op = (Operation *) mOperations->objectAtIndex(i); + if (op!=NULL) { + op->cancel(); + } + } + pthread_mutex_unlock(&mLock); +} + void OperationQueue::runOperationsOnThread(OperationQueue * queue) { queue->runOperations(); diff --git a/src/core/basetypes/MCOperationQueue.h b/src/core/basetypes/MCOperationQueue.h index 202dec40..b5f29143 100644 --- a/src/core/basetypes/MCOperationQueue.h +++ b/src/core/basetypes/MCOperationQueue.h @@ -21,6 +21,7 @@ namespace mailcore { virtual ~OperationQueue(); virtual void addOperation(Operation * op); + virtual void cancelAllOperations(); virtual unsigned int count(); diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h index 20c0f874..0a9f147f 100755 --- a/src/objc/imap/MCOIMAPSession.h +++ b/src/objc/imap/MCOIMAPSession.h @@ -138,6 +138,11 @@ */ @property (nonatomic, copy) MCOOperationQueueRunningChangeBlock operationQueueRunningChangeBlock; +/** + Cancel all operations + */ +- (void)cancelAllOperation; + /** @name Folder Operations */ /** diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index 0b0c638a..d4b1dbfe 100755 --- a/src/objc/imap/MCOIMAPSession.mm +++ b/src/objc/imap/MCOIMAPSession.mm @@ -168,6 +168,11 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, return _operationQueueRunningChangeBlock; } +- (void)cancelAllOperation +{ + MCO_NATIVE_INSTANCE->cancelAllOperations(); +} + #pragma mark - Operations #define MCO_TO_OBJC_OP(op) [self _objcOperationFromNativeOp:op]; |