aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/imap
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/imap')
-rw-r--r--src/core/imap/MCIMAPSearchExpression.cc16
-rw-r--r--src/core/imap/MCIMAPSearchExpression.h3
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc12
3 files changed, 30 insertions, 1 deletions
diff --git a/src/core/imap/MCIMAPSearchExpression.cc b/src/core/imap/MCIMAPSearchExpression.cc
index 5838be00..cd3ccc2d 100644
--- a/src/core/imap/MCIMAPSearchExpression.cc
+++ b/src/core/imap/MCIMAPSearchExpression.cc
@@ -313,6 +313,14 @@ IMAPSearchExpression * IMAPSearchExpression::searchGmailThreadID(uint64_t number
return (IMAPSearchExpression *) expr->autorelease();
}
+IMAPSearchExpression * IMAPSearchExpression::searchGmailMessageID(uint64_t number)
+{
+ IMAPSearchExpression * expr = new IMAPSearchExpression();
+ expr->mKind = IMAPSearchKindGmailMessageID;
+ expr->mLongNumber = number;
+ return (IMAPSearchExpression *) expr->autorelease();
+}
+
IMAPSearchExpression * IMAPSearchExpression::searchGmailRaw(String * searchExpr)
{
IMAPSearchExpression * expr = new IMAPSearchExpression();
@@ -339,6 +347,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..a0647216 100644
--- a/src/core/imap/MCIMAPSearchExpression.h
+++ b/src/core/imap/MCIMAPSearchExpression.h
@@ -54,9 +54,12 @@ namespace mailcore {
static IMAPSearchExpression * searchSizeLarger(uint32_t size);
static IMAPSearchExpression * searchSizeSmaller(uint32_t size);
static IMAPSearchExpression * searchGmailThreadID(uint64_t number);
+ static IMAPSearchExpression * searchGmailMessageID(uint64_t number);
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 faabc522..b387e48f 100755
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -837,6 +837,7 @@ void IMAPSession::login(ErrorCode * pError)
break;
case AuthTypeXOAuth2:
+ case AuthTypeXOAuth2Outlook:
r = mailimap_oauth2_authenticate(mImap, utf8username, MCUTF8(mOAuth2Token));
break;
}
@@ -2791,7 +2792,11 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr
case IMAPSearchKindGmailThreadID:
{
return mailimap_search_key_new_xgmthrid(expression->longNumber());
- }
+ }
+ case IMAPSearchKindGmailMessageID:
+ {
+ return mailimap_search_key_new_xgmmsgid(expression->longNumber());
+ }
case IMAPSearchKindRead:
{
return mailimap_search_key_new(MAILIMAP_SEARCH_KEY_SEEN,
@@ -2906,6 +2911,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;