aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-ops.c')
-rw-r--r--mail/mail-ops.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index c283f16ef9..cfcd5564dd 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -207,9 +207,8 @@ do_fetch_mail (gpointer in_data, gpointer op_data, CamelException *ex)
free_info = TRUE;
}
- filter_driver_run (filter, message, info,
- input->destination, FILTER_SOURCE_INCOMING,
- FALSE, ex);
+ filter_driver_run (filter, message, info, input->destination,
+ FILTER_SOURCE_INCOMING, ex);
if (free_info)
camel_message_info_free (info);
@@ -228,6 +227,8 @@ do_fetch_mail (gpointer in_data, gpointer op_data, CamelException *ex)
camel_object_unref (CAMEL_OBJECT (message));
}
+ gtk_object_unref (GTK_OBJECT (filter));
+
camel_folder_sync (folder, FALSE, ex);
camel_folder_thaw (input->destination);
@@ -304,7 +305,7 @@ mail_do_fetch_mail (const gchar *source_url, gboolean keep_on_server,
typedef struct filter_ondemand_input_s
{
- FilterDriver *driver;
+ FilterContext *context;
CamelFolder *source;
CamelFolder *destination;
} filter_ondemand_input_t;
@@ -338,9 +339,9 @@ setup_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
filter_ondemand_input_t *input = (filter_ondemand_input_t *) in_data;
filter_ondemand_data_t *data = (filter_ondemand_data_t *) op_data;
- if (!IS_FILTER_DRIVER (input->driver)) {
+ if (!IS_FILTER_CONTEXT (input->context)) {
camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM,
- _("Bad filter driver specified"));
+ _("Bad filter context specified"));
return;
}
@@ -364,7 +365,7 @@ setup_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
data->empty = FALSE;
- gtk_object_ref (GTK_OBJECT (input->driver));
+ gtk_object_ref (GTK_OBJECT (input->context));
camel_object_ref (CAMEL_OBJECT (input->source));
camel_object_ref (CAMEL_OBJECT (input->destination));
}
@@ -379,6 +380,7 @@ do_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
if (camel_folder_get_message_count (input->source) == 0) {
data->empty = TRUE;
} else {
+ FilterDriver *driver;
GPtrArray *uids;
int i;
@@ -386,6 +388,8 @@ do_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
camel_folder_freeze (input->source);
+ driver = filter_driver_new (input->context, mail_tool_filter_get_folder_func, NULL);
+
for (i = 0; i < uids->len; i++) {
CamelMimeMessage *message;
CamelMessageInfo *info;
@@ -404,8 +408,8 @@ do_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
free_info = TRUE;
}
- filtered = filter_driver_run (input->driver, message, info, NULL,
- FILTER_SOURCE_DEMAND, TRUE, ex);
+ filtered = filter_driver_run (driver, message, info, NULL,
+ FILTER_SOURCE_DEMAND, ex);
if (free_info)
camel_message_info_free (info);
@@ -423,6 +427,8 @@ do_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
camel_object_unref (CAMEL_OBJECT (message));
}
+ gtk_object_unref (GTK_OBJECT (driver));
+
camel_folder_sync (input->source, TRUE, ex);
camel_folder_thaw (input->source);
@@ -446,8 +452,8 @@ cleanup_filter_ondemand (gpointer in_data, gpointer op_data, CamelException *ex)
if (input->destination)
camel_object_unref (CAMEL_OBJECT (input->destination));
- if (input->driver)
- gtk_object_unref (GTK_OBJECT (input->driver));
+ if (input->context)
+ gtk_object_unref (GTK_OBJECT (input->context));
}
static const mail_operation_spec op_filter_ondemand = {
@@ -459,12 +465,12 @@ static const mail_operation_spec op_filter_ondemand = {
};
void
-mail_do_filter_ondemand (FilterDriver *driver, CamelFolder *source, CamelFolder *destination)
+mail_do_filter_ondemand (FilterContext *context, CamelFolder *source, CamelFolder *destination)
{
filter_ondemand_input_t *input;
input = g_new (filter_ondemand_input_t, 1);
- input->driver = driver;
+ input->context = context;
input->source = source;
input->destination = destination;