Implement this, based on code that used to be in mail-ops.c
* mail-session.c (get_filter_driver): Implement this, based on code that used to be in mail-ops.c * mail-ops.c (mail_load_filter_context, setup_filter_driver): Moved into MailSession::get_filter_driver. (filter_get_folder): Moved to mail-session.c (mail_filter_folder, mail_filter_on_demand, mail_fetch_mail, mail_send_mail, mail_send_queue): Remove FilterContext args, use camel_session_get_filter_driver. * mail-send-recv.c (mail_send_receive, mail_receive_uri): Remove FilterContexts svn path=/trunk/; revision=10682
This commit is contained in:
@ -1,3 +1,18 @@
|
||||
2001-07-02 Dan Winship <danw@ximian.com>
|
||||
|
||||
* mail-session.c (get_filter_driver): Implement this, based on
|
||||
code that used to be in mail-ops.c
|
||||
|
||||
* mail-ops.c (mail_load_filter_context, setup_filter_driver):
|
||||
Moved into MailSession::get_filter_driver.
|
||||
(filter_get_folder): Moved to mail-session.c
|
||||
(mail_filter_folder, mail_filter_on_demand, mail_fetch_mail,
|
||||
mail_send_mail, mail_send_queue): Remove FilterContext args, use
|
||||
camel_session_get_filter_driver.
|
||||
|
||||
* mail-send-recv.c (mail_send_receive, mail_receive_uri):
|
||||
Remove FilterContexts
|
||||
|
||||
2001-07-01 Chris Toshok <toshok@ximian.com>
|
||||
|
||||
* subscribe-dialog.c (subscribe_dialog_gui_init): the FolderSearch
|
||||
|
||||
100
mail/mail-ops.c
100
mail/mail-ops.c
@ -49,68 +49,6 @@
|
||||
|
||||
#define d(x) x
|
||||
|
||||
FilterContext *
|
||||
mail_load_filter_context(void)
|
||||
{
|
||||
char *user;
|
||||
char *system;
|
||||
FilterContext *fc;
|
||||
|
||||
user = g_strdup_printf ("%s/filters.xml", evolution_dir);
|
||||
system = EVOLUTION_DATADIR "/evolution/filtertypes.xml";
|
||||
fc = filter_context_new ();
|
||||
rule_context_load ((RuleContext *)fc, system, user);
|
||||
g_free (user);
|
||||
|
||||
return fc;
|
||||
}
|
||||
|
||||
static void
|
||||
setup_filter_driver(CamelFilterDriver *driver, FilterContext *fc, const char *source)
|
||||
{
|
||||
GString *fsearch, *faction;
|
||||
FilterFilter *rule = NULL;
|
||||
|
||||
if (TRUE /* perform_logging */) {
|
||||
char *filename = g_strdup_printf("%s/evolution-filter-log", evolution_dir);
|
||||
/* FIXME: This is a nasty little thing to stop leaking file handles.
|
||||
Needs to be setup elsewhere. */
|
||||
static FILE *logfile = NULL;
|
||||
|
||||
if (logfile == NULL)
|
||||
logfile = fopen(filename, "a+");
|
||||
g_free(filename);
|
||||
if (logfile)
|
||||
camel_filter_driver_set_logfile(driver, logfile);
|
||||
}
|
||||
|
||||
fsearch = g_string_new ("");
|
||||
faction = g_string_new ("");
|
||||
|
||||
while ((rule = (FilterFilter *)rule_context_next_rule((RuleContext *)fc, (FilterRule *)rule, source))) {
|
||||
g_string_truncate (fsearch, 0);
|
||||
g_string_truncate (faction, 0);
|
||||
|
||||
filter_rule_build_code ((FilterRule *)rule, fsearch);
|
||||
filter_filter_build_action (rule, faction);
|
||||
|
||||
camel_filter_driver_add_rule(driver, ((FilterRule *)rule)->name, fsearch->str, faction->str);
|
||||
}
|
||||
|
||||
g_string_free (fsearch, TRUE);
|
||||
g_string_free (faction, TRUE);
|
||||
}
|
||||
|
||||
static CamelFolder *
|
||||
filter_get_folder(CamelFilterDriver *d, const char *uri, void *data, CamelException *ex)
|
||||
{
|
||||
CamelFolder *folder;
|
||||
|
||||
folder = mail_tool_uri_to_folder(uri, ex);
|
||||
|
||||
return folder;
|
||||
}
|
||||
|
||||
/* used for both just filtering a folder + uid's, and for filtering a whole folder */
|
||||
/* used both for fetching mail, and for filtering mail */
|
||||
struct _filter_mail_msg {
|
||||
@ -225,8 +163,7 @@ static struct _mail_msg_op filter_folder_op = {
|
||||
|
||||
void
|
||||
mail_filter_folder(CamelFolder *source_folder, GPtrArray *uids,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel)
|
||||
const char *type, CamelOperation *cancel)
|
||||
{
|
||||
struct _filter_mail_msg *m;
|
||||
|
||||
@ -239,22 +176,17 @@ mail_filter_folder(CamelFolder *source_folder, GPtrArray *uids,
|
||||
m->cancel = cancel;
|
||||
camel_operation_ref (cancel);
|
||||
}
|
||||
|
||||
m->driver = camel_filter_driver_new (filter_get_folder, NULL);
|
||||
setup_filter_driver (m->driver, fc, type);
|
||||
|
||||
e_thread_put (mail_thread_new, (EMsg *)m);
|
||||
|
||||
m->driver = camel_session_get_filter_driver (session, type, NULL);
|
||||
|
||||
e_thread_put(mail_thread_new, (EMsg *)m);
|
||||
}
|
||||
|
||||
/* convenience function for it */
|
||||
void
|
||||
mail_filter_on_demand (CamelFolder *folder, GPtrArray *uids)
|
||||
{
|
||||
FilterContext *fc;
|
||||
|
||||
fc = mail_load_filter_context ();
|
||||
mail_filter_folder (folder, uids, fc, FILTER_SOURCE_INCOMING, NULL);
|
||||
gtk_object_unref (GTK_OBJECT (fc));
|
||||
mail_filter_folder (folder, uids, FILTER_SOURCE_INCOMING, NULL);
|
||||
}
|
||||
|
||||
/* ********************************************************************** */
|
||||
@ -389,8 +321,7 @@ static struct _mail_msg_op fetch_mail_op = {
|
||||
|
||||
/* ouch, a 'do everything' interface ... */
|
||||
void mail_fetch_mail(const char *source, int keep,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel,
|
||||
const char *type, CamelOperation *cancel,
|
||||
CamelFilterGetFolderFunc get_folder, void *get_data,
|
||||
CamelFilterStatusFunc *status, void *status_data,
|
||||
void (*done)(char *source, void *data), void *data)
|
||||
@ -409,8 +340,8 @@ void mail_fetch_mail(const char *source, int keep,
|
||||
m->done = done;
|
||||
m->data = data;
|
||||
|
||||
fm->driver = camel_filter_driver_new(get_folder, get_data);
|
||||
setup_filter_driver(fm->driver, fc, type);
|
||||
fm->driver = camel_session_get_filter_driver (session, type, NULL);
|
||||
camel_filter_driver_set_folder_func (fm->driver, get_folder, get_data);
|
||||
if (status)
|
||||
camel_filter_driver_set_status_func(fm->driver, status, status_data);
|
||||
|
||||
@ -657,7 +588,6 @@ mail_send_mail(const char *uri, CamelMimeMessage *message, void (*done) (char *u
|
||||
{
|
||||
struct _send_mail_msg *m;
|
||||
int id;
|
||||
FilterContext *fc;
|
||||
|
||||
m = mail_msg_new(&send_mail_op, NULL, sizeof(*m));
|
||||
m->destination = g_strdup(uri);
|
||||
@ -668,10 +598,7 @@ mail_send_mail(const char *uri, CamelMimeMessage *message, void (*done) (char *u
|
||||
|
||||
id = m->msg.seq;
|
||||
|
||||
m->driver = camel_filter_driver_new(filter_get_folder, NULL);
|
||||
fc = mail_load_filter_context();
|
||||
setup_filter_driver(m->driver, fc, FILTER_SOURCE_OUTGOING);
|
||||
gtk_object_unref((GtkObject *)fc);
|
||||
m->driver = camel_session_get_filter_driver(session, FILTER_SOURCE_OUTGOING, NULL);
|
||||
|
||||
e_thread_put(mail_thread_new, (EMsg *)m);
|
||||
return id;
|
||||
@ -797,8 +724,7 @@ static struct _mail_msg_op send_queue_op = {
|
||||
/* same interface as fetch_mail, just 'cause i'm lazy today (and we need to run it from the same spot?) */
|
||||
void
|
||||
mail_send_queue(CamelFolder *queue, const char *destination,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel,
|
||||
const char *type, CamelOperation *cancel,
|
||||
CamelFilterGetFolderFunc get_folder, void *get_data,
|
||||
CamelFilterStatusFunc *status, void *status_data,
|
||||
void (*done)(char *destination, void *data), void *data)
|
||||
@ -818,8 +744,8 @@ mail_send_queue(CamelFolder *queue, const char *destination,
|
||||
m->done = done;
|
||||
m->data = data;
|
||||
|
||||
m->driver = camel_filter_driver_new(get_folder, get_data);
|
||||
setup_filter_driver(m->driver, fc, type);
|
||||
m->driver = camel_session_get_filter_driver (session, type, NULL);
|
||||
camel_filter_driver_set_folder_func (m->driver, get_folder, get_data);
|
||||
|
||||
e_thread_put(mail_thread_new, (EMsg *)m);
|
||||
}
|
||||
|
||||
@ -36,14 +36,9 @@ extern "C" {
|
||||
#include "camel/camel-mime-message.h"
|
||||
#include "camel/camel-operation.h"
|
||||
|
||||
#include "filter/filter-context.h"
|
||||
|
||||
#include "evolution-storage.h" /*EvolutionStorage */
|
||||
#include "e-util/e-msgport.h"
|
||||
|
||||
/* utility functions */
|
||||
FilterContext *mail_load_filter_context (void);
|
||||
|
||||
void mail_append_mail (CamelFolder *folder, CamelMimeMessage *message, CamelMessageInfo *info,
|
||||
void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok, void *data),
|
||||
void *data);
|
||||
@ -133,24 +128,21 @@ int mail_update_subfolders (CamelStore *store, EvolutionStorage *storage,
|
||||
|
||||
/* yeah so this is messy, but it does a lot, maybe i can consolidate all user_data's to be the one */
|
||||
void mail_send_queue (CamelFolder *queue, const char *destination,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel,
|
||||
const char *type, CamelOperation *cancel,
|
||||
CamelFilterGetFolderFunc get_folder, void *get_data,
|
||||
CamelFilterStatusFunc *status, void *status_data,
|
||||
void (*done)(char *destination, void *data),
|
||||
void *data);
|
||||
|
||||
void mail_fetch_mail (const char *source, int keep,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel,
|
||||
const char *type, CamelOperation *cancel,
|
||||
CamelFilterGetFolderFunc get_folder, void *get_data,
|
||||
CamelFilterStatusFunc *status, void *status_data,
|
||||
void (*done)(char *source, void *data),
|
||||
void *data);
|
||||
|
||||
void mail_filter_folder (CamelFolder *source_folder, GPtrArray *uids,
|
||||
FilterContext *fc, const char *type,
|
||||
CamelOperation *cancel);
|
||||
const char *type, CamelOperation *cancel);
|
||||
|
||||
/* convenience function for above */
|
||||
void mail_filter_on_demand (CamelFolder *folder, GPtrArray *uids);
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
#include <libgnomeui/gnome-dialog.h>
|
||||
#include <libgnomeui/gnome-window-icon.h>
|
||||
|
||||
#include "filter/filter-context.h"
|
||||
#include "filter/filter-filter.h"
|
||||
#include "camel/camel-filter-driver.h"
|
||||
#include "camel/camel-folder.h"
|
||||
@ -589,7 +588,6 @@ void mail_send_receive(void)
|
||||
{
|
||||
GSList *sources;
|
||||
GList *scan;
|
||||
FilterContext *fc;
|
||||
static GtkWidget *gd = NULL;
|
||||
struct _send_data *data;
|
||||
extern CamelFolder *outbox_folder;
|
||||
@ -609,8 +607,6 @@ void mail_send_receive(void)
|
||||
if (!account || !account->transport)
|
||||
return;
|
||||
|
||||
fc = mail_load_filter_context();
|
||||
|
||||
/* what to do about pop before smtp ?
|
||||
Well, probably hook into receive_done or receive_status on
|
||||
the right pop account, and when it is, then kick off the
|
||||
@ -625,7 +621,7 @@ void mail_send_receive(void)
|
||||
switch(info->type) {
|
||||
case SEND_RECEIVE:
|
||||
mail_fetch_mail(info->uri, info->keep,
|
||||
fc, FILTER_SOURCE_INCOMING,
|
||||
FILTER_SOURCE_INCOMING,
|
||||
info->cancel,
|
||||
receive_get_folder, info,
|
||||
receive_status, info,
|
||||
@ -634,7 +630,7 @@ void mail_send_receive(void)
|
||||
case SEND_SEND:
|
||||
/* todo, store the folder in info? */
|
||||
mail_send_queue(outbox_folder, info->uri,
|
||||
fc, FILTER_SOURCE_OUTGOING,
|
||||
FILTER_SOURCE_OUTGOING,
|
||||
info->cancel,
|
||||
receive_get_folder, info,
|
||||
receive_status, info,
|
||||
@ -647,8 +643,6 @@ void mail_send_receive(void)
|
||||
}
|
||||
scan = scan->next;
|
||||
}
|
||||
|
||||
gtk_object_unref((GtkObject *)fc);
|
||||
}
|
||||
|
||||
struct _auto_data {
|
||||
@ -743,7 +737,6 @@ mail_autoreceive_setup(void)
|
||||
them in to add them. */
|
||||
void mail_receive_uri(const char *uri, int keep)
|
||||
{
|
||||
FilterContext *fc;
|
||||
struct _send_info *info;
|
||||
struct _send_data *data;
|
||||
extern CamelFolder *outbox_folder;
|
||||
@ -777,11 +770,10 @@ void mail_receive_uri(const char *uri, int keep)
|
||||
|
||||
g_hash_table_insert(data->active, info->uri, info);
|
||||
|
||||
fc = mail_load_filter_context();
|
||||
switch(info->type) {
|
||||
case SEND_RECEIVE:
|
||||
mail_fetch_mail(info->uri, info->keep,
|
||||
fc, FILTER_SOURCE_INCOMING,
|
||||
FILTER_SOURCE_INCOMING,
|
||||
info->cancel,
|
||||
receive_get_folder, info,
|
||||
receive_status, info,
|
||||
@ -790,7 +782,7 @@ void mail_receive_uri(const char *uri, int keep)
|
||||
case SEND_SEND:
|
||||
/* todo, store the folder in info? */
|
||||
mail_send_queue(outbox_folder, info->uri,
|
||||
fc, FILTER_SOURCE_OUTGOING,
|
||||
FILTER_SOURCE_OUTGOING,
|
||||
info->cancel,
|
||||
receive_get_folder, info,
|
||||
receive_status, info,
|
||||
@ -801,5 +793,4 @@ void mail_receive_uri(const char *uri, int keep)
|
||||
mail_get_store(info->uri, receive_update_got_store, info);
|
||||
break;
|
||||
}
|
||||
gtk_object_unref((GtkObject *)fc);
|
||||
}
|
||||
|
||||
@ -30,8 +30,12 @@
|
||||
#include <libgnomeui/gnome-dialog-util.h>
|
||||
#include <libgnomeui/gnome-messagebox.h>
|
||||
#include <libgnomeui/gnome-stock.h>
|
||||
#include "camel/camel-filter-driver.h"
|
||||
#include "filter/filter-context.h"
|
||||
#include "filter/filter-filter.h"
|
||||
#include "mail.h"
|
||||
#include "mail-session.h"
|
||||
#include "mail-tools.h"
|
||||
#include "mail-mt.h"
|
||||
|
||||
CamelSession *session;
|
||||
@ -48,6 +52,7 @@ typedef struct _MailSession {
|
||||
|
||||
GHashTable *passwords;
|
||||
gboolean interaction_enabled;
|
||||
FILE *filter_logfile;
|
||||
} MailSession;
|
||||
|
||||
typedef struct _MailSessionClass {
|
||||
@ -66,6 +71,9 @@ static gboolean alert_user (CamelSession *session, CamelSessionAlertType type,
|
||||
static guint register_timeout (CamelSession *session, guint32 interval,
|
||||
CamelTimeoutCallback cb, gpointer camel_data);
|
||||
static gboolean remove_timeout (CamelSession *session, guint handle);
|
||||
static CamelFilterDriver *get_filter_driver (CamelSession *session,
|
||||
const char *type,
|
||||
CamelException *ex);
|
||||
|
||||
|
||||
static char *decode_base64 (char *base64);
|
||||
@ -102,6 +110,7 @@ class_init (MailSessionClass *mail_session_class)
|
||||
camel_session_class->alert_user = alert_user;
|
||||
camel_session_class->register_timeout = register_timeout;
|
||||
camel_session_class->remove_timeout = remove_timeout;
|
||||
camel_session_class->get_filter_driver = get_filter_driver;
|
||||
}
|
||||
|
||||
static CamelType
|
||||
@ -280,6 +289,64 @@ remove_timeout (CamelSession *session, guint handle)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static CamelFolder *
|
||||
get_folder (CamelFilterDriver *d, const char *uri, void *data, CamelException *ex)
|
||||
{
|
||||
return mail_tool_uri_to_folder(uri, ex);
|
||||
}
|
||||
|
||||
static CamelFilterDriver *
|
||||
get_filter_driver (CamelSession *session, const char *type, CamelException *ex)
|
||||
{
|
||||
CamelFilterDriver *driver;
|
||||
RuleContext *fc;
|
||||
GString *fsearch, *faction;
|
||||
FilterRule *rule = NULL;
|
||||
char *user, *system, *filename;
|
||||
|
||||
user = g_strdup_printf ("%s/filters.xml", evolution_dir);
|
||||
system = EVOLUTION_DATADIR "/evolution/filtertypes.xml";
|
||||
fc = (RuleContext *)filter_context_new ();
|
||||
rule_context_load (fc, system, user);
|
||||
g_free (user);
|
||||
|
||||
driver = camel_filter_driver_new ();
|
||||
camel_filter_driver_set_folder_func (driver, get_folder, NULL);
|
||||
|
||||
if (TRUE /* perform_logging FIXME */) {
|
||||
MailSession *ms = (MailSession *)session;
|
||||
|
||||
if (ms->filter_logfile == NULL) {
|
||||
filename = g_strdup_printf ("%s/evolution-filter-log",
|
||||
evolution_dir);
|
||||
ms->filter_logfile = fopen (filename, "a+");
|
||||
g_free (filename);
|
||||
}
|
||||
if (ms->filter_logfile)
|
||||
camel_filter_driver_set_logfile (driver, ms->filter_logfile);
|
||||
}
|
||||
|
||||
fsearch = g_string_new ("");
|
||||
faction = g_string_new ("");
|
||||
|
||||
while ((rule = rule_context_next_rule (fc, rule, type))) {
|
||||
g_string_truncate (fsearch, 0);
|
||||
g_string_truncate (faction, 0);
|
||||
|
||||
filter_rule_build_code (rule, fsearch);
|
||||
filter_filter_build_action ((FilterFilter *)rule, faction);
|
||||
|
||||
camel_filter_driver_add_rule (driver, rule->name,
|
||||
fsearch->str, faction->str);
|
||||
}
|
||||
|
||||
g_string_free (fsearch, TRUE);
|
||||
g_string_free (faction, TRUE);
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (fc));
|
||||
return driver;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
decode_base64 (char *base64)
|
||||
|
||||
Reference in New Issue
Block a user