From fcb417604c8715dadd5d2fdb10a298869b993f7c Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Mon, 31 Mar 2008 07:00:48 +0000 Subject: [PATCH] 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 --- ChangeLog | 7 +++++++ PATCHSETS | 1 + configure.ac | 2 +- src/folder.c | 22 +++++++++++++++++----- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ce0bfa75..19cee919d 100644 --- 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 diff --git a/PATCHSETS b/PATCHSETS index 6015cc6a3..7345f552c 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -3281,3 +3281,4 @@ ( 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 diff --git a/configure.ac b/configure.ac index f634fafc8..955deb0d7 100644 --- a/configure.ac +++ b/configure.ac @@ -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= diff --git a/src/folder.c b/src/folder.c index 02e4b4a05..1847608fb 100644 --- a/src/folder.c +++ b/src/folder.c @@ -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(); -- 2.25.1