aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async/pop
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/pop
parentc1607b6787a8430d32058c6ab430bcc75285a577 (diff)
Fixed #1002: implemented operationqueue callback for smtp/nntp/pop
Diffstat (limited to 'src/async/pop')
-rw-r--r--src/async/pop/MCPOPAsyncSession.cpp27
-rw-r--r--src/async/pop/MCPOPAsyncSession.h8
2 files changed, 34 insertions, 1 deletions
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);