diff options
-rw-r--r-- | filter/ChangeLog | 9 | ||||
-rw-r--r-- | filter/filter-driver.c | 52 | ||||
-rw-r--r-- | filter/filter-driver.h | 2 | ||||
-rw-r--r-- | filter/filter-druid.c | 6 | ||||
-rw-r--r-- | filter/filter-xml.c | 3 |
5 files changed, 49 insertions, 23 deletions
diff --git a/filter/ChangeLog b/filter/ChangeLog index b483b6ba84..d88acdccad 100644 --- a/filter/ChangeLog +++ b/filter/ChangeLog @@ -1,5 +1,14 @@ +2000-05-17 NotZed <NotZed@HelixCode.com> + + * filter-druid.c: Fix some html formatting. + 2000-05-16 NotZed <NotZed@HelixCode.com> + * filter-driver.c (filter_driver_run): Delete all processed + messages. This is probably going to slow it down a bit. + (filter_driver_run): Close folders before destroying them *sigh*. + (open_folder): Actually open the folder. Doh. + * filtertypes.xml: Initial filter rules. * filter-xml.c (filter_write_optionset): Save the description diff --git a/filter/filter-driver.c b/filter/filter-driver.c index 94c69c93b0..ce836a16d4 100644 --- a/filter/filter-driver.c +++ b/filter/filter-driver.c @@ -195,6 +195,8 @@ int filter_driver_set_rules(FilterDriver *d, const char *description, const char struct _FilterDriverPrivate *p = _PRIVATE(d); xmlDocPtr desc, filt; + printf("Loading system '%s'\nLoading user '%s'\n", description, filter); + #warning "fix leaks, free xml docs here" desc = xmlParseFile(description); p->rules = filter_load_ruleset(desc); @@ -387,7 +389,7 @@ do_copy(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *d) int i; struct _FilterDriverPrivate *p = _PRIVATE(d); - printf("doing copy on the following messages to:"); + printf("doing copy\n"); for (i=0;i<argc;i++) { if (argv[i]->type == ESEXP_RES_STRING) { char *folder = argv[i]->value.string; @@ -468,12 +470,21 @@ open_folder(FilterDriver *d, const char *folder_url) goto fail; } - g_free(store); - if (!camel_folder_exists(camelfolder, p->ex)) { camel_folder_create(camelfolder, p->ex); } + camel_folder_open(camelfolder, FOLDER_OPEN_RW, p->ex); + + if (camel_exception_get_id (p->ex)) { + printf ("Could not open folder: %s: %s", folder, camel_exception_get_description (p->ex)); + goto fail; + } + + printf("opening folder: %s\n", folder_url); + + g_free(store); + g_hash_table_insert(p->folders, g_strdup(folder_url), camelfolder); return camelfolder; @@ -490,6 +501,8 @@ close_folder(void *key, void *value, void *data) FilterDriver *d = data; struct _FilterDriverPrivate *p = _PRIVATE(d); + printf("closing folder: %s\n", key); + g_free(key); camel_folder_close(f, TRUE, p->ex); gtk_object_unref((GtkObject *)f); @@ -518,6 +531,7 @@ filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox) GString *s, *a; GList *all, *m; +#warning "This must be made mega-robust" p->source = source; /* setup runtime data */ @@ -543,6 +557,8 @@ filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox) while (m) { GList *n = m->next; + printf("matched: %s\n", m->data); + /* for all matching id's, so we can work out what to default */ if (g_hash_table_lookup(p->processed, m->data) == NULL) { g_hash_table_insert(p->processed, g_strdup(m->data), (void *)1); @@ -569,33 +585,35 @@ filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox) options = g_list_next(options); } - /* apply the default of copying to an inbox, if we are given one */ - if (inbox) { - all = camel_folder_get_uid_list(p->source, p->ex); - m = all; - while (m) { - char *uid = m->data; - - if (g_hash_table_lookup(p->processed, uid) == NULL) { - CamelMimeMessage *mm; + /* apply the default of copying to an inbox, if we are given one, and make sure + we delete everything as well */ + all = camel_folder_get_uid_list(p->source, p->ex); + m = all; + while (m) { + char *uid = m->data, *procuid; + CamelMimeMessage *mm; + procuid = g_hash_table_lookup(p->processed, uid); + if (procuid == NULL) { + if (inbox) { printf("Applying default rule to message %s\n", uid); mm = camel_folder_get_message_by_uid(p->source, m->data, p->ex); camel_folder_append_message(inbox, mm, p->ex); + camel_mime_message_set_flags(mm, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED); gtk_object_unref((GtkObject *)mm); - } - m = m->next; + } else { + camel_folder_delete_message_by_uid(p->source, uid, p->ex); } - g_list_free(all); + m = m->next; } + g_list_free(all); g_hash_table_destroy(p->processed); g_hash_table_destroy(p->terminated); - g_hash_table_destroy(p->folders); - close_folders(d); + g_hash_table_destroy(p->folders); return 0; } diff --git a/filter/filter-driver.h b/filter/filter-driver.h index 0d87a4586a..dc670bc85e 100644 --- a/filter/filter-driver.h +++ b/filter/filter-driver.h @@ -49,7 +49,7 @@ guint filter_driver_get_type (void); FilterDriver *filter_driver_new (void); void filter_driver_set_session(FilterDriver *, CamelSession *); -int filter_driver_set_rules(FilterDriver *, const char *description, const char *filter); +int filter_driver_set_rules(FilterDriver *, const char *system, const char *filter); void filter_driver_set_global(FilterDriver *, const char *name, const char *value); /* apply rules to a folder, unmatched messages goto inbox, if not NULL */ diff --git a/filter/filter-druid.c b/filter/filter-druid.c index 5dfd66acca..43e7d1e705 100644 --- a/filter/filter-druid.c +++ b/filter/filter-druid.c @@ -185,9 +185,9 @@ static int display_order[] = { FILTER_XML_ACTION, }; static char *display_pretext[] = { - "<b>For messages matching:</b><br><ul>", - "<b>Unless:</b><br><ul>", - "<b>Perform these actions:</b><br><ul>", + "<b>For messages matching:</b><ul>", + "<b>Unless:</b><ul>", + "<b>Perform these actions:</b><ul>", }; static char *display_posttext[] = { "</ul>", diff --git a/filter/filter-xml.c b/filter/filter-xml.c index ada718778e..1979ab76f7 100644 --- a/filter/filter-xml.c +++ b/filter/filter-xml.c @@ -342,8 +342,7 @@ write_description(xmlDocPtr doc, GList *descl) desc = descl->data; d = xmlNewDocNode(doc, NULL, "description", NULL); - if (desc->type == FILTER_XML_TEXT) - xmlNodeSetContent(d, desc->data); + xmlNodeSetContent(d, desc->data); return d; } |