diff options
author | 2014-03-12 09:33:15 -0700 | |
---|---|---|
committer | 2014-03-12 09:33:15 -0700 | |
commit | f262b42e781de2d68ae4adbbf14f44b14b901fc4 (patch) | |
tree | 1bd8c54d0136533bdf34f60a8975f57db047d64f | |
parent | dc21371083c7b8e9258bed583aa1b1df97a39335 (diff) | |
parent | d333d7e64c8755e770f28fd52b72d21403695659 (diff) |
Merge pull request #632 from marcopifferi/master
Cancel all operations
-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 | 10 | ||||
-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, 36 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..6840a279 100644 --- a/src/core/basetypes/MCOperationQueue.cc +++ b/src/core/basetypes/MCOperationQueue.cc @@ -49,6 +49,16 @@ void OperationQueue::addOperation(Operation * op) startThread(); } +void OperationQueue::cancelAllOperations() +{ + pthread_mutex_lock(&mLock); + for (unsigned int i = 0 ; i < mOperations->count() ; i ++) { + Operation * op = (Operation *) mOperations->objectAtIndex(i); + 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..09f1c610 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) cancelAllOperations; + /** @name Folder Operations */ /** diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index 0b0c638a..dddb27fa 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) cancelAllOperations +{ + MCO_NATIVE_INSTANCE->cancelAllOperations(); +} + #pragma mark - Operations #define MCO_TO_OBJC_OP(op) [self _objcOperationFromNativeOp:op]; |