aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async
diff options
context:
space:
mode:
authorGravatar Hoa V. Dinh <dinh.viet.hoa@gmail.com>2014-12-18 12:38:10 -0800
committerGravatar Hoa V. Dinh <dinh.viet.hoa@gmail.com>2014-12-18 12:38:10 -0800
commit3dfb8a6907c66698700cfaf279d4f94e7cd0f21e (patch)
treefca8bf99786e56ddb3f2e3354a6ff13554c57b4b /src/async
parentc1607b6787a8430d32058c6ab430bcc75285a577 (diff)
Fixed #1002: implemented operationqueue callback for smtp/nntp/pop
Diffstat (limited to 'src/async')
-rw-r--r--src/async/nntp/MCNNTPAsyncSession.cpp27
-rw-r--r--src/async/nntp/MCNNTPAsyncSession.h8
-rw-r--r--src/async/pop/MCPOPAsyncSession.cpp27
-rw-r--r--src/async/pop/MCPOPAsyncSession.h8
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cpp27
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h8
6 files changed, 102 insertions, 3 deletions
diff --git a/src/async/nntp/MCNNTPAsyncSession.cpp b/src/async/nntp/MCNNTPAsyncSession.cpp
index a78a70b4..65fb23f6 100644
--- a/src/async/nntp/MCNNTPAsyncSession.cpp
+++ b/src/async/nntp/MCNNTPAsyncSession.cpp
@@ -34,9 +34,15 @@ namespace mailcore {
virtual void queueStartRunning() {
mSession->retain();
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStartRunning();
+ }
}
virtual void queueStoppedRunning() {
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStoppedRunning();
+ }
mSession->release();
}
@@ -74,6 +80,7 @@ NNTPAsyncSession::NNTPAsyncSession()
pthread_mutex_init(&mConnectionLoggerLock, NULL);
mInternalLogger = new NNTPConnectionLogger(this);
mSession->setConnectionLogger(mInternalLogger);
+ mOperationQueueCallback = NULL;
}
NNTPAsyncSession::~NNTPAsyncSession()
@@ -300,3 +307,23 @@ dispatch_queue_t NNTPAsyncSession::dispatchQueue()
return mQueue->dispatchQueue();
}
#endif
+
+void NNTPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback)
+{
+ mOperationQueueCallback = callback;
+}
+
+OperationQueueCallback * NNTPAsyncSession::operationQueueCallback()
+{
+ return mOperationQueueCallback;
+}
+
+bool NNTPAsyncSession::isOperationQueueRunning()
+{
+ return mQueue->count() > 0;
+}
+
+void NNTPAsyncSession::cancelAllOperations()
+{
+ mQueue->cancelAllOperations();
+}
diff --git a/src/async/nntp/MCNNTPAsyncSession.h b/src/async/nntp/MCNNTPAsyncSession.h
index 7b9c8a4c..8a5753d4 100644
--- a/src/async/nntp/MCNNTPAsyncSession.h
+++ b/src/async/nntp/MCNNTPAsyncSession.h
@@ -52,7 +52,12 @@ namespace mailcore {
virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
virtual dispatch_queue_t dispatchQueue();
#endif
-
+
+ virtual void setOperationQueueCallback(OperationQueueCallback * callback);
+ virtual OperationQueueCallback * operationQueueCallback();
+ virtual bool isOperationQueueRunning();
+ virtual void cancelAllOperations();
+
virtual NNTPFetchAllArticlesOperation * fetchAllArticlesOperation(String * group);
virtual NNTPFetchHeaderOperation * fetchHeaderOperation(String * groupName, unsigned int index);
@@ -78,6 +83,7 @@ namespace mailcore {
ConnectionLogger * mConnectionLogger;
pthread_mutex_t mConnectionLoggerLock;
NNTPConnectionLogger * mInternalLogger;
+ OperationQueueCallback * mOperationQueueCallback;
public: // private
virtual void runOperation(NNTPOperation * operation);
diff --git a/src/async/pop/MCPOPAsyncSession.cpp b/src/async/pop/MCPOPAsyncSession.cpp
index 2a6bd3b0..dead660f 100644
--- a/src/async/pop/MCPOPAsyncSession.cpp
+++ b/src/async/pop/MCPOPAsyncSession.cpp
@@ -32,9 +32,15 @@ namespace mailcore {
virtual void queueStartRunning() {
mSession->retain();
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStartRunning();
+ }
}
virtual void queueStoppedRunning() {
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStoppedRunning();
+ }
mSession->release();
}
@@ -72,6 +78,7 @@ POPAsyncSession::POPAsyncSession()
pthread_mutex_init(&mConnectionLoggerLock, NULL);
mInternalLogger = new POPConnectionLogger(this);
mSession->setConnectionLogger(mInternalLogger);
+ mOperationQueueCallback = NULL;
}
POPAsyncSession::~POPAsyncSession()
@@ -273,3 +280,23 @@ dispatch_queue_t POPAsyncSession::dispatchQueue()
return mQueue->dispatchQueue();
}
#endif
+
+void POPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback)
+{
+ mOperationQueueCallback = callback;
+}
+
+OperationQueueCallback * POPAsyncSession::operationQueueCallback()
+{
+ return mOperationQueueCallback;
+}
+
+bool POPAsyncSession::isOperationQueueRunning()
+{
+ return mQueue->count() > 0;
+}
+
+void POPAsyncSession::cancelAllOperations()
+{
+ mQueue->cancelAllOperations();
+}
diff --git a/src/async/pop/MCPOPAsyncSession.h b/src/async/pop/MCPOPAsyncSession.h
index 2cc50e12..7dfe7931 100644
--- a/src/async/pop/MCPOPAsyncSession.h
+++ b/src/async/pop/MCPOPAsyncSession.h
@@ -61,7 +61,12 @@ namespace mailcore {
virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
virtual dispatch_queue_t dispatchQueue();
#endif
-
+
+ virtual void setOperationQueueCallback(OperationQueueCallback * callback);
+ virtual OperationQueueCallback * operationQueueCallback();
+ virtual bool isOperationQueueRunning();
+ virtual void cancelAllOperations();
+
virtual POPFetchMessagesOperation * fetchMessagesOperation();
virtual POPFetchHeaderOperation * fetchHeaderOperation(unsigned int index);
@@ -84,6 +89,7 @@ namespace mailcore {
ConnectionLogger * mConnectionLogger;
pthread_mutex_t mConnectionLoggerLock;
POPConnectionLogger * mInternalLogger;
+ OperationQueueCallback * mOperationQueueCallback;
public: // private
virtual void runOperation(POPOperation * operation);
diff --git a/src/async/smtp/MCSMTPAsyncSession.cpp b/src/async/smtp/MCSMTPAsyncSession.cpp
index 8acfc9c5..9fe55e2e 100644
--- a/src/async/smtp/MCSMTPAsyncSession.cpp
+++ b/src/async/smtp/MCSMTPAsyncSession.cpp
@@ -24,9 +24,15 @@ namespace mailcore {
virtual void queueStartRunning() {
mSession->retain();
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStartRunning();
+ }
}
virtual void queueStoppedRunning() {
+ if (mSession->operationQueueCallback() != NULL) {
+ mSession->operationQueueCallback()->queueStoppedRunning();
+ }
mSession->tryAutomaticDisconnect();
mSession->release();
}
@@ -65,6 +71,7 @@ SMTPAsyncSession::SMTPAsyncSession()
pthread_mutex_init(&mConnectionLoggerLock, NULL);
mInternalLogger = new SMTPConnectionLogger(this);
mSession->setConnectionLogger(mInternalLogger);
+ mOperationQueueCallback = NULL;
}
SMTPAsyncSession::~SMTPAsyncSession()
@@ -292,3 +299,23 @@ dispatch_queue_t SMTPAsyncSession::dispatchQueue()
return mQueue->dispatchQueue();
}
#endif
+
+void SMTPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback)
+{
+ mOperationQueueCallback = callback;
+}
+
+OperationQueueCallback * SMTPAsyncSession::operationQueueCallback()
+{
+ return mOperationQueueCallback;
+}
+
+bool SMTPAsyncSession::isOperationQueueRunning()
+{
+ return mQueue->count() > 0;
+}
+
+void SMTPAsyncSession::cancelAllOperations()
+{
+ mQueue->cancelAllOperations();
+}
diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h
index 5d94163e..38da3717 100644
--- a/src/async/smtp/MCSMTPAsyncSession.h
+++ b/src/async/smtp/MCSMTPAsyncSession.h
@@ -58,7 +58,12 @@ namespace mailcore {
virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
virtual dispatch_queue_t dispatchQueue();
#endif
-
+
+ virtual void setOperationQueueCallback(OperationQueueCallback * callback);
+ virtual OperationQueueCallback * operationQueueCallback();
+ virtual bool isOperationQueueRunning();
+ virtual void cancelAllOperations();
+
virtual SMTPOperation * loginOperation();
virtual SMTPOperation * sendMessageOperation(Data * messageData);
virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients,
@@ -80,6 +85,7 @@ namespace mailcore {
ConnectionLogger * mConnectionLogger;
pthread_mutex_t mConnectionLoggerLock;
SMTPConnectionLogger * mInternalLogger;
+ OperationQueueCallback * mOperationQueueCallback;
virtual void tryAutomaticDisconnectAfterDelay(void * context);
};