2008-03-31 [colin] 3.3.1cvs47
authorColin Leroy <colin@colino.net>
Mon, 31 Mar 2008 07:00:48 +0000 (07:00 +0000)
committerColin Leroy <colin@colino.net>
Mon, 31 Mar 2008 07:00:48 +0000 (07:00 +0000)
* src/folder.c
Fix bug 1553, 'File lock not respected'
Regression due to the implementation of
deletion batching

ChangeLog
PATCHSETS
configure.ac
src/folder.c

index 3ce0bfa75084d9fc91aa06dd0ae5d8fe18c06588..19cee919d4818213fb945f8192bc7b2cc2ec126d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-31 [colin]     3.3.1cvs47
+
+       * src/folder.c
+               Fix bug 1553, 'File lock not respected'
+               Regression due to the implementation of
+               deletion batching
+
 2008-03-31 [colin]     3.3.1cvs46
 
        * src/mainwindow.c
index 6015cc6a35c59d1e67e91c5e32d4035165f74233..7345f552c08556350b63b8eb869e20c9cc5029a4 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.5.2.10 -r 1.5.2.11 src/common/prefs.c;  cvs diff -u -r 1.1.4.8 -r 1.1.4.9 src/common/xmlprops.c;  ) > 3.3.1cvs44.patchset
 ( cvs diff -u -r 1.105.2.129 -r 1.105.2.130 src/prefs_account.c;  cvs diff -u -r 1.204.2.162 -r 1.204.2.163 src/prefs_common.c;  cvs diff -u -r 1.52.2.61 -r 1.52.2.62 src/prefs_folder_item.c;  cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/prefs_quote.c;  cvs diff -u -r 1.8.2.32 -r 1.8.2.33 src/quote_fmt.c;  cvs diff -u -r 1.5.12.17 -r 1.5.12.18 src/quote_fmt.h;  ) > 3.3.1cvs45.patchset
 ( cvs diff -u -r 1.274.2.238 -r 1.274.2.239 src/mainwindow.c;  ) > 3.3.1cvs46.patchset
+( cvs diff -u -r 1.213.2.179 -r 1.213.2.180 src/folder.c;  ) > 3.3.1cvs47.patchset
index f634fafc80e12e7ce759c59a8c9006b41cd22151..955deb0d7d61c06667ec7e99034d46f4e7926181 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=3
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=46
+EXTRA_VERSION=47
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 02e4b4a054eeb45594dc84596a98565035fa2ad4..1847608fb55b80061df428c4cb49c95d21a21d21 100644 (file)
@@ -3568,6 +3568,7 @@ gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
 {
        Folder *folder;
        gint ret = 0;
+       GSList *real_list = NULL, *cur = NULL;
 
        g_return_val_if_fail(item != NULL, -1);
        folder = item->folder;
@@ -3578,24 +3579,35 @@ gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
        if (!item->cache) folder_item_read_cache(item);
 
        folder_item_update_freeze();
+       
+       /* filter out locked mails */
+       for (cur = msglist; cur; cur = cur->next) {
+               MsgInfo *info = (MsgInfo *)cur->data;
+               if (!MSG_IS_LOCKED(info->flags))
+                       real_list = g_slist_prepend(real_list, info);
+       }
+
+       real_list = g_slist_reverse(real_list);
+
        if (item->folder->klass->remove_msgs) {
                ret = item->folder->klass->remove_msgs(item->folder,
                                                        item,
-                                                       msglist,
+                                                       real_list,
                                                        NULL);
        }
-       while (ret == 0 && msglist != NULL) {
-               MsgInfo *msginfo = (MsgInfo *)msglist->data;
+       while (ret == 0 && real_list != NULL) {
+               MsgInfo *msginfo = (MsgInfo *)real_list->data;
                if (msginfo && MSG_IS_LOCKED(msginfo->flags)) {
-                       msglist = msglist->next;
+                       real_list = real_list->next;
                        continue;
                }
                if (!item->folder->klass->remove_msgs)
                        ret = folder_item_remove_msg(item, msginfo->msgnum);
                if (ret != 0) break;
                msgcache_remove_msg(item->cache, msginfo->msgnum);
-               msglist = msglist->next;
+               real_list = real_list->next;
        }
+       g_slist_free(real_list);
        folder_item_scan_full(item, FALSE);
        folder_item_update_thaw();
        inc_unlock();