aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/async/imap/MCIMAPAppendMessageOperation.cc14
-rw-r--r--src/async/imap/MCIMAPAppendMessageOperation.h4
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncConnection.cc17
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncConnection.h5
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.cc14
-rwxr-xr-xsrc/async/imap/MCIMAPAsyncSession.h5
-rw-r--r--src/async/imap/MCIMAPStoreFlagsOperation.cc2
-rw-r--r--src/async/imap/MCIMAPStoreFlagsOperation.h1
-rw-r--r--src/core/imap/MCIMAPMessage.cc4
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc79
-rwxr-xr-xsrc/core/imap/MCIMAPSession.h7
-rw-r--r--src/objc/imap/MCOIMAPMessage.h2
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.h23
-rwxr-xr-xsrc/objc/imap/MCOIMAPSession.mm21
14 files changed, 133 insertions, 65 deletions
diff --git a/src/async/imap/MCIMAPAppendMessageOperation.cc b/src/async/imap/MCIMAPAppendMessageOperation.cc
index 0a205a2d..06a42b2d 100644
--- a/src/async/imap/MCIMAPAppendMessageOperation.cc
+++ b/src/async/imap/MCIMAPAppendMessageOperation.cc
@@ -17,12 +17,14 @@ IMAPAppendMessageOperation::IMAPAppendMessageOperation()
{
mMessageData = NULL;
mFlags = MessageFlagNone;
+ mCustomFlags = NULL;
mCreatedUID = 0;
}
IMAPAppendMessageOperation::~IMAPAppendMessageOperation()
{
MC_SAFE_RELEASE(mMessageData);
+ MC_SAFE_RELEASE(mCustomFlags);
}
void IMAPAppendMessageOperation::setMessageData(Data * messageData)
@@ -45,6 +47,16 @@ MessageFlag IMAPAppendMessageOperation::flags()
return mFlags;
}
+void IMAPAppendMessageOperation::setCustomFlags(Array * customFlags)
+{
+ MC_SAFE_REPLACE_COPY(Array, mCustomFlags, customFlags);
+}
+
+Array * IMAPAppendMessageOperation::customFlags()
+{
+ return customFlags();
+}
+
uint32_t IMAPAppendMessageOperation::createdUID()
{
return mCreatedUID;
@@ -53,7 +65,7 @@ uint32_t IMAPAppendMessageOperation::createdUID()
void IMAPAppendMessageOperation::main()
{
ErrorCode error;
- session()->session()->appendMessage(folder(), mMessageData, mFlags, this, &mCreatedUID, &error);
+ session()->session()->appendMessageWithCustomFlags(folder(), mMessageData, mFlags, mCustomFlags, this, &mCreatedUID, &error);
setError(error);
}
diff --git a/src/async/imap/MCIMAPAppendMessageOperation.h b/src/async/imap/MCIMAPAppendMessageOperation.h
index 4f210ac8..de6960de 100644
--- a/src/async/imap/MCIMAPAppendMessageOperation.h
+++ b/src/async/imap/MCIMAPAppendMessageOperation.h
@@ -28,6 +28,9 @@ namespace mailcore {
virtual void setFlags(MessageFlag flags);
virtual MessageFlag flags();
+ virtual void setCustomFlags(Array * customFlags);
+ virtual Array * customFlags();
+
virtual uint32_t createdUID();
public: // subclass behavior
@@ -36,6 +39,7 @@ namespace mailcore {
private:
Data * mMessageData;
MessageFlag mFlags;
+ Array * mCustomFlags;
uint32_t mCreatedUID;
};
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc
index 30d2f9be..738da0d1 100755
--- a/src/async/imap/MCIMAPAsyncConnection.cc
+++ b/src/async/imap/MCIMAPAsyncConnection.cc
@@ -327,13 +327,14 @@ IMAPOperation * IMAPAsyncConnection::unsubscribeFolderOperation(String * folder)
return op;
}
-IMAPAppendMessageOperation * IMAPAsyncConnection::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags)
+IMAPAppendMessageOperation * IMAPAsyncConnection::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags)
{
IMAPAppendMessageOperation * op = new IMAPAppendMessageOperation();
op->setSession(this);
op->setFolder(folder);
op->setMessageData(messageData);
op->setFlags(flags);
+ op->setCustomFlags(customFlags);
op->autorelease();
return op;
}
@@ -420,19 +421,7 @@ IMAPFetchContentOperation * IMAPAsyncConnection::fetchMessageAttachmentByUIDOper
return op;
}
-IMAPOperation * IMAPAsyncConnection::storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags)
-{
- IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation();
- op->setSession(this);
- op->setFolder(folder);
- op->setUids(uids);
- op->setKind(kind);
- op->setFlags(flags);
- op->autorelease();
- return op;
-}
-
-IMAPOperation * IMAPAsyncConnection::storeAllFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags)
+IMAPOperation * IMAPAsyncConnection::storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags)
{
IMAPStoreFlagsOperation * op = new IMAPStoreFlagsOperation();
op->setSession(this);
diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h
index c2734aff..0a117bea 100755
--- a/src/async/imap/MCIMAPAsyncConnection.h
+++ b/src/async/imap/MCIMAPAsyncConnection.h
@@ -99,7 +99,7 @@ namespace mailcore {
virtual IMAPOperation * subscribeFolderOperation(String * folder);
virtual IMAPOperation * unsubscribeFolderOperation(String * folder);
- virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags);
+ virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags);
virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder);
@@ -116,8 +116,7 @@ namespace mailcore {
virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID,
Encoding encoding);
- virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags);
- virtual IMAPOperation * storeAllFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags);
+ virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags);
virtual IMAPOperation * storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels);
virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString);
diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc
index 9cb7992a..44f753c9 100755
--- a/src/async/imap/MCIMAPAsyncSession.cc
+++ b/src/async/imap/MCIMAPAsyncSession.cc
@@ -366,10 +366,10 @@ IMAPOperation * IMAPAsyncSession::unsubscribeFolderOperation(String * folder)
return session->unsubscribeFolderOperation(folder);
}
-IMAPAppendMessageOperation * IMAPAsyncSession::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags)
+IMAPAppendMessageOperation * IMAPAsyncSession::appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags)
{
IMAPAsyncConnection * session = sessionForFolder(folder);
- return session->appendMessageOperation(folder, messageData, flags);
+ return session->appendMessageOperation(folder, messageData, flags, customFlags);
}
IMAPCopyMessagesOperation * IMAPAsyncSession::copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder)
@@ -418,16 +418,10 @@ IMAPFetchContentOperation * IMAPAsyncSession::fetchMessageAttachmentByUIDOperati
return session->fetchMessageAttachmentByUIDOperation(folder, uid, partID, encoding);
}
-IMAPOperation * IMAPAsyncSession::storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags)
+IMAPOperation * IMAPAsyncSession::storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags)
{
IMAPAsyncConnection * session = sessionForFolder(folder);
- return session->storeFlagsOperation(folder, uids, kind, flags);
-}
-
-IMAPOperation * IMAPAsyncSession::storeAllFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags)
-{
- IMAPAsyncConnection * session = sessionForFolder(folder);
- return session->storeAllFlagsOperation(folder, uids, kind, flags, customFlags);
+ return session->storeFlagsOperation(folder, uids, kind, flags, customFlags);
}
IMAPOperation * IMAPAsyncSession::storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels)
diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h
index f81e6306..bd06d6a3 100755
--- a/src/async/imap/MCIMAPAsyncSession.h
+++ b/src/async/imap/MCIMAPAsyncSession.h
@@ -115,7 +115,7 @@ namespace mailcore {
virtual IMAPOperation * subscribeFolderOperation(String * folder);
virtual IMAPOperation * unsubscribeFolderOperation(String * folder);
- virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags);
+ virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags);
virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder);
@@ -132,8 +132,7 @@ namespace mailcore {
virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID,
Encoding encoding, bool urgent = false);
- virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags);
- virtual IMAPOperation * storeAllFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags);
+ virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags);
virtual IMAPOperation * storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels);
virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString);
diff --git a/src/async/imap/MCIMAPStoreFlagsOperation.cc b/src/async/imap/MCIMAPStoreFlagsOperation.cc
index e2e2bfe9..df68529a 100644
--- a/src/async/imap/MCIMAPStoreFlagsOperation.cc
+++ b/src/async/imap/MCIMAPStoreFlagsOperation.cc
@@ -70,6 +70,6 @@ Array * IMAPStoreFlagsOperation::customFlags()
void IMAPStoreFlagsOperation::main()
{
ErrorCode error;
- session()->session()->storeFlags(folder(), mUids, mKind, mFlags, mCustomFlags, &error);
+ session()->session()->storeFlagsAndCustomFlags(folder(), mUids, mKind, mFlags, mCustomFlags, &error);
setError(error);
}
diff --git a/src/async/imap/MCIMAPStoreFlagsOperation.h b/src/async/imap/MCIMAPStoreFlagsOperation.h
index d908baf5..c1b17db5 100644
--- a/src/async/imap/MCIMAPStoreFlagsOperation.h
+++ b/src/async/imap/MCIMAPStoreFlagsOperation.h
@@ -41,7 +41,6 @@ namespace mailcore {
IMAPStoreFlagsRequestKind mKind;
MessageFlag mFlags;
Array * mCustomFlags;
-
};
}
diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc
index 150ddc3e..6845d19a 100644
--- a/src/core/imap/MCIMAPMessage.cc
+++ b/src/core/imap/MCIMAPMessage.cc
@@ -239,7 +239,9 @@ HashMap * IMAPMessage::serializable()
result->setObjectForKey(MCSTR("size"), String::stringWithUTF8Format("%lu", (long unsigned) uid()));
result->setObjectForKey(MCSTR("flags"), String::stringWithUTF8Format("%u", (unsigned) flags()));
result->setObjectForKey(MCSTR("originalFlags"), String::stringWithUTF8Format("%u", (unsigned) originalFlags()));
- result->setObjectForKey(MCSTR("customFlags"), customFlags());
+ if (customFlags() != NULL) {
+ result->setObjectForKey(MCSTR("customFlags"), customFlags());
+ }
result->setObjectForKey(MCSTR("mainPart"), mMainPart->serializable());
if (gmailLabels() != NULL) {
result->setObjectForKey(MCSTR("gmailLabels"), gmailLabels());
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index 54e8aea0..58d7ba1d 100755
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -133,12 +133,12 @@ static MessageFlag flag_from_lep(struct mailimap_flag * flag)
static MessageFlag flags_from_lep_att_dynamic(struct mailimap_msg_att_dynamic * att_dynamic)
{
- MessageFlag flags;
- clistiter * iter;
-
if (att_dynamic->att_list == NULL)
return MessageFlagNone;
+ MessageFlag flags;
+ clistiter * iter;
+
flags = MessageFlagNone;
for(iter = clist_begin(att_dynamic->att_list) ;iter != NULL ; iter = clist_next(iter)) {
struct mailimap_flag_fetch * flag_fetch;
@@ -158,14 +158,14 @@ static MessageFlag flags_from_lep_att_dynamic(struct mailimap_msg_att_dynamic *
static Array * custom_flags_from_lep_att_dynamic(struct mailimap_msg_att_dynamic * att_dynamic)
{
- Array * result;
- clistiter * iter;
-
if (att_dynamic->att_list == NULL)
return NULL;
+ Array * result;
+ clistiter * iter;
+
result = Array::array();
- for(iter = clist_begin(att_dynamic->att_list) ;iter != NULL ; iter = clist_next(iter)) {
+ for (iter = clist_begin(att_dynamic->att_list); iter != NULL; iter = clist_next(iter)) {
struct mailimap_flag_fetch * flag_fetch;
struct mailimap_flag * flag;
@@ -176,10 +176,11 @@ static Array * custom_flags_from_lep_att_dynamic(struct mailimap_msg_att_dynamic
flag = flag_fetch->fl_flag;
if (flag->fl_type == MAILIMAP_FLAG_KEYWORD) {
- String * customFlag;
-
- customFlag = String::stringWithUTF8Characters(flag->fl_data.fl_keyword);
- result->addObject(customFlag);
+ if (strcmp(flag->fl_data.fl_keyword, "$MDNSent") != 0 && strcmp(flag->fl_data.fl_keyword, "$Forwarded") != 0 && strcmp(flag->fl_data.fl_keyword, "$SubmitPending") != 0 && strcmp(flag->fl_data.fl_keyword, "$Submitted") != 0) {
+ String * customFlag;
+ customFlag = String::stringWithUTF8Characters(flag->fl_data.fl_keyword);
+ result->addObject(customFlag);
+ }
}
}
@@ -1552,6 +1553,12 @@ void IMAPSession::unsubscribeFolder(String * folder, ErrorCode * pError)
void IMAPSession::appendMessage(String * folder, Data * messageData, MessageFlag flags,
IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError)
{
+ this->appendMessageWithCustomFlags(folder, messageData, flags, NULL, progressCallback, createdUID, pError);
+}
+
+void IMAPSession::appendMessageWithCustomFlags(String * folder, Data * messageData, MessageFlag flags, Array * customFlags,
+ IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError)
+{
int r;
struct mailimap_flag_list * flag_list;
uint32_t uidvalidity;
@@ -1566,6 +1573,15 @@ void IMAPSession::appendMessage(String * folder, Data * messageData, MessageFlag
flag_list = NULL;
flag_list = flags_to_lep(flags);
+ if (customFlags != NULL) {
+ for (unsigned int i = 0 ; i < customFlags->count() ; i ++) {
+ struct mailimap_flag * f;
+ String * customFlag = (String *) customFlags->objectAtIndex(i);
+
+ f = mailimap_flag_new_flag_keyword(strdup(customFlag->UTF8Characters()));
+ mailimap_flag_list_add(flag_list, f);
+ }
+ }
r = mailimap_uidplus_append(mImap, MCUTF8(folder), flag_list, NULL, messageData->bytes(), messageData->length(),
&uidvalidity, &uidresult);
mailimap_flag_list_free(flag_list);
@@ -3219,7 +3235,12 @@ HashMap * IMAPSession::fetchNamespace(ErrorCode * pError)
return result;
}
-void IMAPSession::storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError)
+void IMAPSession::storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError)
+{
+ this->storeFlagsAndCustomFlags(folder, uids, kind, flags, NULL, pError);
+}
+
+void IMAPSession::storeFlagsAndCustomFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError)
{
struct mailimap_set * imap_set;
struct mailimap_store_att_flags * store_att_flags;
@@ -3269,14 +3290,40 @@ void IMAPSession::storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsReq
f = mailimap_flag_new_draft();
mailimap_flag_list_add(flag_list, f);
}
-
- for (unsigned int i = 0 ; i < customFlags->count() ; i ++) {
+ if ((flags & MessageFlagMDNSent) != 0) {
+ struct mailimap_flag * f;
+
+ f = mailimap_flag_new_flag_keyword(strdup("$MDNSent"));
+ mailimap_flag_list_add(flag_list, f);
+ }
+ if ((flags & MessageFlagForwarded) != 0) {
+ struct mailimap_flag * f;
+
+ f = mailimap_flag_new_flag_keyword(strdup("$Forwarded"));
+ mailimap_flag_list_add(flag_list, f);
+ }
+ if ((flags & MessageFlagSubmitPending) != 0) {
+ struct mailimap_flag * f;
+
+ f = mailimap_flag_new_flag_keyword(strdup("$SubmitPending"));
+ mailimap_flag_list_add(flag_list, f);
+ }
+ if ((flags & MessageFlagSubmitted) != 0) {
struct mailimap_flag * f;
- String * customFlag = (String *) customFlags->objectAtIndex(i);
- f = mailimap_flag_new_flag_keyword(strdup(customFlag->UTF8Characters()));
+ f = mailimap_flag_new_flag_keyword(strdup("$Submitted"));
mailimap_flag_list_add(flag_list, f);
}
+
+ if (customFlags != NULL) {
+ for (unsigned int i = 0 ; i < customFlags->count() ; i ++) {
+ struct mailimap_flag * f;
+ String * customFlag = (String *) customFlags->objectAtIndex(i);
+
+ f = mailimap_flag_new_flag_keyword(strdup(customFlag->UTF8Characters()));
+ mailimap_flag_list_add(flag_list, f);
+ }
+ }
store_att_flags = NULL;
for(clistiter * iter = clist_begin(setList) ; iter != NULL ; iter = clist_next(iter)) {
diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h
index 7a7c2ef0..39e1768f 100755
--- a/src/core/imap/MCIMAPSession.h
+++ b/src/core/imap/MCIMAPSession.h
@@ -81,6 +81,8 @@ namespace mailcore {
virtual void appendMessage(String * folder, Data * messageData, MessageFlag flags,
IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError);
+ virtual void appendMessageWithCustomFlags(String * folder, Data * messageData, MessageFlag flags, Array * customFlags,
+ IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError);
void copyMessages(String * folder, IndexSet * uidSet, String * destFolder,
HashMap ** pUidMapping, ErrorCode * pError);
@@ -120,8 +122,9 @@ namespace mailcore {
IndexSet * uids, uint64_t modseq,
IMAPProgressCallback * progressCallback,
Array * extraHeaders, ErrorCode * pError);
-
- virtual void storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError);
+
+ virtual void storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError);
+ virtual void storeFlagsAndCustomFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError);
virtual void storeLabels(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError);
virtual IndexSet * search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError);
diff --git a/src/objc/imap/MCOIMAPMessage.h b/src/objc/imap/MCOIMAPMessage.h
index 80583d60..bcee7eaf 100644
--- a/src/objc/imap/MCOIMAPMessage.h
+++ b/src/objc/imap/MCOIMAPMessage.h
@@ -44,7 +44,7 @@
@property (nonatomic, assign) MCOMessageFlag originalFlags;
/** Flag keywords of the message, mostly custom flags */
-@property (nonatomic, assign) NSArray * /* NSString */ customFlags;
+@property (nonatomic, copy) NSArray * /* NSString */ customFlags;
/** It's the last modification sequence value of the message synced from the server. See RFC4551 */
@property (nonatomic, assign) uint64_t modSeqValue;
diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h
index deacfe3d..b013c9c0 100755
--- a/src/objc/imap/MCOIMAPSession.h
+++ b/src/objc/imap/MCOIMAPSession.h
@@ -272,6 +272,21 @@
flags:(MCOMessageFlag)flags;
/**
+ Returns an operation to add a message with custom flags to a folder.
+
+ MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone customFlags:@[@"$CNS-Greeting-On"]];
+ [op start:^(NSError * error, uint32_t createdUID) {
+ if (error == nil) {
+ NSLog(@"created message with UID %lu", (unsigned long) createdUID);
+ }
+ }];
+ */
+- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder
+ messageData:(NSData *)messageData
+ flags:(MCOMessageFlag)flags
+ customFlags:(NSArray *)customFlags;
+
+/**
Returns an operation to copy messages to a folder.
MCOIMAPCopyMessagesOperation * op = [session copyMessagesOperationWithFolder:@"INBOX"
@@ -303,20 +318,20 @@
kind:(MCOIMAPStoreFlagsRequestKind)kind
flags:(MCOMessageFlag)flags;
/**
- Returns an operation to change flags of messages.
+ Returns an operation to change flags and custom flags of messages.
- For example: Adds the seen flag to the message with UID 456.
+ For example: Adds the seen flag and $CNS-Greeting-On flag to the message with UID 456.
MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX"
uids:[MCOIndexSet indexSetWithIndex:456]
kind:MCOIMAPStoreFlagsRequestKindAdd
flags:MCOMessageFlagSeen
- customFlags:@["$Forwarded"]];
+ customFlags:@["$CNS-Greeting-On"]];
[op start:^(NSError * error) {
...
}];
*/
-- (MCOIMAPOperation *) storeAllFlagsOperationWithFolder:(NSString *)folder
+- (MCOIMAPOperation *) storeFlagsOperationWithFolder:(NSString *)folder
uids:(MCOIndexSet *)uids
kind:(MCOIMAPStoreFlagsRequestKind)kind
flags:(MCOMessageFlag)flags
diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm
index f489acd7..0b0c638a 100755
--- a/src/objc/imap/MCOIMAPSession.mm
+++ b/src/objc/imap/MCOIMAPSession.mm
@@ -244,9 +244,18 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue,
messageData:(NSData *)messageData
flags:(MCOMessageFlag)flags
{
+ return [self appendMessageOperationWithFolder:folder messageData:messageData flags:flags customFlags:NULL];
+}
+
+- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder
+ messageData:(NSData *)messageData
+ flags:(MCOMessageFlag)flags
+ customFlags:(NSArray *)customFlags
+{
IMAPAppendMessageOperation * coreOp = MCO_NATIVE_INSTANCE->appendMessageOperation([folder mco_mcString],
[messageData mco_mcData],
- (MessageFlag) flags);
+ (MessageFlag) flags,
+ MCO_FROM_OBJC(Array, customFlags));
return MCO_TO_OBJC_OP(coreOp);
}
@@ -340,20 +349,16 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue,
kind:(MCOIMAPStoreFlagsRequestKind)kind
flags:(MCOMessageFlag)flags
{
- IMAPOperation * coreOp = MCO_NATIVE_INSTANCE->storeFlagsOperation([folder mco_mcString],
- MCO_FROM_OBJC(IndexSet, uids),
- (IMAPStoreFlagsRequestKind) kind,
- (MessageFlag) flags);
- return OPAQUE_OPERATION(coreOp);
+ return [self storeFlagsOperationWithFolder:folder uids:uids kind:kind flags:flags customFlags:NULL];
}
-- (MCOIMAPOperation *) storeAllFlagsOperationWithFolder:(NSString *)folder
+- (MCOIMAPOperation *) storeFlagsOperationWithFolder:(NSString *)folder
uids:(MCOIndexSet *)uids
kind:(MCOIMAPStoreFlagsRequestKind)kind
flags:(MCOMessageFlag)flags
customFlags:(NSArray *)customFlags
{
- IMAPOperation * coreOp = MCO_NATIVE_INSTANCE->storeAllFlagsOperation([folder mco_mcString],
+ IMAPOperation * coreOp = MCO_NATIVE_INSTANCE->storeFlagsOperation([folder mco_mcString],
MCO_FROM_OBJC(IndexSet, uids),
(IMAPStoreFlagsRequestKind) kind,
(MessageFlag) flags,