aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-03-06 10:33:46 -0800
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-03-06 10:33:46 -0800
commitd5ba7c53ad83c18b66a6901c762f6c7f45d2257a (patch)
tree684c631e9f75faefdba45ca872557c87b0203018
parentf059a91b945e95816a1a0d9a912ffb8490d1aa6b (diff)
parentd6671e3f25af693593da29a538012daeb930f80b (diff)
Merge pull request #623 from pfennema/master
add new searchexpression with NOT operator
-rw-r--r--src/core/abstract/MCMessageConstants.h1
-rw-r--r--src/core/imap/MCIMAPSearchExpression.cc8
-rw-r--r--src/core/imap/MCIMAPSearchExpression.h2
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc5
-rw-r--r--src/objc/abstract/MCOConstants.h2
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.h12
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.mm6
7 files changed, 36 insertions, 0 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h
index c2f77c89..b7bebe3a 100644
--- a/src/core/abstract/MCMessageConstants.h
+++ b/src/core/abstract/MCMessageConstants.h
@@ -198,6 +198,7 @@ namespace mailcore {
IMAPSearchKindGmailRaw,
IMAPSearchKindOr,
IMAPSearchKindAnd,
+ IMAPSearchKindNot,
};
enum ErrorCode {
diff --git a/src/core/imap/MCIMAPSearchExpression.cc b/src/core/imap/MCIMAPSearchExpression.cc
index 5838be00..2c6657af 100644
--- a/src/core/imap/MCIMAPSearchExpression.cc
+++ b/src/core/imap/MCIMAPSearchExpression.cc
@@ -339,6 +339,14 @@ IMAPSearchExpression * IMAPSearchExpression::searchOr(IMAPSearchExpression * lef
return (IMAPSearchExpression *) expr->autorelease();
}
+IMAPSearchExpression * IMAPSearchExpression::searchNot(IMAPSearchExpression * notExpr)
+{
+ IMAPSearchExpression * expr = new IMAPSearchExpression();
+ expr->mKind = IMAPSearchKindNot;
+ MC_SAFE_REPLACE_RETAIN(IMAPSearchExpression, expr->mLeftExpression, notExpr);
+ return (IMAPSearchExpression *) expr->autorelease();
+}
+
IMAPSearchKind IMAPSearchExpression::kind()
{
return mKind;
diff --git a/src/core/imap/MCIMAPSearchExpression.h b/src/core/imap/MCIMAPSearchExpression.h
index c108fd2b..928b9d41 100644
--- a/src/core/imap/MCIMAPSearchExpression.h
+++ b/src/core/imap/MCIMAPSearchExpression.h
@@ -57,6 +57,8 @@ namespace mailcore {
static IMAPSearchExpression * searchGmailRaw(String * expr);
static IMAPSearchExpression * searchAnd(IMAPSearchExpression * left, IMAPSearchExpression * right);
static IMAPSearchExpression * searchOr(IMAPSearchExpression * left, IMAPSearchExpression * right);
+ static IMAPSearchExpression * searchNot(IMAPSearchExpression * notExpr);
+
public: // subclass behavior
IMAPSearchExpression(IMAPSearchExpression * other);
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index 02e569dc..3108ac3e 100755
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -2906,6 +2906,11 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr
clist_append(list, searchKeyFromSearchExpression(expression->rightExpression()));
return mailimap_search_key_new_multiple(list);
}
+ case IMAPSearchKindNot:
+ {
+ return mailimap_search_key_new_not(searchKeyFromSearchExpression(expression->leftExpression()));
+ }
+
default:
MCAssert(0);
return NULL;
diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h
index 6b6407c0..28fa9e05 100644
--- a/src/objc/abstract/MCOConstants.h
+++ b/src/objc/abstract/MCOConstants.h
@@ -190,6 +190,8 @@ typedef enum {
MCOIMAPSearchKindOr,
/** And expression.*/
MCOIMAPSearchKindAnd,
+ /** Not expression.*/
+ MCOIMAPSearchKindNot,
} MCOIMAPSearchKind;
/** Keys for the namespace dictionary.*/
diff --git a/src/objc/imap/MCOIMAPSearchExpression.h b/src/objc/imap/MCOIMAPSearchExpression.h
index d1d2d701..3ff956b2 100644
--- a/src/objc/imap/MCOIMAPSearchExpression.h
+++ b/src/objc/imap/MCOIMAPSearchExpression.h
@@ -320,6 +320,18 @@
*/
+ (MCOIMAPSearchExpression *) searchOr:(MCOIMAPSearchExpression *)expression other:(MCOIMAPSearchExpression *)other;
+/**
+ Creates a search expression that matches when the argument is not matched.
+
+ Example:
+
+ MCOIMAPSearchExpression * exprSubject = [MCOIMAPSearchExpression searchSubject:@"airline"]
+ MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchNot:exprSubject];
+ The expression will match when the subject does not contain the word airline
+
+ */
++ (MCOIMAPSearchExpression *) searchNot:(MCOIMAPSearchExpression *)expression;
+
@end
#endif
diff --git a/src/objc/imap/MCOIMAPSearchExpression.mm b/src/objc/imap/MCOIMAPSearchExpression.mm
index a6c89e8d..020acdb8 100644
--- a/src/objc/imap/MCOIMAPSearchExpression.mm
+++ b/src/objc/imap/MCOIMAPSearchExpression.mm
@@ -217,4 +217,10 @@
return MCO_TO_OBJC(result);
}
++ (MCOIMAPSearchExpression *) searchNot:(MCOIMAPSearchExpression *)expression
+{
+ mailcore::IMAPSearchExpression * result = mailcore::IMAPSearchExpression::searchNot(expression->_nativeExpr);
+ return MCO_TO_OBJC(result);
+}
+
@end