diff options
author | Hoà V. DINH <dinh.viet.hoa@gmail.com> | 2015-05-18 21:27:21 -0700 |
---|---|---|
committer | Hoà V. DINH <dinh.viet.hoa@gmail.com> | 2015-05-18 21:27:21 -0700 |
commit | 89e257f01052a67a6722e969c8766c24f790ae08 (patch) | |
tree | a19e732539d8c3625ff7fc705dad740e50ec85be | |
parent | 640d1945f279038c197e31419677ac64e4246453 (diff) | |
parent | 2e49d8e46a7ed4e4330ff5e6d00cf55b42770966 (diff) |
Merge pull request #1122 from jstarfruits/master
Added UID Search with message number expression and SearchKindNumber for IMAP
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 1 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.cpp | 18 | ||||
-rw-r--r-- | src/core/imap/MCIMAPSearchExpression.h | 3 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cpp | 4 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.h | 9 | ||||
-rw-r--r-- | src/objc/imap/MCOIMAPSearchExpression.mm | 6 |
6 files changed, 41 insertions, 0 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index c948b7a2..449d7e84 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -180,6 +180,7 @@ namespace mailcore { IMAPSearchKindContent, IMAPSearchKindBody, IMAPSearchKindUIDs, + IMAPSearchKindNumbers, IMAPSearchKindHeader, IMAPSearchKindRead, IMAPSearchKindUnread, diff --git a/src/core/imap/MCIMAPSearchExpression.cpp b/src/core/imap/MCIMAPSearchExpression.cpp index b3467e59..8d6b1f0b 100644 --- a/src/core/imap/MCIMAPSearchExpression.cpp +++ b/src/core/imap/MCIMAPSearchExpression.cpp @@ -9,6 +9,7 @@ void IMAPSearchExpression::init() mValue = NULL; mLongNumber = 0; mUids = NULL; + mNumbers = NULL; mLeftExpression = NULL; mRightExpression = NULL; } @@ -26,6 +27,7 @@ IMAPSearchExpression::IMAPSearchExpression(IMAPSearchExpression * other) 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(IndexSet, mNumbers, other->mNumbers); MC_SAFE_REPLACE_COPY(IMAPSearchExpression, mLeftExpression, other->mLeftExpression); MC_SAFE_REPLACE_COPY(IMAPSearchExpression, mRightExpression, other->mRightExpression); } @@ -35,6 +37,7 @@ IMAPSearchExpression::~IMAPSearchExpression() MC_SAFE_RELEASE(mHeader); MC_SAFE_RELEASE(mValue); MC_SAFE_RELEASE(mUids); + MC_SAFE_RELEASE(mNumbers); MC_SAFE_RELEASE(mLeftExpression); MC_SAFE_RELEASE(mRightExpression); } @@ -68,6 +71,9 @@ String * IMAPSearchExpression::description() case IMAPSearchKindUIDs: return String::stringWithUTF8Format("<%s:%p UIDs %s>", MCUTF8(className()), this, MCUTF8(mUids->description())); + case IMAPSearchKindNumbers: + return String::stringWithUTF8Format("<%s:%p Numbers %s>", MCUTF8(className()), this, + MCUTF8(mNumbers->description())); case IMAPSearchKindContent: return String::stringWithUTF8Format("<%s:%p Content %s>", MCUTF8(className()), this, MCUTF8(mValue->description())); @@ -170,6 +176,13 @@ IMAPSearchExpression * IMAPSearchExpression::searchUIDs(IndexSet * uids) return (IMAPSearchExpression *) expr->autorelease(); } +IMAPSearchExpression * IMAPSearchExpression::searchNumbers(IndexSet * numbers) +{ + IMAPSearchExpression * expr = new IMAPSearchExpression(); + expr->mKind = IMAPSearchKindNumbers; + MC_SAFE_REPLACE_COPY(IndexSet, expr->mNumbers, numbers); + return (IMAPSearchExpression *) expr->autorelease(); +} IMAPSearchExpression * IMAPSearchExpression::searchHeader(String * header, String * value) { @@ -393,6 +406,11 @@ IndexSet * IMAPSearchExpression::uids() return mUids; } +IndexSet * IMAPSearchExpression::numbers() +{ + return mNumbers; +} + IMAPSearchExpression * IMAPSearchExpression::leftExpression() { return mLeftExpression; diff --git a/src/core/imap/MCIMAPSearchExpression.h b/src/core/imap/MCIMAPSearchExpression.h index 6f1f4ea0..182f3013 100644 --- a/src/core/imap/MCIMAPSearchExpression.h +++ b/src/core/imap/MCIMAPSearchExpression.h @@ -20,6 +20,7 @@ namespace mailcore { virtual uint64_t longNumber(); virtual time_t date(); virtual IndexSet * uids(); + virtual IndexSet * numbers(); virtual IMAPSearchExpression * leftExpression(); @@ -36,6 +37,7 @@ namespace mailcore { static IMAPSearchExpression * searchBody(String * value); static IMAPSearchExpression * searchHeader(String * header, String * value); static IMAPSearchExpression * searchUIDs(IndexSet * uids); + static IMAPSearchExpression * searchNumbers(IndexSet * numbers); static IMAPSearchExpression * searchRead(); static IMAPSearchExpression * searchUnread(); static IMAPSearchExpression * searchFlagged(); @@ -73,6 +75,7 @@ namespace mailcore { String * mValue; uint64_t mLongNumber; IndexSet * mUids; + IndexSet * mNumbers; IMAPSearchExpression * mLeftExpression; IMAPSearchExpression * mRightExpression; void init(); diff --git a/src/core/imap/MCIMAPSession.cpp b/src/core/imap/MCIMAPSession.cpp index d3f0895e..9fcf8397 100755 --- a/src/core/imap/MCIMAPSession.cpp +++ b/src/core/imap/MCIMAPSession.cpp @@ -2795,6 +2795,10 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr { return mailimap_search_key_new_uid(setFromIndexSet(expression->uids())); } + case IMAPSearchKindNumbers: + { + return mailimap_search_key_new_set(setFromIndexSet(expression->numbers())); + } case IMAPSearchKindHeader: { return mailimap_search_key_new_header(strdup(expression->header()->UTF8Characters()), strdup(expression->value()->UTF8Characters())); diff --git a/src/objc/imap/MCOIMAPSearchExpression.h b/src/objc/imap/MCOIMAPSearchExpression.h index 51688dc2..225b3a5e 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.h +++ b/src/objc/imap/MCOIMAPSearchExpression.h @@ -109,6 +109,15 @@ + (MCOIMAPSearchExpression *) searchUIDs:(MCOIndexSet *) uids; /** + Creates a search expression that matches the message numbers specified. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchNumbers:numbers] + **/ ++ (MCOIMAPSearchExpression *) searchNumbers:(MCOIndexSet *) numbers; + +/** 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 57ae8455..57dd928e 100644 --- a/src/objc/imap/MCOIMAPSearchExpression.mm +++ b/src/objc/imap/MCOIMAPSearchExpression.mm @@ -105,6 +105,12 @@ { return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchUIDs(MCO_FROM_OBJC(mailcore::IndexSet, uids))); } + ++ (MCOIMAPSearchExpression *) searchNumbers:(MCOIndexSet *) numbers +{ + return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchNumbers(MCO_FROM_OBJC(mailcore::IndexSet, numbers))); +} + + (MCOIMAPSearchExpression *) searchHeader:(NSString *)header value:(NSString *)value { return MCO_TO_OBJC(mailcore::IMAPSearchExpression::searchHeader([header mco_mcString], [value mco_mcString])); |