aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2016-02-04 21:51:53 -0800
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2016-02-04 21:51:53 -0800
commit23b7111cac22b76c1005778553819532db62adac (patch)
treef81c3d3807bc6c51c32547aa59056bc9b51eb736
parentd8e239a6c25e5e8f46af1cd4ea8b4d4c14ddd35b (diff)
parent0c2c1832213e4785d3e8141c56ccbd460f90ec85 (diff)
Merge pull request #1350 from AlexKar/master
MCIMAPCapabilityOperation takes into account cached capabilities values
-rw-r--r--src/async/imap/MCIMAPCapabilityOperation.cpp15
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cpp12
-rwxr-xr-xsrc/core/imap/MCIMAPSession.h3
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;