From: Christoph Hohmann Date: Mon, 25 Feb 2002 16:56:22 +0000 (+0000) Subject: * src/filtering.[ch] X-Git-Tag: rel_0_7_4~49 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=c70a9c4ee5ca60e547d6fb68c6eca59d281c9869;ds=sidebyside * src/filtering.[ch] * src/inc.c do filtering stuff after all messages have been received 1. drop all messages to .processing 2. scan processing folder for messages 3. filter messages or move to inbox this will also find old messages left in processing after a crash or something like that and we get a real msginfo from folder->get_msg_list and do not have to create our own in filter_message * src/matcher_parser_parse.y remove MIX/MAX warning (reordered includes) --- diff --git a/ChangeLog.claws b/ChangeLog.claws index 5bd9e80ee..d9c1410cf 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,18 @@ +2002-02-15 [christoph] 0.7.2claws14 + + * src/filtering.[ch] + * src/inc.c + do filtering stuff after all messages have been received + 1. drop all messages to .processing + 2. scan processing folder for messages + 3. filter messages or move to inbox + this will also find old messages left in processing after + a crash or something like that and we get a real msginfo + from folder->get_msg_list and do not have to create our + own in filter_message + * src/matcher_parser_parse.y + remove MIX/MAX warning (reordered includes) + 2002-02-25 [paul] 0.7.2claws13 * sync with sylpheed 0.7.2cvs15 diff --git a/configure.in b/configure.in index 7e0449303..ab850ff18 100644 --- a/configure.in +++ b/configure.in @@ -8,7 +8,7 @@ MINOR_VERSION=7 MICRO_VERSION=2 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws13 +EXTRA_VERSION=claws14 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl set $target diff --git a/src/filtering.c b/src/filtering.c index ad1c156b5..8505311a8 100644 --- a/src/filtering.c +++ b/src/filtering.c @@ -355,21 +355,26 @@ static void filter_msginfo(GSList * filtering_list, FolderItem *inbox, *\param info message *\param ftable table with changed folders after call */ -void filter_message_by_msginfo(GSList *flist, MsgInfo *info, GHashTable *ftable) +void filter_message_by_msginfo_with_inbox(GSList *flist, MsgInfo *info, GHashTable *ftable, FolderItem *def_inbox) { FolderItem *inbox; - if (info->folder == NULL) { + if ((def_inbox == NULL)) { debug_print("using default inbox as final destination!\n"); - inbox = folder_get_default_inbox(); + inbox = folder_get_default_inbox(); } else - inbox = info->folder; + inbox = def_inbox; /* * message is already in a folder. the filtering code will * handle duplicate moves and copies. */ - filter_msginfo(flist, inbox, info, ftable); + filter_msginfo(flist, inbox, info, ftable); +} + +void filter_message_by_msginfo(GSList *flist, MsgInfo *info, GHashTable *ftable) +{ + filter_message_by_msginfo_with_inbox(flist, info, ftable, info->folder); } /*! diff --git a/src/filtering.h b/src/filtering.h index de71158e5..3c9124ccd 100644 --- a/src/filtering.h +++ b/src/filtering.h @@ -59,6 +59,11 @@ FilteringProp * filteringprop_parse(gchar **str); void filter_msginfo_move_or_delete(GSList *filtering_list, MsgInfo *info, GHashTable *folder_table); +void filter_message_by_msginfo_with_inbox(GSList *flist, MsgInfo *info, + GHashTable *ftable, + FolderItem *def_inbox); +void filter_message_by_msginfo(GSList *flist, MsgInfo *info, + GHashTable *ftable); void filter_message(GSList *filtering_list, FolderItem *inbox, gint msgnum, GHashTable *folder_table); diff --git a/src/inc.c b/src/inc.c index db6754bae..3aa76aca1 100644 --- a/src/inc.c +++ b/src/inc.c @@ -504,6 +504,47 @@ static gint inc_start(IncProgressDialog *inc_dialog) statusbar_pop_all(); + /* CLAWS: perform filtering actions on dropped message */ + if (global_processing != NULL) { + FolderItem *processing, *inbox; + Folder *folder; + MsgInfo *msginfo; + GSList *msglist, *msglist_element; + + /* CLAWS: get default inbox (perhaps per account) */ + if (pop3_state->ac_prefs->inbox) { + /* CLAWS: get destination folder / mailbox */ + inbox = folder_find_item_from_identifier(pop3_state->ac_prefs->inbox); + if (!inbox) + inbox = folder_get_default_inbox(); + } else + inbox = folder_get_default_inbox(); + + /* get list of messages in processing */ + processing = folder_get_default_processing(); + folder_item_scan(processing); + folder = processing->folder; + msglist = folder->get_msg_list(folder, processing, FALSE); + + /* process messages */ + for(msglist_element = msglist; msglist_element != NULL; msglist_element = msglist_element->next) { + msginfo = (MsgInfo *) msglist_element->data; + /* filter if enabled in prefs or move to inbox if not */ + if(pop3_state->ac_prefs->filter_on_recv) { + filter_message_by_msginfo_with_inbox(global_processing, msginfo, + pop3_state->folder_table, + inbox); + } else { + folder_item_move_msg(inbox, msginfo); + g_hash_table_insert(pop3_state->folder_table, inbox, + GINT_TO_POINTER(1)); + } + procmsg_msginfo_free(msginfo); + } + g_slist_free(msglist); + } + + new_msgs += pop3_state->cur_total_num; if (!prefs_common.scan_all_after_inc) { @@ -923,13 +964,6 @@ gint inc_drop_message(const gchar *file, Pop3State *state) return -1; } - /* CLAWS: perform filtering actions on dropped message */ - if (global_processing != NULL) { - if (state->ac_prefs->filter_on_recv) - filter_message(global_processing, inbox, msgnum, - state->folder_table); - } - return 0; } diff --git a/src/matcher_parser_parse.y b/src/matcher_parser_parse.y index 33a4bfd0c..41d1503f5 100644 --- a/src/matcher_parser_parse.y +++ b/src/matcher_parser_parse.y @@ -1,13 +1,15 @@ %{ +#include "defs.h" + +#include + +#include "intl.h" +#include "utils.h" #include "filtering.h" #include "scoring.h" #include "matcher.h" #include "matcher_parser.h" #include "matcher_parser_lex.h" -#include "intl.h" -#include -#include "defs.h" -#include "utils.h" static gint error = 0; static gint bool_op = 0;