diff options
author | 2013-12-01 00:05:59 +0100 | |
---|---|---|
committer | 2013-12-01 00:05:59 +0100 | |
commit | 0fa02bf9c7eda7addf164be87c19817c630c8844 (patch) | |
tree | 6b7ca8a9a2f7a4bb0e333fbcd0068009e006f218 /src/core | |
parent | 8eaa01d8832f1f76f84ee840b24efc0e26a965cf (diff) |
Added size request to get message size of complete message (MCOIMAPMessagesRequestKindSize)
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/imap/MCIMAPMessage.cc | 16 | ||||
-rw-r--r-- | src/core/imap/MCIMAPMessage.h | 5 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 9 |
3 files changed, 30 insertions, 0 deletions
diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc index 74b3459b..8d3c5c02 100644 --- a/src/core/imap/MCIMAPMessage.cc +++ b/src/core/imap/MCIMAPMessage.cc @@ -75,6 +75,17 @@ void IMAPMessage::setUid(uint32_t uid) mUid = uid; } +uint32_t IMAPMessage::size() +{ + return mSize; +} + +void IMAPMessage::setSize(uint32_t size) +{ + mSize = size; + +} + void IMAPMessage::setFlags(MessageFlag flags) { mFlags = flags; @@ -213,6 +224,7 @@ HashMap * IMAPMessage::serializable() HashMap * result = AbstractMessage::serializable(); result->setObjectForKey(MCSTR("modSeqValue"), String::stringWithUTF8Format("%llu", (long long unsigned) modSeqValue())); result->setObjectForKey(MCSTR("uid"), String::stringWithUTF8Format("%lu", (long unsigned) uid())); + result->setObjectForKey(MCSTR("size"), String::stringWithUTF8Format("%lu", (long unsigned) uid())); result->setObjectForKey(MCSTR("flags"), String::stringWithUTF8Format("%u", (unsigned) flags())); result->setObjectForKey(MCSTR("originalFlags"), String::stringWithUTF8Format("%u", (unsigned) originalFlags())); result->setObjectForKey(MCSTR("mainPart"), mMainPart->serializable()); @@ -239,6 +251,10 @@ void IMAPMessage::importSerializable(HashMap * serializable) if (uid != NULL) { setUid((uint32_t) uid->unsignedLongValue()); } + String * size = (String *) serializable->objectForKey(MCSTR("size")); + if (size != NULL) { + setSize((uint32_t) size->unsignedLongValue()); + } String * flags = (String *) serializable->objectForKey(MCSTR("flags")); if (flags != NULL) { setFlags((MessageFlag) flags->unsignedIntValue()); diff --git a/src/core/imap/MCIMAPMessage.h b/src/core/imap/MCIMAPMessage.h index 435334c7..d01d23a1 100644 --- a/src/core/imap/MCIMAPMessage.h +++ b/src/core/imap/MCIMAPMessage.h @@ -23,6 +23,9 @@ namespace mailcore { virtual uint32_t uid(); virtual void setUid(uint32_t uid); + virtual uint32_t size(); + virtual void setSize(uint32_t size); + virtual void setFlags(MessageFlag flags); virtual MessageFlag flags(); @@ -63,6 +66,8 @@ namespace mailcore { private: uint64_t mModSeqValue; uint32_t mUid; + uint32_t mSize; + MessageFlag mFlags; MessageFlag mOriginalFlags; AbstractPart * mMainPart; diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 0a115e78..26b7f1d3 100755 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -1979,6 +1979,8 @@ static void msg_att_handler(struct mailimap_msg_att * msg_att, void * context) att_static = att_item->att_data.att_static; if (att_static->att_type == MAILIMAP_MSG_ATT_INTERNALDATE) { msg->header()->importIMAPInternalDate(att_static->att_data.att_internal_date); + } else if (att_static->att_type == MAILIMAP_MSG_ATT_RFC822_SIZE) { + msg->setSize(att_static->att_data.att_rfc822_size); } } } @@ -2153,6 +2155,13 @@ IMAPSyncResult * IMAPSession::fetchMessages(String * folder, IMAPMessagesRequest mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att); needsHeader = true; } + if ((requestKind & IMAPMessagesRequestKindSize) != 0) { + // message structure + MCLog("request size"); + fetch_att = mailimap_fetch_att_new_rfc822_size(); + mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att); + } + if ((requestKind & IMAPMessagesRequestKindStructure) != 0) { // message structure MCLog("request bodystructure"); |