aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-03-12 09:33:15 -0700
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-03-12 09:33:15 -0700
commitf262b42e781de2d68ae4adbbf14f44b14b901fc4 (patch)
tree1bd8c54d0136533bdf34f60a8975f57db047d64f
parentdc21371083c7b8e9258bed583aa1b1df97a39335 (diff)
parentd333d7e64c8755e770f28fd52b72d21403695659 (diff)
Merge pull request #632 from marcopifferi/master
Cancel all operations
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncConnection.cc5
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncConnection.h1
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.cc8
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.h1
-rw-r--r--src/core/basetypes/MCOperationQueue.cc10
-rw-r--r--src/core/basetypes/MCOperationQueue.h1
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.h5
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.mm5
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];