2006-02-06 [colin] 2.0.0cvs22
authorColin Leroy <colin@colino.net>
Mon, 6 Feb 2006 19:22:08 +0000 (19:22 +0000)
committerColin Leroy <colin@colino.net>
Mon, 6 Feb 2006 19:22:08 +0000 (19:22 +0000)
* src/action.c
* src/filtering.c
* src/filtering.h
* src/folder.c
* src/summaryview.c
Fix filtering via menus and actions

ChangeLog
PATCHSETS
configure.ac
src/action.c
src/filtering.c
src/filtering.h
src/folder.c
src/summaryview.c

index ad7e8d1..d686fa5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-02-06 [colin]     2.0.0cvs22
+
+       * src/action.c
+       * src/filtering.c
+       * src/filtering.h
+       * src/folder.c
+       * src/summaryview.c
+               Fix filtering via menus and actions
+
 2006-02-06 [colin]     2.0.0cvs21
 
        * src/imap.c
index a33f82a..35a8ee8 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.34.2.16 -r 1.34.2.17 po/it.po;  ) > 2.0.0cvs19.patchset
 ( cvs diff -u -r 1.60.2.47 -r 1.60.2.48 src/addressbook.c;  cvs diff -u -r 1.382.2.234 -r 1.382.2.235 src/compose.c;  cvs diff -u -r 1.207.2.87 -r 1.207.2.88 src/folderview.c;  cvs diff -u -r 1.20.2.10 -r 1.20.2.11 src/folderview.h;  cvs diff -u -r 1.8.2.14 -r 1.8.2.15 src/headerview.c;  cvs diff -u -r 1.96.2.93 -r 1.96.2.94 src/textview.c;  cvs diff -u -r 1.83.2.63 -r 1.83.2.64 src/mimeview.c;  cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/prefs_message.c;  cvs diff -u -r 1.395.2.163 -r 1.395.2.164 src/summaryview.c;  cvs diff -u -r 1.5.2.19 -r 1.5.2.20 src/gtk/gtkutils.c;  cvs diff -u -r 1.4.2.16 -r 1.4.2.17 src/gtk/gtkutils.h;  ) > 2.0.0cvs20.patchset
 ( cvs diff -u -r 1.179.2.91 -r 1.179.2.92 src/imap.c;  cvs diff -u -r 1.60.2.9 -r 1.60.2.10 src/filtering.c;  cvs diff -u -r 1.21.2.4 -r 1.21.2.5 src/filtering.h;  cvs diff -u -r 1.149.2.42 -r 1.149.2.43 src/inc.c;  cvs diff -u -r 1.213.2.78 -r 1.213.2.79 src/folder.c;  cvs diff -u -r 1.28.2.12 -r 1.28.2.13 src/mbox.c;  cvs diff -u -r 1.150.2.50 -r 1.150.2.51 src/procmsg.c; cvs diff -u -r 1.60.2.21 -r 1.60.2.22 src/procmsg.h; ) > 2.0.0cvs21.patchset
+( cvs diff -u -r 1.12.2.29 -r 1.12.2.30 src/action.c;  cvs diff -u -r 1.60.2.10 -r 1.60.2.11 src/filtering.c;  cvs diff -u -r 1.21.2.5 -r 1.21.2.6 src/filtering.h;  cvs diff -u -r 1.213.2.79 -r 1.213.2.80 src/folder.c;  cvs diff -u -r 1.395.2.164 -r 1.395.2.165 src/summaryview.c;  ) > 2.0.0cvs22.patchset
index d670cc3..80dc53f 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=21
+EXTRA_VERSION=22
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 0e2bd9f..96bbd40 100644 (file)
@@ -601,9 +601,11 @@ static gboolean execute_filtering_actions(gchar *action, GSList *msglist)
        if (action_list == NULL) return FALSE;
        
        /* apply actions on each message info */
-       for (p = msglist; p && p->data; p = g_slist_next(p))
+       for (p = msglist; p && p->data; p = g_slist_next(p)) {
                filteringaction_apply_action_list(action_list, (MsgInfo *) p->data);
                
+       }
+       filtering_move_and_copy_msgs(msglist);
        for (p = action_list; p; p = g_slist_next(p))
                if (p->data) filteringaction_free(p->data);     
        g_slist_free(action_list);              
index 10bc193..cf64fc6 100644 (file)
@@ -163,6 +163,13 @@ void filteringprop_free(FilteringProp * prop)
        g_free(prop);
 }
 
+void filtering_move_and_copy_msg(MsgInfo *msginfo)
+{
+       GSList *list = g_slist_append(NULL, msginfo);
+       filtering_move_and_copy_msgs(list);
+       g_slist_free(list);
+}
+
 /* move and copy messages by batches to be faster on IMAP */
 void filtering_move_and_copy_msgs(GSList *msgs)
 {
@@ -204,13 +211,14 @@ void filtering_move_and_copy_msgs(GSList *msgs)
                        messages = g_slist_remove(messages, info);
                }
                if (g_slist_length(batch)) {
+                       MsgInfo *info = (MsgInfo *)batch->data;
                        debug_print("%s %d messages to %s\n",
                                is_copy?"copying":"moving",
                                g_slist_length(batch),
                                folder_item_get_path(last_item));
-                       if (is_copy) {
+                       if (is_copy && last_item != info->folder) {
                                folder_item_copy_msgs(last_item, batch);
-                       } else if (is_move) {
+                       } else if (is_move && last_item != info->folder) {
                                if (folder_item_move_msgs(last_item, batch) < 0)
                                        folder_item_move_msgs(
                                                folder_get_default_inbox(), 
index 96ef179..bc30442 100644 (file)
@@ -75,6 +75,7 @@ void prefs_filtering_free(GSList *prefs_filtering);
 
 FilteringProp * filteringprop_copy(FilteringProp *src);
 void filtering_move_and_copy_msgs(GSList *msglist);
+void filtering_move_and_copy_msg(MsgInfo *msginfo);
 extern GSList * filtering_rules;
 extern GSList * pre_global_processing;
 extern GSList * post_global_processing;
index 08f4339..6ae756d 100644 (file)
@@ -3546,12 +3546,15 @@ void folder_item_apply_processing(FolderItem *item)
 
                 /* apply pre global rules */
                filter_message_by_msginfo(pre_global_processing, msginfo);
-                
+                filtering_move_and_copy_msg(msginfo);
+               
                 /* apply rules of the folder */
                filter_message_by_msginfo(processing_list, msginfo);
+               filtering_move_and_copy_msg(msginfo);
 
                 /* apply post global rules */
                filter_message_by_msginfo(post_global_processing, msginfo);
+               filtering_move_and_copy_msg(msginfo);
                 
                procmsg_msginfo_free(msginfo);
        }
index 6916a83..56dc0ff 100644 (file)
@@ -4254,6 +4254,7 @@ static void summary_filter_func(GtkCTree *ctree, GtkCTreeNode *node,
                return;
 
        filter_message_by_msginfo(filtering_rules, msginfo);
+       filtering_move_and_copy_msg(msginfo);
 }
 
 void summary_msginfo_filter_open(FolderItem * item, MsgInfo *msginfo,
@@ -5571,7 +5572,7 @@ static gboolean processing_apply_func(GNode *node, gpointer data)
                        filter_message_by_msginfo(processing, msginfo, NULL);
                        procmsg_msginfo_free(msginfo);
                }
-
+               filtering_move_and_copy_msgs(mlist);
                g_slist_free(mlist);
                
                STATUSBAR_POP(summaryview->mainwin);