2006-02-06 [colin] 2.0.0cvs26
[claws.git] / src / folder.c
index 6ae756d53973afa035c03dab8813755b22cec9e0..e3628e27bcd582ab60965478bf668f69a7a47113 100644 (file)
@@ -1861,7 +1861,7 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                            (item->folder->account != NULL) && 
                            (item->folder->account->filter_on_recv) &&
                            procmsg_msginfo_filter(msginfo))
-                               to_filter = g_slist_append(to_filter, msginfo);
+                               to_filter = g_slist_prepend(to_filter, msginfo);
                        else
                                exists_list = g_slist_prepend(exists_list, msginfo);
                }
@@ -3528,6 +3528,10 @@ void folder_item_apply_processing(FolderItem *item)
        g_return_if_fail(item->no_select == FALSE);     
        processing_list = item->prefs->processing;
 
+       if (!pre_global_processing && !processing_list
+       &&  !post_global_processing)
+               return;
+
        folder_item_update_freeze();
 
        mlist = folder_item_get_msg_list(item);
@@ -3546,16 +3550,19 @@ 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);
                 
+       }
+       if (pre_global_processing || processing_list
+           || post_global_processing)
+               filtering_move_and_copy_msgs(mlist);
+       for (cur = mlist ; cur != NULL ; cur = cur->next) {
+               MsgInfo * msginfo;
                procmsg_msginfo_free(msginfo);
        }
        g_slist_free(mlist);