diff options
author | Hoa V. Dinh <dinh.viet.hoa@gmail.com> | 2014-01-07 12:12:36 -0800 |
---|---|---|
committer | Hoa V. Dinh <dinh.viet.hoa@gmail.com> | 2014-01-07 12:12:36 -0800 |
commit | 451029178a7d612ea64ccc2d8289dcae6bb57db7 (patch) | |
tree | 256a3a7e4f7c08223bd0bc93c7ae9a153cb0983c /src | |
parent | f5514d672632c4ff8ca0912d81c17760e4c39b99 (diff) |
Simplified and fixed implementation of copyMessages (fixes #541)
Diffstat (limited to 'src')
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index 9d09fc28..32cd4ebd 100755 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -158,7 +158,6 @@ static MessageFlag flags_from_lep_att_dynamic(struct mailimap_msg_att_dynamic * #pragma mark set conversion -#if 0 static Array * arrayFromSet(struct mailimap_set * imap_set) { Array * result; @@ -181,6 +180,7 @@ static Array * arrayFromSet(struct mailimap_set * imap_set) return result; } +#if 0 static int compareValuesUnsignedLong(void * value1, void * value2, void * context) { Value * concreteValue1 = (Value *) value1; @@ -1589,35 +1589,14 @@ void IMAPSession::copyMessages(String * folder, IndexSet * uidSet, String * dest uidMapping = HashMap::hashMap(); } - clistiter * src_cur = clist_begin(src_uid->set_list); - clistiter * dest_cur = clist_begin(dest_uid->set_list); - while ((src_cur != NULL) && (dest_cur != NULL)) { - struct mailimap_set_item * src_item = (struct mailimap_set_item *) clist_content(src_cur); - struct mailimap_set_item * dest_item = (struct mailimap_set_item *) clist_content(dest_cur); - uint32_t src_min_value = src_item->set_first; - uint32_t src_max_value = src_item->set_last; - uint32_t dest_min_value = dest_item->set_first; - uint32_t dest_max_value = dest_item->set_last; - if (src_min_value > src_max_value) { - src_min_value = src_item->set_last; - src_max_value = src_item->set_first; - } - if (dest_min_value > dest_max_value) { - dest_min_value = dest_item->set_last; - dest_max_value = dest_item->set_first; - } - uint32_t src_current_uid = src_min_value; - uint32_t dest_current_uid = dest_min_value; - while (src_current_uid <= src_max_value) { - uidMapping->setObjectForKey(Value::valueWithLongLongValue(src_current_uid), Value::valueWithLongLongValue(dest_current_uid)); - src_current_uid ++; - dest_current_uid ++; - } - src_cur = clist_next(src_cur); - dest_cur = clist_next(dest_cur); + Array * srcUidsArray = arrayFromSet(src_uid); + Array * destUidsArray = arrayFromSet(dest_uid); + + for(int i = 0 ; i < srcUidsArray->count() && i < destUidsArray->count() ; i ++) { + uidMapping->setObjectForKey(srcUidsArray->objectAtIndex(i), destUidsArray->objectAtIndex(i)); } } - + if (src_uid != NULL) { mailimap_set_free(src_uid); } |