From 3dfb8a6907c66698700cfaf279d4f94e7cd0f21e Mon Sep 17 00:00:00 2001 From: "Hoa V. Dinh" Date: Thu, 18 Dec 2014 12:38:10 -0800 Subject: Fixed #1002: implemented operationqueue callback for smtp/nntp/pop --- src/async/nntp/MCNNTPAsyncSession.cpp | 27 +++++++++++++++++++++++++++ src/async/nntp/MCNNTPAsyncSession.h | 8 +++++++- src/async/pop/MCPOPAsyncSession.cpp | 27 +++++++++++++++++++++++++++ src/async/pop/MCPOPAsyncSession.h | 8 +++++++- src/async/smtp/MCSMTPAsyncSession.cpp | 27 +++++++++++++++++++++++++++ src/async/smtp/MCSMTPAsyncSession.h | 8 +++++++- 6 files changed, 102 insertions(+), 3 deletions(-) (limited to 'src/async') 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); }; -- cgit v1.2.3