diff options
Diffstat (limited to 'src/async')
-rw-r--r-- | src/async/imap/MCIMAPIdleOperation.cc | 15 | ||||
-rw-r--r-- | src/async/imap/MCIMAPIdleOperation.h | 2 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/async/imap/MCIMAPIdleOperation.cc b/src/async/imap/MCIMAPIdleOperation.cc index 9006b570..42c58f90 100644 --- a/src/async/imap/MCIMAPIdleOperation.cc +++ b/src/async/imap/MCIMAPIdleOperation.cc @@ -16,6 +16,7 @@ using namespace mailcore; IMAPIdleOperation::IMAPIdleOperation() { mLastKnownUid = 0; + mSetupSuccess = false; } IMAPIdleOperation::~IMAPIdleOperation() @@ -34,18 +35,24 @@ uint32_t IMAPIdleOperation::lastKnownUID() void IMAPIdleOperation::prepare() { - session()->session()->setupIdle(); + mSetupSuccess = session()->session()->setupIdle(); } void IMAPIdleOperation::unprepare() { - session()->session()->unsetupIdle(); + if (mSetupSuccess) { + session()->session()->unsetupIdle(); + } } void IMAPIdleOperation::main() { performMethodOnMainThread((Object::Method) &IMAPIdleOperation::prepare, NULL); + if (!mSetupSuccess) { + return; + } + ErrorCode error; session()->session()->idle(folder(), mLastKnownUid, &error); setError(error); @@ -55,6 +62,8 @@ void IMAPIdleOperation::main() void IMAPIdleOperation::interruptIdle() { - session()->session()->interruptIdle(); + if (mSetupSuccess) { + session()->session()->interruptIdle(); + } } diff --git a/src/async/imap/MCIMAPIdleOperation.h b/src/async/imap/MCIMAPIdleOperation.h index 377014dd..de19469a 100644 --- a/src/async/imap/MCIMAPIdleOperation.h +++ b/src/async/imap/MCIMAPIdleOperation.h @@ -31,9 +31,9 @@ namespace mailcore { private: uint32_t mLastKnownUid; + bool mSetupSuccess; void prepare(); void unprepare(); - }; } |