aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-26 00:58:03 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-26 00:58:03 -0700
commit1640f3525f830df5382edb96f6e6f6a71993787c (patch)
treee69912e9934bf1400d8d49f03cfa4b6f71749d48 /src/core
parent1353cb0ee96d92192f05e1feb1518e1534ba8cbe (diff)
IMAP ObjC async operations implemented
Diffstat (limited to 'src/core')
-rw-r--r--src/core/imap/MCIMAPSession.cc75
-rw-r--r--src/core/imap/MCIMAPSession.h31
-rw-r--r--src/core/imap/MCIMAPSyncResult.cpp6
-rw-r--r--src/core/imap/MCIMAPSyncResult.h6
4 files changed, 44 insertions, 74 deletions
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index 6a8ddaf5..7b9d2f7e 100644
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -287,6 +287,21 @@ static struct mailimap_set * setFromIndexSet(IndexSet * indexSet)
return imap_set;
}
+static IndexSet * indexSetFromSet(struct mailimap_set * imap_set)
+{
+ IndexSet * indexSet = IndexSet::indexSet();
+ for(clistiter * cur = clist_begin(imap_set->set_list) ; cur != NULL ; cur = clist_next(cur)) {
+ struct mailimap_set_item * item = (struct mailimap_set_item *) clist_content(cur);
+ if (item->set_last == 0) {
+ indexSet->addRange(RangeMake(item->set_first, UINT64_MAX));
+ }
+ else {
+ indexSet->addRange(RangeMake(item->set_first, item->set_last - item->set_first));
+ }
+ }
+ return indexSet;
+}
+
void IMAPSession::init()
{
mHostname = NULL;
@@ -1197,8 +1212,8 @@ void IMAPSession::appendMessage(String * folder, Data * messageData, MessageFlag
* pError = ErrorNone;
}
-void IMAPSession::copyMessages(String * folder, Array * uidSet, String * destFolder,
- Array ** pDestUIDs, ErrorCode * pError)
+void IMAPSession::copyMessages(String * folder, IndexSet * uidSet, String * destFolder,
+ IndexSet ** pDestUIDs, ErrorCode * pError)
{
int r;
struct mailimap_set * set;
@@ -1206,19 +1221,19 @@ void IMAPSession::copyMessages(String * folder, Array * uidSet, String * destFol
struct mailimap_set * dest_uid;
uint32_t uidvalidity;
clist * setList;
- Array * uidSetResult;
+ IndexSet * uidSetResult;
selectIfNeeded(folder, pError);
if (* pError != ErrorNone)
return;
- set = setFromArray(uidSet);
+ set = setFromIndexSet(uidSet);
if (clist_count(set->set_list) == 0) {
return;
}
setList = splitSet(set, 10);
- uidSetResult = new Array();
+ uidSetResult = IndexSet::indexSet();
for(clistiter * iter = clist_begin(setList) ; iter != NULL ; iter = clist_next(iter)) {
struct mailimap_set * current_set;
@@ -1245,11 +1260,11 @@ void IMAPSession::copyMessages(String * folder, Array * uidSet, String * destFol
}
if (dest_uid != NULL) {
- uidSetResult->addObjectsFromArray(arrayFromSet(dest_uid));
+ uidSetResult = indexSetFromSet(dest_uid);
mailimap_set_free(dest_uid);
}
}
- * pDestUIDs = (Array *) uidSetResult->autorelease();
+ * pDestUIDs = (IndexSet *) uidSetResult->autorelease();
* pError = ErrorNone;
release:
@@ -1642,7 +1657,7 @@ IMAPSyncResult * IMAPSession::fetchMessages(String * folder, IMAPMessagesRequest
bool needsFlags;
bool needsGmailLabels;
Array * messages;
- Array * vanishedMessages;
+ IndexSet * vanishedMessages;
selectIfNeeded(folder, pError);
if (* pError != ErrorNone)
@@ -1807,7 +1822,7 @@ IMAPSyncResult * IMAPSession::fetchMessages(String * folder, IMAPMessagesRequest
vanishedMessages = NULL;
if (vanished != NULL) {
- vanishedMessages = arrayFromSet(vanished->qr_known_uids);
+ vanishedMessages = indexSetFromSet(vanished->qr_known_uids);
}
mBodyProgressEnabled = true;
@@ -2079,7 +2094,7 @@ Data * IMAPSession::fetchMessageAttachmentByUID(String * folder, uint32_t uid, S
return data;
}
-Array * IMAPSession::search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError)
+IndexSet * IMAPSession::search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError)
{
IMAPSearchExpression * expr;
@@ -2158,7 +2173,7 @@ static struct mailimap_search_key * searchKeyFromSearchExpression(IMAPSearchExpr
}
}
-Array * IMAPSession::search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError)
+IndexSet * IMAPSession::search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError)
{
struct mailimap_search_key * key;
@@ -2185,10 +2200,10 @@ Array * IMAPSession::search(String * folder, IMAPSearchExpression * expression,
return NULL;
}
- Array * result = Array::array();
+ IndexSet * result = IndexSet::indexSet();
for(clistiter * cur = clist_begin(result_list) ; cur != NULL ; cur = clist_next(cur)) {
uint32_t * uid = (uint32_t *) clist_content(cur);
- result->addObject(Value::valueWithUnsignedLongValue(* uid));
+ result->addIndex(* uid);
}
mailimap_search_result_free(result_list);
* pError = ErrorNone;
@@ -2455,7 +2470,7 @@ HashMap * IMAPSession::fetchNamespace(ErrorCode * pError)
return result;
}
-void IMAPSession::storeFlags(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError)
+void IMAPSession::storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError)
{
struct mailimap_set * imap_set;
struct mailimap_store_att_flags * store_att_flags;
@@ -2467,7 +2482,7 @@ void IMAPSession::storeFlags(String * folder, Array * uids, IMAPStoreFlagsReques
if (* pError != ErrorNone)
return;
- imap_set = setFromArray(uids);
+ imap_set = setFromIndexSet(uids);
if (clist_count(imap_set->set_list) == 0) {
return;
}
@@ -2576,7 +2591,7 @@ void IMAPSession::storeFlags(String * folder, Array * uids, IMAPStoreFlagsReques
* pError = ErrorNone;
}
-void IMAPSession::storeLabels(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError)
+void IMAPSession::storeLabels(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError)
{
struct mailimap_set * imap_set;
struct mailimap_msg_att_xgmlabels * xgmlabels;
@@ -2587,7 +2602,7 @@ void IMAPSession::storeLabels(String * folder, Array * uids, IMAPStoreFlagsReque
if (* pError != ErrorNone)
return;
- imap_set = setFromArray(uids);
+ imap_set = setFromIndexSet(uids);
if (clist_count(imap_set->set_list) == 0) {
return;
}
@@ -2665,32 +2680,6 @@ unsigned int IMAPSession::lastFolderMessageCount()
return mFolderMsgCount;
}
-#if 0
-IMAPSyncResult * IMAPSession::syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- uint32_t firstUID, uint32_t lastUID,
- uint64_t modseq,
- IMAPProgressCallback * progressCallback, ErrorCode * pError)
-{
- struct mailimap_set * imapset = mailimap_set_new_interval(firstUID, lastUID);
- IMAPSyncResult * result = fetchMessages(folder, requestKind, true, imapset, modseq, NULL, firstUID,
- progressCallback, pError);
- mailimap_set_free(imapset);
- return result;
-}
-
-IMAPSyncResult * IMAPSession::syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- Array * uids, uint64_t modseq,
- IMAPProgressCallback * progressCallback, ErrorCode * pError)
-{
- struct mailimap_set * imapset = setFromArray(uids);
- IMAPSyncResult * result = fetchMessages(folder, requestKind, true, imapset, modseq, NULL,
- (uint32_t) ((Value *) uids->objectAtIndex(0))->unsignedLongValue(),
- progressCallback, pError);
- mailimap_set_free(imapset);
- return result;
-}
-#endif
-
IMAPSyncResult * IMAPSession::syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
IndexSet * uids, uint64_t modseq,
IMAPProgressCallback * progressCallback, ErrorCode * pError)
diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h
index 2b4b8b91..bd31527e 100644
--- a/src/core/imap/MCIMAPSession.h
+++ b/src/core/imap/MCIMAPSession.h
@@ -75,21 +75,11 @@ namespace mailcore {
virtual void appendMessage(String * folder, Data * messageData, MessageFlag flags,
IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError);
- virtual void copyMessages(String * folder, Array * uidSet, String * destFolder,
- Array ** pDestUIDs, ErrorCode * pError);
+ virtual void copyMessages(String * folder, IndexSet * uidSet, String * destFolder,
+ IndexSet ** pDestUIDs, ErrorCode * pError);
virtual void expunge(String * folder, ErrorCode * pError);
-#if 0
- virtual Array * /* IMAPMessage */ fetchMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- uint32_t firstUID, uint32_t lastUID, IMAPProgressCallback * progressCallback, ErrorCode * pError);
- virtual Array * /* IMAPMessage */ fetchMessagesByNumber(String * folder, IMAPMessagesRequestKind requestKind,
- uint32_t firstNumber, uint32_t lastNumber, IMAPProgressCallback * progressCallback, ErrorCode * pError);
- virtual Array * /* IMAPMessage */ fetchMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- Array * /* Value */ uids, IMAPProgressCallback * progressCallback, ErrorCode * pError);
- virtual Array * /* IMAPMessage */ fetchMessagesByNumber(String * folder, IMAPMessagesRequestKind requestKind,
- Array * /* Value */ numbers, IMAPProgressCallback * progressCallback, ErrorCode * pError);
-#endif
virtual Array * /* IMAPMessage */ fetchMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
IndexSet * uids, IMAPProgressCallback * progressCallback, ErrorCode * pError);
virtual Array * /* IMAPMessage */ fetchMessagesByNumber(String * folder, IMAPMessagesRequestKind requestKind,
@@ -103,24 +93,15 @@ namespace mailcore {
ErrorCode * pError);
/* When CONDSTORE or QRESYNC is available */
-#if 0
- virtual IMAPSyncResult * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- uint32_t firstUID, uint32_t lastUID,
- uint64_t modseq,
- IMAPProgressCallback * progressCallback, ErrorCode * pError);
- virtual IMAPSyncResult * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
- Array * uids, uint64_t modseq,
- IMAPProgressCallback * progressCallback, ErrorCode * pError);
-#endif
virtual IMAPSyncResult * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind,
IndexSet * uids, uint64_t modseq,
IMAPProgressCallback * progressCallback, ErrorCode * pError);
- virtual void storeFlags(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError);
- virtual void storeLabels(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError);
+ virtual void storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError);
+ virtual void storeLabels(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError);
- virtual Array * search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError);
- virtual Array * search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError);
+ virtual IndexSet * search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError);
+ virtual IndexSet * search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError);
virtual void setupIdle();
virtual void idle(String * folder, uint32_t lastKnownUID, ErrorCode * pError);
diff --git a/src/core/imap/MCIMAPSyncResult.cpp b/src/core/imap/MCIMAPSyncResult.cpp
index e2d3ee9c..d84f4344 100644
--- a/src/core/imap/MCIMAPSyncResult.cpp
+++ b/src/core/imap/MCIMAPSyncResult.cpp
@@ -34,12 +34,12 @@ Array * /* IMAPMessage */ IMAPSyncResult::modifiedOrAddedMessages()
return mModifiedOrAddedMessages;
}
-void IMAPSyncResult::setVanishedMessages(Array * /* IMAPMessage */ messages)
+void IMAPSyncResult::setVanishedMessages(IndexSet * messages)
{
- MC_SAFE_REPLACE_RETAIN(Array, mVanishedMessages, messages);
+ MC_SAFE_REPLACE_RETAIN(IndexSet, mVanishedMessages, messages);
}
-Array * /* Value */ IMAPSyncResult::vanishedMessages()
+IndexSet * IMAPSyncResult::vanishedMessages()
{
return mVanishedMessages;
}
diff --git a/src/core/imap/MCIMAPSyncResult.h b/src/core/imap/MCIMAPSyncResult.h
index 009bc65e..3505a441 100644
--- a/src/core/imap/MCIMAPSyncResult.h
+++ b/src/core/imap/MCIMAPSyncResult.h
@@ -23,12 +23,12 @@ namespace mailcore {
virtual void setModifiedOrAddedMessages(Array * /* IMAPMessage */ messages);
virtual Array * /* IMAPMessage */ modifiedOrAddedMessages();
- virtual void setVanishedMessages(Array * /* IMAPMessage */ messages);
- virtual Array * /* Value */ vanishedMessages();
+ virtual void setVanishedMessages(IndexSet * vanishedMessages);
+ virtual IndexSet * vanishedMessages();
private:
Array * /* IMAPMessage */ mModifiedOrAddedMessages;
- Array * /* Value */ mVanishedMessages;
+ IndexSet * mVanishedMessages;
};
}