aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-driver.c
diff options
context:
space:
mode:
authorPeter Williams <peterw@src.gnome.org>2000-08-18 01:42:21 +0800
committerPeter Williams <peterw@src.gnome.org>2000-08-18 01:42:21 +0800
commit7cf30eb79276d4f255c1d603e2c203bb054cf50e (patch)
tree687a003be1d0fbcc0ff06eccd900a04c38ad7aa0 /filter/filter-driver.c
parentb3f1da4f99afadb51862fe732d66b72437224b99 (diff)
downloadgsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.gz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.bz2
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.lz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.xz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.zst
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.zip
Filtering on demand! booyeah!
svn path=/trunk/; revision=4864
Diffstat (limited to 'filter/filter-driver.c')
-rw-r--r--filter/filter-driver.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/filter/filter-driver.c b/filter/filter-driver.c
index e22fc7235b..e3e1c7df5e 100644
--- a/filter/filter-driver.c
+++ b/filter/filter-driver.c
@@ -37,11 +37,14 @@
#include "filter-filter.h"
#include "e-util/e-sexp.h"
+#define d(x)
+
/* mail-thread filter input data type */
typedef struct {
FilterDriver *driver;
CamelFolder *source;
CamelFolder *inbox;
+ enum _filter_source_t sourcetype;
gboolean self_destruct;
gpointer unhook_func;
gpointer unhook_data;
@@ -414,6 +417,7 @@ static const mail_operation_spec op_filter_mail =
void
filter_driver_run (FilterDriver *d, CamelFolder *source, CamelFolder *inbox,
+ enum _filter_source_t sourcetype,
gboolean self_destruct, gpointer unhook_func, gpointer unhook_data)
{
filter_mail_input_t *input;
@@ -422,6 +426,7 @@ filter_driver_run (FilterDriver *d, CamelFolder *source, CamelFolder *inbox,
input->driver = d;
input->source = source;
input->inbox = inbox;
+ input->sourcetype = sourcetype;
input->self_destruct = self_destruct;
input->unhook_func = unhook_func;
input->unhook_data = unhook_data;
@@ -502,15 +507,20 @@ do_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex)
rule = NULL;
while ( (rule = (FilterFilter *)rule_context_next_rule((RuleContext *)p->context, (FilterRule *)rule)) ) {
+
+ if (((FilterRule *)rule)->source != input->sourcetype) {
+ d(printf("skipping rule %s - wrong source type (%d %d)\n", ((FilterRule *)rule)->name,
+ ((FilterRule *)rule)->source, input->sourcetype));
+ continue;
+ }
+
g_string_truncate(s, 0);
g_string_truncate(a, 0);
filter_rule_build_code((FilterRule *)rule, s);
filter_filter_build_action(rule, a);
-#if 0
- printf("applying rule %s\n action %s\n", s->str, a->str);
-#endif
+ d(printf("applying rule %s\n action %s\n", s->str, a->str));
mail_tool_camel_lock_up ();
p->matches = camel_folder_search_by_expression (p->source, s->str, p->ex);
@@ -574,14 +584,16 @@ do_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex)
copies = tmp;
}
- if (!procuid) {
+ if (!procuid && inbox != source) {
printf("Applying default rule to message %s\n", uid);
camel_folder_append_message(inbox, mm, info, p->ex);
}
camel_object_unref (CAMEL_OBJECT (mm));
}
- camel_folder_delete_message (p->source, uid);
+
+ if (inbox != source)
+ camel_folder_delete_message (p->source, uid);
mail_tool_camel_lock_down ();
}