aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar CodaFi <devteam.codafi@gmail.com>2013-12-05 13:42:01 -0700
committerGravatar CodaFi <devteam.codafi@gmail.com>2013-12-05 13:42:01 -0700
commit6a5a3b55ba80173cfe48c2008f262da6da5cf10b (patch)
tree6a4bd8f5e5a2ca806de9fee478274164a0c397e5
parentb069569fdf1d86039d5c476052f177dfe4b3699e (diff)
parentbaef8a77d30a9844eb63886624a1e04761d88a4a (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--src/core/abstract/MCMessageConstants.h3
-rw-r--r--src/core/basetypes/MCData.cc1
-rw-r--r--src/core/imap/MCIMAPMessage.cc15
-rw-r--r--src/core/imap/MCIMAPMessage.h5
-rw-r--r--src/core/imap/MCIMAPSearchExpression.cc16
-rw-r--r--src/core/imap/MCIMAPSearchExpression.h2
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc17
-rw-r--r--src/objc/abstract/MCOConstants.h3
-rw-r--r--src/objc/imap/MCOIMAPMessage.h3
-rw-r--r--src/objc/imap/MCOIMAPMessage.mm1
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.h20
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.mm10
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));