diff options
author | 2013-12-05 13:42:01 -0700 | |
---|---|---|
committer | 2013-12-05 13:42:01 -0700 | |
commit | 6a5a3b55ba80173cfe48c2008f262da6da5cf10b (patch) | |
tree | 6a4bd8f5e5a2ca806de9fee478274164a0c397e5 | |
parent | b069569fdf1d86039d5c476052f177dfe4b3699e (diff) | |
parent | baef8a77d30a9844eb63886624a1e04761d88a4a (diff) |
Merge remote-tracking branch 'upstream/master'
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 3 | ||||
-rw-r--r-- | src/core/basetypes/MCData.cc | 1 | ||||
-rw-r--r-- | src/core/imap/MCIMAPMessage.cc | 15 | ||||
-rw-r--r-- | src/core/imap/MCIMAPMessage.h | 5 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.cc | 16 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.h | 2 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 17 | ||||
-rw-r--r-- | src/objc/abstract/MCOConstants.h | 3 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPMessage.h | 3 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPMessage.mm | 1 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.h | 20 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.mm | 10 |
12 files changed, 95 insertions, 1 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index aa252243..92e04c6e 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -69,6 +69,7 @@ namespace mailcore { IMAPMessagesRequestKindGmailMessageID = 1 << 7, IMAPMessagesRequestKindGmailThreadID = 1 << 8, IMAPMessagesRequestKindExtraHeaders = 1 << 9, + IMAPMessagesRequestKindSize = 1 << 10, }; enum IMAPFetchRequestType { @@ -184,6 +185,8 @@ namespace mailcore { IMAPSearchKindBeforeReceivedDate, IMAPSearchKindOnReceivedDate, IMAPSearchKindSinceReceivedDate, + IMAPSearchKindSizeLarger, + IMAPSearchKindSizeSmaller, IMAPSearchKindGmailThreadID, IMAPSearchKindOr, IMAPSearchKindAnd, diff --git a/src/core/basetypes/MCData.cc b/src/core/basetypes/MCData.cc index 580fd803..4ad2a524 100644 --- a/src/core/basetypes/MCData.cc +++ b/src/core/basetypes/MCData.cc @@ -182,7 +182,6 @@ String * Data::stringWithCharset(const char * charset) static bool isHintCharsetValid(String * hintCharset) { - return true; static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; static Set * knownCharset = NULL; diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc index 74b3459b..59d67654 100644 --- a/src/core/imap/MCIMAPMessage.cc +++ b/src/core/imap/MCIMAPMessage.cc @@ -75,6 +75,16 @@ 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 +223,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 +250,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/MCIMAPSearchExpression.cc b/src/core/imap/MCIMAPSearchExpression.cc index 4e6b6e4e..f7ac2a0f 100644 --- a/src/core/imap/MCIMAPSearchExpression.cc +++ b/src/core/imap/MCIMAPSearchExpression.cc @@ -241,6 +241,22 @@ IMAPSearchExpression * IMAPSearchExpression::searchSinceReceivedDate(time_t date return (IMAPSearchExpression *) expr->autorelease(); } +IMAPSearchExpression * IMAPSearchExpression::searchSizeLarger(uint32_t size) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindSizeLarger; + expr->mLongNumber = size; + return (IMAPSearchExpression *) expr->autorelease(); +} + +IMAPSearchExpression * IMAPSearchExpression::searchSizeSmaller(uint32_t size) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindSizeSmaller; + expr->mLongNumber = size; + return (IMAPSearchExpression *) expr->autorelease(); +} + IMAPSearchExpression * IMAPSearchExpression::searchGmailThreadID(uint64_t number) { IMAPSearchExpression * expr = new IMAPSearchExpression(); diff --git a/src/core/imap/MCIMAPSearchExpression.h b/src/core/imap/MCIMAPSearchExpression.h index 13d934bc..2696366c 100644 --- a/src/core/imap/MCIMAPSearchExpression.h +++ b/src/core/imap/MCIMAPSearchExpression.h @@ -44,6 +44,8 @@ namespace mailcore { static IMAPSearchExpression * searchBeforeReceivedDate(time_t date); static IMAPSearchExpression * searchOnReceivedDate(time_t date); static IMAPSearchExpression * searchSinceReceivedDate(time_t date); + static IMAPSearchExpression * searchSizeLarger(uint32_t size); + static IMAPSearchExpression * searchSizeSmaller(uint32_t size); static IMAPSearchExpression * searchGmailThreadID(uint64_t number); static IMAPSearchExpression * searchAnd(IMAPSearchExpression * left, IMAPSearchExpression * right); static IMAPSearchExpression * searchOr(IMAPSearchExpression * left, IMAPSearchExpression * right); diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 0a115e78..76dbc604 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"); @@ -2730,6 +2739,14 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL); } + case IMAPSearchKindSizeLarger: + { + return mailimap_search_key_new_larger( (uint32_t) expression->longNumber()); + } + case IMAPSearchKindSizeSmaller: + { + return mailimap_search_key_new_smaller( (uint32_t) expression->longNumber()); + } case IMAPSearchKindOr: { return mailimap_search_key_new_or(searchKeyFromSearchExpression(expression->leftExpression()), searchKeyFromSearchExpression(expression->rightExpression())); diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h index 0244f17d..ac71dd6b 100644 --- a/src/objc/abstract/MCOConstants.h +++ b/src/objc/abstract/MCOConstants.h @@ -142,6 +142,9 @@ typedef enum { MCOIMAPMessagesRequestKindGmailThreadID = 1 << 8, /** Extra Headers.*/ MCOIMAPMessagesRequestKindExtraHeaders = 1 << 9, + /* Request size of message */ + MCOIMAPMessagesRequestKindSize = 1 << 10, + } MCOIMAPMessagesRequestKind; /** It defines the behavior of the STORE flags request.*/ diff --git a/src/objc/imap/MCOIMAPMessage.h b/src/objc/imap/MCOIMAPMessage.h index 7de1fd69..7f28663e 100644 --- a/src/objc/imap/MCOIMAPMessage.h +++ b/src/objc/imap/MCOIMAPMessage.h @@ -34,6 +34,9 @@ /** IMAP UID of the message. */ @property (nonatomic, assign) uint32_t uid; +/* Size of the entire message */ +@property (nonatomic, assign) uint32_t size; + /** Flags of the message, like if it is deleted, read, starred etc */ @property (nonatomic, assign) MCOMessageFlag flags; diff --git a/src/objc/imap/MCOIMAPMessage.mm b/src/objc/imap/MCOIMAPMessage.mm index 99c45505..8667b542 100644 --- a/src/objc/imap/MCOIMAPMessage.mm +++ b/src/objc/imap/MCOIMAPMessage.mm @@ -42,6 +42,7 @@ MCO_SYNTHESIZE_NSCODING MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUid, uid) +MCO_OBJC_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setSize, size) MCO_OBJC_SYNTHESIZE_SCALAR(MCOMessageFlag, mailcore::MessageFlag, setFlags, flags) MCO_OBJC_SYNTHESIZE_SCALAR(MCOMessageFlag, mailcore::MessageFlag, setOriginalFlags, originalFlags) MCO_OBJC_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setModSeqValue, modSeqValue) diff --git a/src/objc/imap/MCOIMAPSearchExpression.h b/src/objc/imap/MCOIMAPSearchExpression.h index 4916d6df..ea9b6812 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.h +++ b/src/objc/imap/MCOIMAPSearchExpression.h @@ -222,6 +222,26 @@ + (MCOIMAPSearchExpression *) searchSinceReceivedDate:(NSDate *)date; /** + Creates a search expression that matches messages larger than a given size in bytes. + + Example: + + uint32_t minSize = 1024 * 10; // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeLargerThan:minSize] + **/ ++ (MCOIMAPSearchExpression *) searchSizeLargerThan:(uint32_t)size; + +/** + Creates a search expression that matches messages smaller than a given size in bytes. + + Example: + + uint32_t maxSize = 1024 * 10; // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeSmallerThan:maxSize] + **/ ++ (MCOIMAPSearchExpression *) searchSizeSmallerThan:(uint32_t)size; + +/** Creates a search expression that matches emails with the given gmail thread id Example: diff --git a/src/objc/imap/MCOIMAPSearchExpression.mm b/src/objc/imap/MCOIMAPSearchExpression.mm index 82286183..252e73b3 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.mm +++ b/src/objc/imap/MCOIMAPSearchExpression.mm @@ -167,6 +167,16 @@ return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchSinceReceivedDate((time_t) [date timeIntervalSince1970])); } ++ (MCOIMAPSearchExpression *) searchSizeLargerThan:(uint32_t)size +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchSizeLarger(size)); +} + ++ (MCOIMAPSearchExpression *) searchSizeSmallerThan:(uint32_t)size +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchSizeSmaller(size)); +} + + (MCOIMAPSearchExpression *) searchGmailThreadID:(uint64_t)number { return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchGmailThreadID(number)); |