diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/async/imap/MCIMAPIdleOperation.cc | 4 | ||||
-rw-r--r-- | src/async/imap/MCIMAPOperation.cc | 4 | ||||
-rw-r--r-- | src/async/pop/MCPOPOperation.cc | 2 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPOperation.cc | 2 | ||||
-rw-r--r-- | src/core/basetypes/MCOperation.cc | 13 | ||||
-rw-r--r-- | src/core/basetypes/MCOperation.h | 1 | ||||
-rw-r--r-- | src/core/basetypes/MCOperationQueue.cc | 2 |
7 files changed, 21 insertions, 7 deletions
diff --git a/src/async/imap/MCIMAPIdleOperation.cc b/src/async/imap/MCIMAPIdleOperation.cc index 7e7eaeb3..b0530bfa 100644 --- a/src/async/imap/MCIMAPIdleOperation.cc +++ b/src/async/imap/MCIMAPIdleOperation.cc @@ -54,7 +54,7 @@ void IMAPIdleOperation::main() return; } - performMethodOnMainThread((Object::Method) &IMAPIdleOperation::prepare, NULL, true); + performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::prepare, NULL, true); if (!mSetupSuccess) { return; @@ -63,7 +63,7 @@ void IMAPIdleOperation::main() session()->session()->idle(folder(), mLastKnownUid, &error); setError(error); - performMethodOnMainThread((Object::Method) &IMAPIdleOperation::unprepare, NULL, true); + performMethodOnCallbackThread((Object::Method) &IMAPIdleOperation::unprepare, NULL, true); } void IMAPIdleOperation::interruptIdle() diff --git a/src/async/imap/MCIMAPOperation.cc b/src/async/imap/MCIMAPOperation.cc index 99e4d6e0..da3ae6dd 100644 --- a/src/async/imap/MCIMAPOperation.cc +++ b/src/async/imap/MCIMAPOperation.cc @@ -93,7 +93,7 @@ void IMAPOperation::bodyProgress(IMAPSession * session, unsigned int current, un context->current = current; context->maximum = maximum; retain(); - performMethodOnMainThread((Object::Method) &IMAPOperation::bodyProgressOnMainThread, context, true); + performMethodOnCallbackThread((Object::Method) &IMAPOperation::bodyProgressOnMainThread, context, true); } void IMAPOperation::bodyProgressOnMainThread(void * ctx) @@ -120,7 +120,7 @@ void IMAPOperation::itemsProgress(IMAPSession * session, unsigned int current, u context->current = current; context->maximum = maximum; retain(); - performMethodOnMainThread((Object::Method) &IMAPOperation::itemsProgressOnMainThread, context, true); + performMethodOnCallbackThread((Object::Method) &IMAPOperation::itemsProgressOnMainThread, context, true); } void IMAPOperation::itemsProgressOnMainThread(void * ctx) diff --git a/src/async/pop/MCPOPOperation.cc b/src/async/pop/MCPOPOperation.cc index 76ecdb82..27bfc2ec 100644 --- a/src/async/pop/MCPOPOperation.cc +++ b/src/async/pop/MCPOPOperation.cc @@ -75,7 +75,7 @@ void POPOperation::bodyProgress(POPSession * session, unsigned int current, unsi context->maximum = maximum; retain(); - performMethodOnMainThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context); + performMethodOnCallbackThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context); } void POPOperation::bodyProgressOnMainThread(void * ctx) diff --git a/src/async/smtp/MCSMTPOperation.cc b/src/async/smtp/MCSMTPOperation.cc index c0430340..0b180c5f 100644 --- a/src/async/smtp/MCSMTPOperation.cc +++ b/src/async/smtp/MCSMTPOperation.cc @@ -73,7 +73,7 @@ void SMTPOperation::bodyProgress(SMTPSession * session, unsigned int current, un context->maximum = maximum; retain(); - performMethodOnMainThread((Object::Method) &SMTPOperation::bodyProgressOnMainThread, context); + performMethodOnCallbackThread((Object::Method) &SMTPOperation::bodyProgressOnMainThread, context); } void SMTPOperation::bodyProgressOnMainThread(void * ctx) diff --git a/src/core/basetypes/MCOperation.cc b/src/core/basetypes/MCOperation.cc index 5587f2f6..b6848d78 100644 --- a/src/core/basetypes/MCOperation.cc +++ b/src/core/basetypes/MCOperation.cc @@ -70,3 +70,16 @@ dispatch_queue_t Operation::callbackDispatchQueue() return mCallbackDispatchQueue; } #endif + +void Operation::performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone) +{ +#if __APPLE__ + dispatch_queue_t queue = mCallbackDispatchQueue; + if (queue == NULL) { + queue = dispatch_get_main_queue(); + } + performMethodOnDispatchQueue(method, context, queue, waitUntilDone); +#else + performMethodOnMainThread(method, context, waitUntilDone); +#endif +} diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h index 8c5b3127..cf4976a9 100644 --- a/src/core/basetypes/MCOperation.h +++ b/src/core/basetypes/MCOperation.h @@ -40,6 +40,7 @@ namespace mailcore { virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue); virtual dispatch_queue_t callbackDispatchQueue(); #endif + void performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone = false); private: OperationCallback * mCallback; diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc index 41e8f4c0..50b2416c 100644 --- a/src/core/basetypes/MCOperationQueue.cc +++ b/src/core/basetypes/MCOperationQueue.cc @@ -122,7 +122,7 @@ void OperationQueue::performOnCallbackThread(Operation * op, Method method, void if (queue == NULL) { queue = dispatch_get_main_queue(); } - performMethodOnDispatchQueue(method, context, op->callbackDispatchQueue(), waitUntilDone); + performMethodOnDispatchQueue(method, context, queue, waitUntilDone); #else performMethodOnMainThread(method, context, waitUntilDone); #endif |