aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoa V. Dinh <dinh.viet.hoa@gmail.com>2014-01-07 12:12:36 -0800
committerGravatar Hoa V. Dinh <dinh.viet.hoa@gmail.com>2014-01-07 12:12:36 -0800
commit451029178a7d612ea64ccc2d8289dcae6bb57db7 (patch)
tree256a3a7e4f7c08223bd0bc93c7ae9a153cb0983c
parentf5514d672632c4ff8ca0912d81c17760e4c39b99 (diff)
Simplified and fixed implementation of copyMessages (fixes #541)
-rwxr-xr-xsrc/core/imap/MCIMAPSession.cc35
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);
}