aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/async/imap/MCIMAPIdleOperation.cc4
-rw-r--r--src/async/imap/MCIMAPOperation.cc4
-rw-r--r--src/async/pop/MCPOPOperation.cc2
-rw-r--r--src/async/smtp/MCSMTPOperation.cc2
-rw-r--r--src/core/basetypes/MCOperation.cc13
-rw-r--r--src/core/basetypes/MCOperation.h1
-rw-r--r--src/core/basetypes/MCOperationQueue.cc2
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