diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-06-22 00:56:18 -0700 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2013-06-22 00:56:18 -0700 |
commit | 25eecd728036f8a4a07d639cb0a7a07a9ad5bdd5 (patch) | |
tree | c3d7b0ef9f253c745b7b7bd61ebc5bcf24685281 /src | |
parent | 2620bd74c9cd635d8a552a9eecb467968ff2ba2d (diff) |
Cleaned implementation of STATUS. Added support for CONDSTORE.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/imap/MCIMAPFolderStatus.cc | 39 | ||||
-rw-r--r-- | src/core/imap/MCIMAPFolderStatus.h | 34 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSession.cc | 23 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPFolderStatus.h | 7 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPFolderStatus.mm | 1 |
5 files changed, 66 insertions, 38 deletions
diff --git a/src/core/imap/MCIMAPFolderStatus.cc b/src/core/imap/MCIMAPFolderStatus.cc index 4b75c1ae..d2cb2281 100644 --- a/src/core/imap/MCIMAPFolderStatus.cc +++ b/src/core/imap/MCIMAPFolderStatus.cc @@ -17,6 +17,7 @@ void IMAPFolderStatus::init() mRecentCount = 0; mUidNext = 0; mUidValidity = 0; + mHighestModSeqValue = 0; } IMAPFolderStatus::IMAPFolderStatus() @@ -32,7 +33,8 @@ IMAPFolderStatus::IMAPFolderStatus(IMAPFolderStatus * other) setMessageCount(other->messageCount()); setRecentCount(other->recentCount()); setUidNext(other->uidNext()); - setUidValidity(other->uidValidity()); + setUidValidity(other->uidValidity()); + setHighestModSeqValue(other->highestModSeqValue()); } IMAPFolderStatus::~IMAPFolderStatus() @@ -44,66 +46,77 @@ Object * IMAPFolderStatus::copy() return new IMAPFolderStatus(this); } -void IMAPFolderStatus::setUnseenCount(u_int32_t unseen) +void IMAPFolderStatus::setUnseenCount(uint32_t unseen) { mUnseenCount = unseen; } -u_int32_t IMAPFolderStatus::unseenCount() +uint32_t IMAPFolderStatus::unseenCount() { return mUnseenCount; } -void IMAPFolderStatus::setMessageCount(u_int32_t messages) +void IMAPFolderStatus::setMessageCount(uint32_t messages) { mMessageCount = messages; } -u_int32_t IMAPFolderStatus::messageCount() +uint32_t IMAPFolderStatus::messageCount() { return mMessageCount; } -void IMAPFolderStatus::setRecentCount(u_int32_t recent) +void IMAPFolderStatus::setRecentCount(uint32_t recent) { mRecentCount = recent; } -u_int32_t IMAPFolderStatus::recentCount() +uint32_t IMAPFolderStatus::recentCount() { return mRecentCount; } -void IMAPFolderStatus::setUidNext(u_int32_t uidNext) +void IMAPFolderStatus::setUidNext(uint32_t uidNext) { mUidNext = uidNext; } -u_int32_t IMAPFolderStatus::uidNext() +uint32_t IMAPFolderStatus::uidNext() { return mUidNext; } -void IMAPFolderStatus::setUidValidity(u_int32_t uidValidity) +void IMAPFolderStatus::setUidValidity(uint32_t uidValidity) { mUidValidity = uidValidity; } -u_int32_t IMAPFolderStatus::uidValidity() +uint32_t IMAPFolderStatus::uidValidity() { return mUidValidity; } +void IMAPFolderStatus::setHighestModSeqValue(uint64_t highestModSeqValue) +{ + mHighestModSeqValue = highestModSeqValue; +} + +uint64_t IMAPFolderStatus::highestModSeqValue() +{ + return mHighestModSeqValue; +} + String * IMAPFolderStatus::description() { String * result = String::string(); - result->appendUTF8Format("<%s:%p msg_count: %u, unseen_count: %u, recent_count: %u, uid_next: %u, uid_validity: %u>", + result->appendUTF8Format("<%s:%p msg_count: %u, unseen_count: %u, recent_count: %u, uid_next: %u, uid_validity: %u, highestmodseqvalue :%llu>", className()->UTF8Characters(), this, (unsigned int) messageCount(), (unsigned int) unseenCount(), (unsigned int) recentCount(), (unsigned int) uidNext(), - (unsigned int) uidValidity()); + (unsigned int) uidValidity(), + (unsigned long long) highestModSeqValue()); return result; } diff --git a/src/core/imap/MCIMAPFolderStatus.h b/src/core/imap/MCIMAPFolderStatus.h index 2343c5d5..5a6dbac2 100644 --- a/src/core/imap/MCIMAPFolderStatus.h +++ b/src/core/imap/MCIMAPFolderStatus.h @@ -23,20 +23,23 @@ namespace mailcore { IMAPFolderStatus(); virtual ~IMAPFolderStatus(); - virtual void setUnseenCount(u_int32_t unseen); - virtual u_int32_t unseenCount(); + virtual void setUnseenCount(uint32_t unseen); + virtual uint32_t unseenCount(); - virtual void setMessageCount(u_int32_t messages); - virtual u_int32_t messageCount(); + virtual void setMessageCount(uint32_t messages); + virtual uint32_t messageCount(); - virtual void setRecentCount(u_int32_t recent); - virtual u_int32_t recentCount(); + virtual void setRecentCount(uint32_t recent); + virtual uint32_t recentCount(); - virtual void setUidNext(u_int32_t uidNext); - virtual u_int32_t uidNext(); + virtual void setUidNext(uint32_t uidNext); + virtual uint32_t uidNext(); - virtual void setUidValidity(u_int32_t uidValidity); - virtual u_int32_t uidValidity(); + virtual void setUidValidity(uint32_t uidValidity); + virtual uint32_t uidValidity(); + + virtual void setHighestModSeqValue(uint64_t highestModSeqValue); + virtual uint64_t highestModSeqValue(); public: // subclass behavior IMAPFolderStatus(IMAPFolderStatus * other); @@ -44,11 +47,12 @@ namespace mailcore { virtual String * description(); private: - u_int32_t mUnseenCount; - u_int32_t mMessageCount; - u_int32_t mRecentCount; - u_int32_t mUidNext; - u_int32_t mUidValidity; + uint32_t mUnseenCount; + uint32_t mMessageCount; + uint32_t mRecentCount; + uint32_t mUidNext; + uint32_t mUidValidity; + uint64_t mHighestModSeqValue; void init(); }; diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index cdbe6004..52e819d9 100644 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -881,11 +881,14 @@ IMAPFolderStatus * IMAPSession::folderStatus(String * folder, ErrorCode * pError struct mailimap_status_att_list * status_att_list; status_att_list = mailimap_status_att_list_new_empty(); - mailimap_status_att_list_add(status_att_list,MAILIMAP_STATUS_ATT_UNSEEN); - mailimap_status_att_list_add(status_att_list,MAILIMAP_STATUS_ATT_MESSAGES); - mailimap_status_att_list_add(status_att_list,MAILIMAP_STATUS_ATT_RECENT); - mailimap_status_att_list_add(status_att_list,MAILIMAP_STATUS_ATT_UIDNEXT); - mailimap_status_att_list_add(status_att_list,MAILIMAP_STATUS_ATT_UIDVALIDITY); + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_UNSEEN); + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_MESSAGES); + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_RECENT); + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_UIDNEXT); + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_UIDVALIDITY); + if (mCondstoreEnabled) { + mailimap_status_att_list_add(status_att_list, MAILIMAP_STATUS_ATT_HIGHESTMODSEQ); + } r = mailimap_status(mImap, MCUTF8(folder), status_att_list, &status); @@ -934,7 +937,15 @@ IMAPFolderStatus * IMAPSession::folderStatus(String * folder, ErrorCode * pError break; case MAILIMAP_STATUS_ATT_UIDVALIDITY: fs->setUidValidity(status_info->st_value); - break; + break; + case MAILIMAP_STATUS_ATT_EXTENSION: { + struct mailimap_extension_data * ext_data = status_info->st_ext_data; + if (ext_data->ext_extension == &mailimap_extension_condstore) { + struct mailimap_condstore_status_info * status_info = (struct mailimap_condstore_status_info *) ext_data->ext_data; + fs->setHighestModSeqValue(status_info->cs_highestmodseq_value); + } + break; + } } } diff --git a/src/objc/imap/MCOIMAPFolderStatus.h b/src/objc/imap/MCOIMAPFolderStatus.h index 3d64f009..d39e1fc5 100644 --- a/src/objc/imap/MCOIMAPFolderStatus.h +++ b/src/objc/imap/MCOIMAPFolderStatus.h @@ -28,12 +28,11 @@ /** Number of unseen messages in the folder */ @property (nonatomic, assign) uint32_t unseenCount; -// Number of messages in the folder +/** Number of messages in the folder */ @property (nonatomic, assign) uint32_t messageCount; -// We need also the the folder path - - +/** Highest modification sequence value for this folder. See CONDSTORE RFC 4551. */ +@property (nonatomic, assign) uint64_t setHighestModSeqValue; @end diff --git a/src/objc/imap/MCOIMAPFolderStatus.mm b/src/objc/imap/MCOIMAPFolderStatus.mm index 3f2126a9..7cd1597d 100644 --- a/src/objc/imap/MCOIMAPFolderStatus.mm +++ b/src/objc/imap/MCOIMAPFolderStatus.mm @@ -67,5 +67,6 @@ MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setMessageCount, messageCount) MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setRecentCount, recentCount) MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidNext, uidNext) MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidValidity, uidValidity) +MCO_OBJC_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setHighestModSeqValue, highestModSeqValue) @end |