aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncConnection.h3
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.h3
-rw-r--r--src/async/imap/MCIMAPOperation.cc9
-rw-r--r--src/async/pop/MCPOPAsyncSession.cc12
-rw-r--r--src/async/pop/MCPOPAsyncSession.h5
-rw-r--r--src/async/pop/MCPOPOperation.cc10
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cc12
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h5
-rw-r--r--src/async/smtp/MCSMTPOperation.cc10
-rw-r--r--src/core/basetypes/MCOperation.h4
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.h2
-rw-r--r--src/objc/pop/MCOPOPSession.h6
-rw-r--r--src/objc/pop/MCOPOPSession.mm1
-rw-r--r--src/objc/smtp/MCOSMTPSession.h6
-rw-r--r--src/objc/smtp/MCOSMTPSession.mm1
15 files changed, 77 insertions, 12 deletions
diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h
index a93441d0..1f4014da 100755
--- a/src/async/imap/MCIMAPAsyncConnection.h
+++ b/src/async/imap/MCIMAPAsyncConnection.h
@@ -4,9 +4,6 @@
#include <MailCore/MCBaseTypes.h>
#include <MailCore/MCMessageConstants.h>
-#if __APPLE__
-#include <dispatch/dispatch.h>
-#endif
#ifdef __cplusplus
diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h
index 53416435..3b1f2ccc 100755
--- a/src/async/imap/MCIMAPAsyncSession.h
+++ b/src/async/imap/MCIMAPAsyncSession.h
@@ -12,9 +12,6 @@
#include <MailCore/MCBaseTypes.h>
#include <MailCore/MCMessageConstants.h>
-#if __APPLE__
-#include <dispatch/dispatch.h>
-#endif
#ifdef __cplusplus
diff --git a/src/async/imap/MCIMAPOperation.cc b/src/async/imap/MCIMAPOperation.cc
index 519ba246..e4b3529b 100644
--- a/src/async/imap/MCIMAPOperation.cc
+++ b/src/async/imap/MCIMAPOperation.cc
@@ -35,7 +35,14 @@ void IMAPOperation::setSession(IMAPAsyncConnection * session)
{
MC_SAFE_REPLACE_RETAIN(IMAPAsyncConnection, mSession, session);
#if __APPLE__
- setCallbackDispatchQueue(session->dispatchQueue());
+ dispatch_queue_t queue;
+ if (session != NULL) {
+ queue = session->dispatchQueue();
+ }
+ else {
+ queue = dispatch_get_main_queue();
+ }
+ setCallbackDispatchQueue(queue);
#endif
}
diff --git a/src/async/pop/MCPOPAsyncSession.cc b/src/async/pop/MCPOPAsyncSession.cc
index 07420c0c..2a6bd3b0 100644
--- a/src/async/pop/MCPOPAsyncSession.cc
+++ b/src/async/pop/MCPOPAsyncSession.cc
@@ -261,3 +261,15 @@ void POPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer)
}
pthread_mutex_unlock(&mConnectionLoggerLock);
}
+
+#if __APPLE__
+void POPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue)
+{
+ mQueue->setDispatchQueue(dispatchQueue);
+}
+
+dispatch_queue_t POPAsyncSession::dispatchQueue()
+{
+ return mQueue->dispatchQueue();
+}
+#endif
diff --git a/src/async/pop/MCPOPAsyncSession.h b/src/async/pop/MCPOPAsyncSession.h
index b863be11..ff8df853 100644
--- a/src/async/pop/MCPOPAsyncSession.h
+++ b/src/async/pop/MCPOPAsyncSession.h
@@ -57,6 +57,11 @@ namespace mailcore {
virtual void setConnectionLogger(ConnectionLogger * logger);
virtual ConnectionLogger * connectionLogger();
+#ifdef __APPLE__
+ virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
+ virtual dispatch_queue_t dispatchQueue();
+#endif
+
virtual POPFetchMessagesOperation * fetchMessagesOperation();
virtual POPFetchHeaderOperation * fetchHeaderOperation(unsigned int index);
diff --git a/src/async/pop/MCPOPOperation.cc b/src/async/pop/MCPOPOperation.cc
index 27bfc2ec..479876b6 100644
--- a/src/async/pop/MCPOPOperation.cc
+++ b/src/async/pop/MCPOPOperation.cc
@@ -31,6 +31,16 @@ POPOperation::~POPOperation()
void POPOperation::setSession(POPAsyncSession * session)
{
MC_SAFE_REPLACE_RETAIN(POPAsyncSession, mSession, session);
+#if __APPLE__
+ dispatch_queue_t queue;
+ if (session != NULL) {
+ queue = session->dispatchQueue();
+ }
+ else {
+ queue = dispatch_get_main_queue();
+ }
+ setCallbackDispatchQueue(queue);
+#endif
}
POPAsyncSession * POPOperation::session()
diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc
index e24efc09..1964c944 100644
--- a/src/async/smtp/MCSMTPAsyncSession.cc
+++ b/src/async/smtp/MCSMTPAsyncSession.cc
@@ -272,3 +272,15 @@ void SMTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer)
}
pthread_mutex_unlock(&mConnectionLoggerLock);
}
+
+#if __APPLE__
+void SMTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue)
+{
+ mQueue->setDispatchQueue(dispatchQueue);
+}
+
+dispatch_queue_t SMTPAsyncSession::dispatchQueue()
+{
+ return mQueue->dispatchQueue();
+}
+#endif
diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h
index 63630b77..b3ef4455 100644
--- a/src/async/smtp/MCSMTPAsyncSession.h
+++ b/src/async/smtp/MCSMTPAsyncSession.h
@@ -54,6 +54,11 @@ namespace mailcore {
virtual void setConnectionLogger(ConnectionLogger * logger);
virtual ConnectionLogger * connectionLogger();
+#ifdef __APPLE__
+ virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
+ virtual dispatch_queue_t dispatchQueue();
+#endif
+
virtual SMTPOperation * sendMessageOperation(Data * messageData);
virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients,
Data * messageData);
diff --git a/src/async/smtp/MCSMTPOperation.cc b/src/async/smtp/MCSMTPOperation.cc
index 0b180c5f..9ddcede2 100644
--- a/src/async/smtp/MCSMTPOperation.cc
+++ b/src/async/smtp/MCSMTPOperation.cc
@@ -29,6 +29,16 @@ SMTPOperation::~SMTPOperation()
void SMTPOperation::setSession(SMTPAsyncSession * session)
{
MC_SAFE_REPLACE_RETAIN(SMTPAsyncSession, mSession, session);
+#if __APPLE__
+ dispatch_queue_t queue;
+ if (session != NULL) {
+ queue = session->dispatchQueue();
+ }
+ else {
+ queue = dispatch_get_main_queue();
+ }
+ setCallbackDispatchQueue(queue);
+#endif
}
SMTPAsyncSession * SMTPOperation::session()
diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h
index cf4976a9..9e59b11e 100644
--- a/src/core/basetypes/MCOperation.h
+++ b/src/core/basetypes/MCOperation.h
@@ -5,10 +5,6 @@
#include <pthread.h>
#include <MailCore/MCObject.h>
-#if __APPLE__
-#include <dispatch/dispatch.h>
-#endif
-
#ifdef __cplusplus
namespace mailcore {
diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h
index cbe39b50..abfcc8da 100755
--- a/src/objc/imap/MCOIMAPSession.h
+++ b/src/objc/imap/MCOIMAPSession.h
@@ -110,7 +110,7 @@
*/
@property (nonatomic, copy) MCOConnectionLogger connectionLogger;
-/** This property give some hints to MCOIMAPSession about where it's called from.
+/** This property provides some hints to MCOIMAPSession about where it's called from.
It will make MCOIMAPSession safe. It will also set all the callbacks of operations to run on this given queue.
Defaults to the main queue.
This property should be used only if there's performance issue using MCOIMAPSession in the main thread. */
diff --git a/src/objc/pop/MCOPOPSession.h b/src/objc/pop/MCOPOPSession.h
index aa381a62..6941aa13 100644
--- a/src/objc/pop/MCOPOPSession.h
+++ b/src/objc/pop/MCOPOPSession.h
@@ -62,6 +62,12 @@ See MCOConnectionType for more information.*/
*/
@property (nonatomic, copy) MCOConnectionLogger connectionLogger;
+/** This property provides some hints to MCOPOPSession about where it's called from.
+ It will make MCOPOPSession safe. It will also set all the callbacks of operations to run on this given queue.
+ Defaults to the main queue.
+ This property should be used only if there's performance issue using MCOPOPSession in the main thread. */
+@property (nonatomic, assign) dispatch_queue_t dispatchQueue;
+
/** @name Operations */
/**
diff --git a/src/objc/pop/MCOPOPSession.mm b/src/objc/pop/MCOPOPSession.mm
index 1037f951..893995a5 100644
--- a/src/objc/pop/MCOPOPSession.mm
+++ b/src/objc/pop/MCOPOPSession.mm
@@ -82,6 +82,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(MCOAuthType, mailcore::AuthType, setAuthType, authTyp
MCO_OBJC_SYNTHESIZE_SCALAR(MCOConnectionType, mailcore::ConnectionType, setConnectionType, connectionType)
MCO_OBJC_SYNTHESIZE_SCALAR(NSTimeInterval, time_t, setTimeout, timeout)
MCO_OBJC_SYNTHESIZE_BOOL(setCheckCertificateEnabled, isCheckCertificateEnabled)
+MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, dispatchQueue);
- (void) setConnectionLogger:(MCOConnectionLogger)connectionLogger
{
diff --git a/src/objc/smtp/MCOSMTPSession.h b/src/objc/smtp/MCOSMTPSession.h
index 90351551..09116508 100644
--- a/src/objc/smtp/MCOSMTPSession.h
+++ b/src/objc/smtp/MCOSMTPSession.h
@@ -76,6 +76,12 @@
*/
@property (nonatomic, copy) MCOConnectionLogger connectionLogger;
+/** This property provides some hints to MCOSMTPSession about where it's called from.
+ It will make MCOSMTPSession safe. It will also set all the callbacks of operations to run on this given queue.
+ Defaults to the main queue.
+ This property should be used only if there's performance issue using MCOSMTPSession in the main thread. */
+@property (nonatomic, assign) dispatch_queue_t dispatchQueue;
+
/** @name Operations */
/**
diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm
index 29211118..b6ae6a4f 100644
--- a/src/objc/smtp/MCOSMTPSession.mm
+++ b/src/objc/smtp/MCOSMTPSession.mm
@@ -81,6 +81,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(MCOConnectionType, mailcore::ConnectionType, setConne
MCO_OBJC_SYNTHESIZE_SCALAR(NSTimeInterval, time_t, setTimeout, timeout)
MCO_OBJC_SYNTHESIZE_BOOL(setCheckCertificateEnabled, isCheckCertificateEnabled)
MCO_OBJC_SYNTHESIZE_BOOL(setUseHeloIPEnabled, useHeloIPEnabled)
+MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, dispatchQueue);
- (void) setConnectionLogger:(MCOConnectionLogger)connectionLogger
{