diff options
author | 2013-06-22 22:28:41 -0700 | |
---|---|---|
committer | 2013-06-22 22:29:05 -0700 | |
commit | 9682845dd6a6985f396a93ff95adc1dcdeae8861 (patch) | |
tree | 67e053e5e87b5c228191440116c1b839dbf2aecc /src/async/imap/MCIMAPAsyncConnection.cc | |
parent | 74752eb7c987a2c1704f6f92486e4a4d3f77cbfb (diff) |
Retain session when IMAP and SMTP operations are running. Fixed #127, fixed #128.
Diffstat (limited to 'src/async/imap/MCIMAPAsyncConnection.cc')
-rw-r--r-- | src/async/imap/MCIMAPAsyncConnection.cc | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc index 02320b3a..ed40932c 100644 --- a/src/async/imap/MCIMAPAsyncConnection.cc +++ b/src/async/imap/MCIMAPAsyncConnection.cc @@ -32,6 +32,7 @@ #include "MCIMAPCapabilityOperation.h" #include "MCOperationQueueCallback.h" #include "MCIMAPDisconnectOperation.h" +#include "MCIMAPAsyncSession.h" using namespace mailcore; @@ -45,8 +46,13 @@ namespace mailcore { virtual ~IMAPOperationQueueCallback() { } - virtual void queueIdle() { + virtual void queueStartRunning() { + mConnection->queueStartRunning(); + } + + virtual void queueStoppedRunning() { mConnection->tryAutomaticDisconnect(); + mConnection->queueStoppedRunning(); } private: @@ -63,10 +69,12 @@ IMAPAsyncConnection::IMAPAsyncConnection() mLastFolder = NULL; mQueueCallback = new IMAPOperationQueueCallback(this); mQueue->setCallback(mQueueCallback); + mOwner = NULL; } IMAPAsyncConnection::~IMAPAsyncConnection() { + cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); MC_SAFE_RELEASE(mQueueCallback); MC_SAFE_RELEASE(mLastFolder); MC_SAFE_RELEASE(mDefaultNamespace); @@ -485,6 +493,18 @@ void IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay(void * context) op->start(); } +void IMAPAsyncConnection::queueStartRunning() +{ + this->retain(); + mOwner->retain(); +} + +void IMAPAsyncConnection::queueStoppedRunning() +{ + mOwner->release(); + this->release(); +} + void IMAPAsyncConnection::setLastFolder(String * folder) { MC_SAFE_REPLACE_COPY(String, mLastFolder, folder); @@ -495,3 +515,14 @@ String * IMAPAsyncConnection::lastFolder() return mLastFolder; } +void IMAPAsyncConnection::setOwner(IMAPAsyncSession * owner) +{ + mOwner = owner; +} + +IMAPAsyncSession * IMAPAsyncConnection::owner() +{ + return mOwner; +} + + |