aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar CodaFi <devteam.codafi@gmail.com>2013-11-30 09:26:23 -0700
committerGravatar CodaFi <devteam.codafi@gmail.com>2013-11-30 09:26:23 -0700
commit611b3763f6ce749c75ba02a3c0c3007daf48e68c (patch)
treeda4a5166ed5f8c2270f9e2311922fa085e3a9acf
parentb069569fdf1d86039d5c476052f177dfe4b3699e (diff)
Implement size search
-rw-r--r--src/core/abstract/MCMessageConstants.h2
-rw-r--r--src/core/imap/MCIMAPSearchExpression.cc21
-rw-r--r--src/core/imap/MCIMAPSearchExpression.h6
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc8
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.h20
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.mm10
6 files changed, 66 insertions, 1 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h
index aa252243..41b5ccb4 100644
--- a/src/core/abstract/MCMessageConstants.h
+++ b/src/core/abstract/MCMessageConstants.h
@@ -184,6 +184,8 @@ namespace mailcore {
IMAPSearchKindBeforeReceivedDate,
IMAPSearchKindOnReceivedDate,
IMAPSearchKindSinceReceivedDate,
+ IMAPSearchKindSizeLarger,
+ IMAPSearchKindSizeSmaller,
IMAPSearchKindGmailThreadID,
IMAPSearchKindOr,
IMAPSearchKindAnd,
diff --git a/src/core/imap/MCIMAPSearchExpression.cc b/src/core/imap/MCIMAPSearchExpression.cc
index 4e6b6e4e..0aa791d0 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->mNumber = size;
+ return (IMAPSearchExpression *) expr->autorelease();
+}
+
+IMAPSearchExpression * IMAPSearchExpression::searchSizeSmaller(uint32_t size)
+{
+ IMAPSearchExpression * expr = new IMAPSearchExpression();
+ expr->mKind = IMAPSearchKindSizeSmaller;
+ expr->mNumber = size;
+ return (IMAPSearchExpression *) expr->autorelease();
+}
+
IMAPSearchExpression * IMAPSearchExpression::searchGmailThreadID(uint64_t number)
{
IMAPSearchExpression * expr = new IMAPSearchExpression();
@@ -287,6 +303,11 @@ uint64_t IMAPSearchExpression::longNumber()
return mLongNumber;
}
+uint32_t IMAPSearchExpression::number()
+{
+ return mNumber;
+}
+
time_t IMAPSearchExpression::date()
{
return mDate;
diff --git a/src/core/imap/MCIMAPSearchExpression.h b/src/core/imap/MCIMAPSearchExpression.h
index 13d934bc..6d313730 100644
--- a/src/core/imap/MCIMAPSearchExpression.h
+++ b/src/core/imap/MCIMAPSearchExpression.h
@@ -18,6 +18,7 @@ namespace mailcore {
virtual String * header();
virtual String * value();
virtual uint64_t longNumber();
+ virtual uint32_t number();
virtual time_t date();
virtual IMAPSearchExpression * leftExpression();
virtual IMAPSearchExpression * rightExpression();
@@ -44,7 +45,9 @@ namespace mailcore {
static IMAPSearchExpression * searchBeforeReceivedDate(time_t date);
static IMAPSearchExpression * searchOnReceivedDate(time_t date);
static IMAPSearchExpression * searchSinceReceivedDate(time_t date);
- static IMAPSearchExpression * searchGmailThreadID(uint64_t number);
+ static IMAPSearchExpression * searchSizeLarger(uint32_t number);
+ static IMAPSearchExpression * searchSizeSmaller(uint32_t size);
+ static IMAPSearchExpression * searchGmailThreadID(uint64_t size);
static IMAPSearchExpression * searchAnd(IMAPSearchExpression * left, IMAPSearchExpression * right);
static IMAPSearchExpression * searchOr(IMAPSearchExpression * left, IMAPSearchExpression * right);
@@ -58,6 +61,7 @@ namespace mailcore {
String * mHeader;
String * mValue;
uint64_t mLongNumber;
+ uint32_t mNumber;
time_t mDate;
IMAPSearchExpression * mLeftExpression;
IMAPSearchExpression * mRightExpression;
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index 0a115e78..5cce4f39 100755
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -2730,6 +2730,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(expression->number());
+ }
+ case IMAPSearchKindSizeSmaller:
+ {
+ return mailimap_search_key_new_smaller(expression->number());
+ }
case IMAPSearchKindOr:
{
return mailimap_search_key_new_or(searchKeyFromSearchExpression(expression->leftExpression()), searchKeyFromSearchExpression(expression->rightExpression()));
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));