diff options
author | Hoà V. DINH <dinh.viet.hoa@gmail.com> | 2016-02-04 21:51:53 -0800 |
---|---|---|
committer | Hoà V. DINH <dinh.viet.hoa@gmail.com> | 2016-02-04 21:51:53 -0800 |
commit | 23b7111cac22b76c1005778553819532db62adac (patch) | |
tree | f81c3d3807bc6c51c32547aa59056bc9b51eb736 | |
parent | d8e239a6c25e5e8f46af1cd4ea8b4d4c14ddd35b (diff) | |
parent | 0c2c1832213e4785d3e8141c56ccbd460f90ec85 (diff) |
Merge pull request #1350 from AlexKar/master
MCIMAPCapabilityOperation takes into account cached capabilities values
-rw-r--r-- | src/async/imap/MCIMAPCapabilityOperation.cpp | 15 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cpp | 12 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.h | 3 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/async/imap/MCIMAPCapabilityOperation.cpp b/src/async/imap/MCIMAPCapabilityOperation.cpp index 9edb9b1c..9cd7becb 100644 --- a/src/async/imap/MCIMAPCapabilityOperation.cpp +++ b/src/async/imap/MCIMAPCapabilityOperation.cpp @@ -30,13 +30,16 @@ IndexSet * IMAPCapabilityOperation::capabilities() void IMAPCapabilityOperation::main() { - ErrorCode error; - session()->session()->loginIfNeeded(&error); - if (error != ErrorNone) { - setError(error); - return; + ErrorCode error = ErrorNone; + mCapabilities = session()->session()->storedCapabilities(); + if (mCapabilities == NULL) { + session()->session()->loginIfNeeded(&error); + if (error != ErrorNone) { + setError(error); + return; + } + mCapabilities = session()->session()->capability(&error); } - mCapabilities = session()->session()->capability(&error); MC_SAFE_RETAIN(mCapabilities); setError(error); } diff --git a/src/core/imap/MCIMAPSession.cpp b/src/core/imap/MCIMAPSession.cpp index ae05186a..2fe39d40 100755 --- a/src/core/imap/MCIMAPSession.cpp +++ b/src/core/imap/MCIMAPSession.cpp @@ -3749,6 +3749,18 @@ void IMAPSession::capabilitySetWithSessionState(IndexSet * capabilities) applyCapabilities(capabilities); } +IndexSet * IMAPSession::storedCapabilities() { + if (mImap == NULL || + mImap->imap_connection_info == NULL || + mImap->imap_connection_info->imap_capability == NULL) { + return NULL; + } + IndexSet *result = new IndexSet(); + capabilitySetWithSessionState(result); + result->autorelease(); + return result; +} + void IMAPSession::applyCapabilities(IndexSet * capabilities) { if (capabilities->containsIndex(IMAPCapabilityId)) { diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h index 5ee6bc1c..b3fdcb4e 100755 --- a/src/core/imap/MCIMAPSession.h +++ b/src/core/imap/MCIMAPSession.h @@ -176,7 +176,7 @@ namespace mailcore { virtual bool isXOAuthEnabled(); virtual bool isNamespaceEnabled(); virtual bool isCompressionEnabled(); - virtual bool allowsNewPermanentFlags(); + virtual bool allowsNewPermanentFlags(); virtual String * gmailUserDisplayName() DEPRECATED_ATTRIBUTE; @@ -210,6 +210,7 @@ namespace mailcore { virtual bool isAutomaticConfigurationDone(); virtual void resetAutomaticConfigurationDone(); virtual void applyCapabilities(IndexSet * capabilities); + virtual IndexSet * storedCapabilities(); private: String * mHostname; |