diff options
author | pfennema <paul@bryce.demon.nl> | 2013-12-04 22:27:53 +0100 |
---|---|---|
committer | pfennema <paul@bryce.demon.nl> | 2013-12-04 22:27:53 +0100 |
commit | e2e59990da11eba54050001fff58b466a58ce740 (patch) | |
tree | ab0dbcc156ca4e7602e9e9692c4a8d721e39fcbe | |
parent | baef8a77d30a9844eb63886624a1e04761d88a4a (diff) |
Separate searches for to, cc and bcc fields.
Furthermore, search with uids now supported.
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 6 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.cc | 54 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.h | 8 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 20 | ||||
-rw-r--r-- | src/objc/abstract/MCOConstants.h | 8 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.h | 41 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.mm | 18 |
7 files changed, 152 insertions, 3 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index 92e04c6e..fb09f46b 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -165,9 +165,13 @@ namespace mailcore { IMAPSearchKindAll, IMAPSearchKindNone, IMAPSearchKindFrom, - IMAPSearchKindRecipient, + IMAPSearchKindTo, + IMAPSearchKindCC, + IMAPSearchKindBCC, + IMAPSearchKindRecipient, // Recipient is the combination of To, CC and BCC IMAPSearchKindSubject, IMAPSearchKindContent, + IMAPSearchKindUids, IMAPSearchKindHeader, IMAPSearchKindRead, IMAPSearchKindUnread, diff --git a/src/core/imap/MCIMAPSearchExpression.cc b/src/core/imap/MCIMAPSearchExpression.cc index f7ac2a0f..436c7977 100644 --- a/src/core/imap/MCIMAPSearchExpression.cc +++ b/src/core/imap/MCIMAPSearchExpression.cc @@ -8,6 +8,7 @@ void IMAPSearchExpression::init() mHeader = NULL; mValue = NULL; mLongNumber = 0; + mUids = NULL; mLeftExpression = NULL; mRightExpression = NULL; } @@ -24,6 +25,8 @@ IMAPSearchExpression::IMAPSearchExpression(IMAPSearchExpression * other) mLongNumber = other->mLongNumber; MC_SAFE_REPLACE_COPY(String, mHeader, other->mHeader); MC_SAFE_REPLACE_COPY(String, mValue, other->mValue); + MC_SAFE_REPLACE_COPY(IndexSet, mUids, other->mUids); + MC_SAFE_REPLACE_COPY(IMAPSearchExpression, mLeftExpression, other->mLeftExpression); MC_SAFE_REPLACE_COPY(IMAPSearchExpression, mRightExpression, other->mRightExpression); } @@ -32,6 +35,7 @@ IMAPSearchExpression::~IMAPSearchExpression() { MC_SAFE_RELEASE(mHeader); MC_SAFE_RELEASE(mValue); + MC_SAFE_RELEASE(mUids); MC_SAFE_RELEASE(mLeftExpression); MC_SAFE_RELEASE(mRightExpression); } @@ -47,12 +51,24 @@ String * IMAPSearchExpression::description() case IMAPSearchKindFrom: return String::stringWithUTF8Format("<%s:%p From %s>", MCUTF8(className()), this, MCUTF8(mValue->description())); + case IMAPSearchKindTo: + return String::stringWithUTF8Format("<%s:%p To %s>", MCUTF8(className()), this, + MCUTF8(mValue->description())); + case IMAPSearchKindCC: + return String::stringWithUTF8Format("<%s:%p CC %s>", MCUTF8(className()), this, + MCUTF8(mValue->description())); + case IMAPSearchKindBCC: + return String::stringWithUTF8Format("<%s:%p BCC %s>", MCUTF8(className()), this, + MCUTF8(mValue->description())); case IMAPSearchKindRecipient: return String::stringWithUTF8Format("<%s:%p Recipient %s>", MCUTF8(className()), this, MCUTF8(mValue->description())); case IMAPSearchKindSubject: return String::stringWithUTF8Format("<%s:%p Subject %s>", MCUTF8(className()), this, MCUTF8(mValue->description())); + case IMAPSearchKindUids: + return String::stringWithUTF8Format("<%s:%p Uids %s>", MCUTF8(className()), this, + MCUTF8(mUids->description())); case IMAPSearchKindContent: return String::stringWithUTF8Format("<%s:%p Content %s>", MCUTF8(className()), this, MCUTF8(mValue->description())); @@ -84,6 +100,30 @@ IMAPSearchExpression * IMAPSearchExpression::searchFrom(String * value) return (IMAPSearchExpression *) expr->autorelease(); } +IMAPSearchExpression * IMAPSearchExpression::searchTo(String * value) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindTo; + MC_SAFE_REPLACE_COPY(String, expr->mValue, value); + return (IMAPSearchExpression *) expr->autorelease(); +} + +IMAPSearchExpression * IMAPSearchExpression::searchCC(String * value) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindCC; + MC_SAFE_REPLACE_COPY(String, expr->mValue, value); + return (IMAPSearchExpression *) expr->autorelease(); +} + +IMAPSearchExpression * IMAPSearchExpression::searchBCC(String * value) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindBCC; + MC_SAFE_REPLACE_COPY(String, expr->mValue, value); + return (IMAPSearchExpression *) expr->autorelease(); +} + IMAPSearchExpression * IMAPSearchExpression::searchRecipient(String * value) { IMAPSearchExpression * expr = new IMAPSearchExpression(); @@ -115,6 +155,15 @@ IMAPSearchExpression * IMAPSearchExpression::searchContent(String * value) return (IMAPSearchExpression *) expr->autorelease(); } +IMAPSearchExpression * IMAPSearchExpression::searchUids(IndexSet * uids) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindUids; + MC_SAFE_REPLACE_COPY(IndexSet,expr->mUids, uids); + return (IMAPSearchExpression *) expr->autorelease(); +} + + IMAPSearchExpression * IMAPSearchExpression::searchHeader(String * header, String * value) { IMAPSearchExpression * expr = new IMAPSearchExpression(); @@ -308,6 +357,11 @@ time_t IMAPSearchExpression::date() return mDate; } +IndexSet * IMAPSearchExpression::uids() +{ + return mUids; +} + IMAPSearchExpression * IMAPSearchExpression::leftExpression() { return mLeftExpression; diff --git a/src/core/imap/MCIMAPSearchExpression.h b/src/core/imap/MCIMAPSearchExpression.h index 2696366c..46f4f9d2 100644 --- a/src/core/imap/MCIMAPSearchExpression.h +++ b/src/core/imap/MCIMAPSearchExpression.h @@ -19,15 +19,22 @@ namespace mailcore { virtual String * value(); virtual uint64_t longNumber(); virtual time_t date(); + virtual IndexSet * uids(); + + virtual IMAPSearchExpression * leftExpression(); virtual IMAPSearchExpression * rightExpression(); static IMAPSearchExpression * searchAll(); static IMAPSearchExpression * searchFrom(String * value); + static IMAPSearchExpression * searchTo(String *value); + static IMAPSearchExpression * searchCC(String *value); + static IMAPSearchExpression * searchBCC(String *value); static IMAPSearchExpression * searchRecipient(String * value); static IMAPSearchExpression * searchSubject(String * value); static IMAPSearchExpression * searchContent(String * value); static IMAPSearchExpression * searchHeader(String * header, String * value); + static IMAPSearchExpression * searchUids(IndexSet * uids); static IMAPSearchExpression * searchRead(); static IMAPSearchExpression * searchUnread(); static IMAPSearchExpression * searchFlagged(); @@ -61,6 +68,7 @@ namespace mailcore { String * mValue; uint64_t mLongNumber; time_t mDate; + IndexSet *mUids; IMAPSearchExpression * mLeftExpression; IMAPSearchExpression * mRightExpression; void init(); diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 76dbc604..e5356023 100755 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -2554,6 +2554,15 @@ IndexSet * IMAPSession::search(String * folder, IMAPSearchKind kind, String * se case IMAPSearchKindFrom: expr = IMAPSearchExpression::searchFrom(searchString); break; + case IMAPSearchKindTo: + expr = IMAPSearchExpression::searchTo(searchString); + break; + case IMAPSearchKindCC: + expr = IMAPSearchExpression::searchCC(searchString); + break; + case IMAPSearchKindBCC: + expr = IMAPSearchExpression::searchBCC(searchString); + break; case IMAPSearchKindRecipient: expr = IMAPSearchExpression::searchRecipient(searchString); break; @@ -2580,6 +2589,15 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr { return mailimap_search_key_new_from(strdup(expression->value()->UTF8Characters())); } + case IMAPSearchKindTo: { + return mailimap_search_key_new_to(strdup(expression->value()->UTF8Characters())); + } + case IMAPSearchKindCC: { + return mailimap_search_key_new_cc(strdup(expression->value()->UTF8Characters())); + } + case IMAPSearchKindBCC: { + return mailimap_search_key_new_bcc(strdup(expression->value()->UTF8Characters())); + } case IMAPSearchKindRecipient: { struct mailimap_search_key * to_search; @@ -2605,6 +2623,8 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr { return mailimap_search_key_new_text(strdup(expression->value()->UTF8Characters())); } + case IMAPSearchKindUids: + return mailimap_search_key_new_uid(setFromIndexSet(expression->uids())); case IMAPSearchKindHeader: { return mailimap_search_key_new_header(strdup(expression->header()->UTF8Characters()), strdup(expression->value()->UTF8Characters())); diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h index ac71dd6b..710ea9eb 100644 --- a/src/objc/abstract/MCOConstants.h +++ b/src/objc/abstract/MCOConstants.h @@ -165,12 +165,20 @@ typedef enum { MCOIMAPSearchKindNone, /** Match sender.*/ MCOIMAPSearchKindFrom, + /** Match to */ + MCOIMAPSearchKindTo, + /** Match CC: */ + MCOIMAPSearchKindCC, + /** Match BCC: */ + MCOIMAPSearchKindBCC, /** Match recipient.*/ MCOIMAPSearchKindRecipient, /** Match subject.*/ MCOIMAPSearchKindSubject, /** Match content of the message.*/ MCOIMAPSearchKindContent, + /** Match uids */ + MCOIMAPSearchKindUids, /** Match headers of the message.*/ MCOIMAPSearchKindHeader, /** Match X-GM-THRID.*/ diff --git a/src/objc/imap/MCOIMAPSearchExpression.h b/src/objc/imap/MCOIMAPSearchExpression.h index ea9b6812..735d6b07 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.h +++ b/src/objc/imap/MCOIMAPSearchExpression.h @@ -14,6 +14,7 @@ #import <Foundation/Foundation.h> #import <MailCore/MCOConstants.h> +#import "MCOIndexSet.h" @interface MCOIMAPSearchExpression : NSObject @@ -37,12 +38,39 @@ /** Creates a search expression that matches any recipient of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchRecipient:(NSString *)value; + +/** + Creates a search expression that matches on the receiver (to) of an email. Useful to check whether the mail is directly addressed to the receiver. Example: - MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchTo:@"ngan@etpan.org"] **/ -+ (MCOIMAPSearchExpression *) searchRecipient:(NSString *)value; ++ (MCOIMAPSearchExpression *) searchTo:(NSString *)value; + +/** + Creates a search expression that matches on the cc of an email. Useful to check whether the mail is addressed to the receiver as cc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchCC:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchCC:(NSString *)value; + +/** + Creates a search expression that matches on the bcc field of an email. Useful to check whether the mail is addressed to the receiver as bcc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBCC:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchBCC:(NSString *)value; /* Creates a search expression that matches the subject of an email. @@ -63,6 +91,15 @@ + (MCOIMAPSearchExpression *) searchContent:(NSString *)value; /** + Creates a search expression that matches the uids specified. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUids:uids] + **/ ++ (MCOIMAPSearchExpression *) searchUids:(MCOIndexSet *) uids; + +/** Creates a search expression that matches the content of a specific header. Example: diff --git a/src/objc/imap/MCOIMAPSearchExpression.mm b/src/objc/imap/MCOIMAPSearchExpression.mm index 252e73b3..2c275054 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.mm +++ b/src/objc/imap/MCOIMAPSearchExpression.mm @@ -67,6 +67,20 @@ return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchFrom([value mco_mcString])); } ++ (MCOIMAPSearchExpression *) searchTo:(NSString *)value +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchTo([value mco_mcString])); +} + ++ (MCOIMAPSearchExpression *) searchCC:(NSString *)value +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchCC([value mco_mcString])); +} + ++ (MCOIMAPSearchExpression *) searchBCC:(NSString *)value +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchBCC([value mco_mcString])); +} + (MCOIMAPSearchExpression *) searchRecipient:(NSString *)value { return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchRecipient([value mco_mcString])); @@ -82,6 +96,10 @@ return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchContent([value mco_mcString])); } ++ (MCOIMAPSearchExpression *) searchUids:(MCOIndexSet *) uids +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchUids(MCO_FROM_OBJC(mailcore::IndexSet, uids))); +} + (MCOIMAPSearchExpression *) searchHeader:(NSString *)header value:(NSString *)value { return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchHeader([header mco_mcString], [value mco_mcString])); |