aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2015-05-18 21:27:21 -0700
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2015-05-18 21:27:21 -0700
commit89e257f01052a67a6722e969c8766c24f790ae08 (patch)
treea19e732539d8c3625ff7fc705dad740e50ec85be
parent640d1945f279038c197e31419677ac64e4246453 (diff)
parent2e49d8e46a7ed4e4330ff5e6d00cf55b42770966 (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.h1
-rw-r--r--src/core/imap/MCIMAPSearchExpression.cpp18
-rw-r--r--src/core/imap/MCIMAPSearchExpression.h3
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cpp4
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.h9
-rw-r--r--src/objc/imap/MCOIMAPSearchExpression.mm6
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]));