aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar pfennema <paul@bryce.demon.nl>2013-12-01 00:05:59 +0100
committerGravatar pfennema <paul@bryce.demon.nl>2013-12-01 00:05:59 +0100
commit0fa02bf9c7eda7addf164be87c19817c630c8844 (patch)
tree6b7ca8a9a2f7a4bb0e333fbcd0068009e006f218 /src/core
parent8eaa01d8832f1f76f84ee840b24efc0e26a965cf (diff)
Added size request to get message size of complete message (MCOIMAPMessagesRequestKindSize)
Diffstat (limited to 'src/core')
-rw-r--r--src/core/imap/MCIMAPMessage.cc16
-rw-r--r--src/core/imap/MCIMAPMessage.h5
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc9
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");