diff options
author | 2014-03-06 10:33:46 -0800 | |
---|---|---|
committer | 2014-03-06 10:33:46 -0800 | |
commit | d5ba7c53ad83c18b66a6901c762f6c7f45d2257a (patch) | |
tree | 684c631e9f75faefdba45ca872557c87b0203018 | |
parent | f059a91b945e95816a1a0d9a912ffb8490d1aa6b (diff) | |
parent | d6671e3f25af693593da29a538012daeb930f80b (diff) |
Merge pull request #623 from pfennema/master
add new searchexpression with NOT operator
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 1 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.cc | 8 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.h | 2 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 5 | ||||
-rw-r--r-- | src/objc/abstract/MCOConstants.h | 2 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.h | 12 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.mm | 6 |
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 |