+2001-05-30 [hoa]
+
+ * src/filtering.[ch]
+ * src/summaryview.c
+ handling summary menu / filter messages
+
+ * src/folder.[ch]
+ add some stuff
+
+ * src/foldersel.c
+ imap folders now appears in list
+
+ * src/mbox_folder.c
+ doesn't crash if destination mail is not writeable
+
2001-05-29 [hoa]
* src/compose.c
info->flags = 0;
filteringaction_update_mark(info);
- val = GPOINTER_TO_INT(g_hash_table_lookup
- (folder_table, dest_folder));
- if (val == 0) {
- folder_item_scan(dest_folder);
- g_hash_table_insert(folder_table, dest_folder,
- GINT_TO_POINTER(1));
- }
- val = GPOINTER_TO_INT(g_hash_table_lookup
- (folder_table, info->folder));
- if (val == 0) {
- folder_item_scan(info->folder);
- g_hash_table_insert(folder_table, info->folder,
- GINT_TO_POINTER(1));
+ if (folder_table) {
+ val = GPOINTER_TO_INT(g_hash_table_lookup
+ (folder_table, dest_folder));
+ if (val == 0) {
+ folder_item_scan(dest_folder);
+ g_hash_table_insert(folder_table, dest_folder,
+ GINT_TO_POINTER(1));
+ }
+ val = GPOINTER_TO_INT(g_hash_table_lookup
+ (folder_table, info->folder));
+ if (val == 0) {
+ folder_item_scan(info->folder);
+ g_hash_table_insert(folder_table, info->folder,
+ GINT_TO_POINTER(1));
+ }
}
return TRUE;
if (folder_item_copy_msg(dest_folder, info) == -1)
return FALSE;
- val = GPOINTER_TO_INT(g_hash_table_lookup
- (folder_table, dest_folder));
- if (val == 0) {
- folder_item_scan(dest_folder);
- g_hash_table_insert(folder_table, dest_folder,
- GINT_TO_POINTER(1));
+ if (folder_table) {
+ val = GPOINTER_TO_INT(g_hash_table_lookup
+ (folder_table, dest_folder));
+ if (val == 0) {
+ folder_item_scan(dest_folder);
+ g_hash_table_insert(folder_table, dest_folder,
+ GINT_TO_POINTER(1));
+ }
}
-
+
return TRUE;
case MATCHING_ACTION_DELETE:
}
}
+void filter_msginfo_move_or_delete(GSList * filtering_list, MsgInfo * info,
+ GHashTable *folder_table)
+{
+ GSList * l;
+
+ if (info == NULL) {
+ g_warning(_("msginfo is not set"));
+ return;
+ }
+
+ for(l = filtering_list ; l != NULL ; l = g_slist_next(l)) {
+ FilteringProp * filtering = (FilteringProp *) l->data;
+
+ switch (filtering->action->type) {
+ case MATCHING_ACTION_MOVE:
+ case MATCHING_ACTION_DELETE:
+ if (filteringprop_apply(filtering, info, folder_table))
+ return;
+ }
+ }
+}
+
void filter_message(GSList * filtering_list, FolderItem * item,
gint msgnum, GHashTable *folder_table)
{
void filter_msginfo(GSList * filtering_list, MsgInfo * info,
GHashTable *folder_table);
+void filter_msginfo_move_or_delete(GSList * filtering_list, MsgInfo * info,
+ GHashTable *folder_table);
void filter_message(GSList * filtering_list, FolderItem * item,
gint msgnum, GHashTable *folder_table);
gint folder_item_remove_msg(FolderItem *item, gint num)
{
Folder *folder;
+ gint result;
g_return_val_if_fail(item != NULL, -1);
g_return_val_if_fail(folder->scan != NULL, -1);
g_return_val_if_fail(folder->remove_msg != NULL, -1);
+ if (folder->finished_remove)
+ folder->finished_remove(folder, item);
+
+ result = folder->remove_msg(folder, item, num);
+
if (item->last_num < 0) folder->scan(folder, item);
- return folder->remove_msg(folder, item, num);
+ if (result == 0){
+ if (folder->finished_remove)
+ folder->finished_remove(folder, item);
+ }
+
+ return result;
}
gint folder_item_remove_all_msg(FolderItem *item)
{
Folder *folder;
+ gint result;
g_return_val_if_fail(item != NULL, -1);
if (item->last_num < 0) folder->scan(folder, item);
- return folder->remove_all_msg(folder, item);
+ result = folder->remove_all_msg(folder, item);
+
+ if (result == 0){
+ if (folder->finished_remove)
+ folder->finished_remove(folder, item);
+ }
+
+ return result;
}
gboolean folder_item_is_msg_changed(FolderItem *item, MsgInfo *msginfo)
folder->remove_all_msg = imap_remove_all_msg;
folder->scan = imap_scan_folder;
folder->create_folder = imap_create_folder;
- folder->remove_folder = imap_remove_folder;
+ folder->remove_folder = imap_remove_folder;
+ /*
+ folder->copy_msg = imap_copy_msg;
+ folder->finished_remove = imap_finished_remove;
+ */
break;
case F_NEWS:
folder->get_msg_list = news_get_article_list;
FolderItem *item,
MsgInfo *info);
void (*finished_copy) (Folder * folder, FolderItem * item);
+ void (*finished_remove) (Folder * folder, FolderItem * item);
};
struct _LocalFolder
folder = FOLDER(list->data);
g_return_if_fail(folder != NULL);
- if ((folder->type != F_MH) && (folder->type != F_MBOX))
+ if ((folder->type != F_MH) && (folder->type != F_MBOX) &&
+ (folder->type != F_IMAP))
continue;
node = gtk_ctree_insert_gnode(GTK_CTREE(ctree), NULL, NULL,
g_free(mbox_path);
*/
+ if (num == -1)
+ return -1;
+
flags_info = g_new0(CopyFlagsInfo, 1);
flags_info->num = num;
flags_info->flags = msginfo->flags;
#include "addr_compl.h"
#include "scoring.h"
#include "prefs_folder_item.h"
+#include "filtering.h"
#include "pixmaps/dir-open.xpm"
#include "pixmaps/mark.xpm"
gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
- gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
- GTK_CTREE_FUNC(summary_filter_func),
- summaryview);
+ if (prefs_filtering == NULL) {
+ gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
+ GTK_CTREE_FUNC(summary_filter_func),
+ summaryview);
+
+ gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
- gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+ }
+ else {
+ summaryview->folder_table = g_hash_table_new(NULL, NULL);
- if (prefs_common.immediate_exec)
- summary_execute(summaryview);
- else
- summary_status_show(summaryview);
+ gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
+ GTK_CTREE_FUNC(summary_filter_func),
+ summaryview);
+
+ gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+
+ folder_item_scan_foreach(summaryview->folder_table);
+ folderview_update_item_foreach(summaryview->folder_table);
+
+ g_hash_table_destroy(summaryview->folder_table);
+ summaryview->folder_table = NULL;
+
+ summary_show(summaryview, summaryview->folder_item, FALSE);
+ }
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
gchar *file;
FolderItem *dest;
- file = procmsg_get_message_file_path(msginfo);
- dest = filter_get_dest_folder(prefs_common.fltlist, file);
- g_free(file);
+ if (prefs_filtering == NULL) {
+ /* old filtering */
+ file = procmsg_get_message_file_path(msginfo);
+ dest = filter_get_dest_folder(prefs_common.fltlist, file);
+ g_free(file);
- if (dest && strcmp2(dest->path, FILTER_NOT_RECEIVE) != 0 &&
- summaryview->folder_item != dest)
- summary_move_row_to(summaryview, node, dest);
+ if (dest && strcmp2(dest->path, FILTER_NOT_RECEIVE) != 0 &&
+ summaryview->folder_item != dest)
+ summary_move_row_to(summaryview, node, dest);
+ }
+ else
+ filter_msginfo_move_or_delete(prefs_filtering, msginfo,
+ summaryview->folder_table);
}
/* callback functions */