aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter/ChangeLog8
-rw-r--r--filter/filter-driver.c28
2 files changed, 22 insertions, 14 deletions
diff --git a/filter/ChangeLog b/filter/ChangeLog
index c8f664298a..71b5807649 100644
--- a/filter/ChangeLog
+++ b/filter/ChangeLog
@@ -1,3 +1,11 @@
+2000-07-05 Dan Winship <danw@helixcode.com>
+
+ * filter-driver.c (do_delete, do_copy, do_stop,
+ filter_driver_run): Add uids to the "processed" list only after
+ succesfully doing something with them. Fixes the problem where
+ copying a message to a folder that didn't exist would result in it
+ disapearing.
+
2000-07-02 Ettore Perazzoli <ettore@helixcode.com>
* filter-driver.c (filter_driver_new): Don't free the ruleset nor
diff --git a/filter/filter-driver.c b/filter/filter-driver.c
index e42e93acbd..9fb3a78d7a 100644
--- a/filter/filter-driver.c
+++ b/filter/filter-driver.c
@@ -206,12 +206,6 @@ filter_driver_new (const char *system, const char *user, FilterFolderFetcher fet
} else
p->options = filter_load_optionset(filt, p->rules);
-#warning "Zucchi: is this safe? Doesn't seem to cause problems..."
-#if 0
- filter_load_ruleset_free (p->rules);
- xmlFreeDoc (desc);
-#endif
-
return new;
}
@@ -369,7 +363,10 @@ do_delete(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *
while (m) {
printf(" %s\n", (char *)m->data);
- camel_folder_set_message_flags (p->source, m->data, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED, p->ex);
+ camel_folder_delete_message (p->source, m->data, p->ex);
+ if (g_hash_table_lookup(p->processed, m->data) == NULL) {
+ g_hash_table_insert(p->processed, g_strdup(m->data), (void *)1);
+ }
m = m->next;
}
@@ -423,6 +420,11 @@ do_copy(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *d)
camel_folder_append_message(outbox, mm, p->ex);
gtk_object_unref((GtkObject *)mm);
+ if (!camel_exception_is_set(p->ex) &&
+ g_hash_table_lookup(p->processed, m->data) == NULL) {
+ g_hash_table_insert(p->processed, g_strdup(m->data), (void *)1);
+ }
+
printf(" %s\n", (char *)m->data);
m = m->next;
}
@@ -443,6 +445,9 @@ do_stop(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *d)
while (m) {
printf(" %s\n", (char *)m->data);
g_hash_table_insert(p->terminated, g_strdup(m->data), (void *)1);
+ if (g_hash_table_lookup(p->processed, m->data) == NULL) {
+ g_hash_table_insert(p->processed, g_strdup(m->data), (void *)1);
+ }
m = m->next;
}
return NULL;
@@ -551,11 +556,6 @@ filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox)
printf("matched: %s\n", (char *) 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);
- }
-
if (g_hash_table_lookup(p->terminated, m->data)) {
printf("removing terminated message %s\n", (char *)m->data);
p->matches = g_list_remove_link(p->matches, m);
@@ -589,10 +589,10 @@ filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox)
if (inbox) {
printf("Applying default rule to message %s\n", uid);
- mm = camel_folder_get_message(p->source, all->pdata[i], p->ex);
+ mm = camel_folder_get_message(p->source, uid, p->ex);
camel_folder_append_message(inbox, mm, p->ex);
gtk_object_unref((GtkObject *)mm);
- camel_folder_set_message_flags(p->source, all->pdata[i], CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED, p->ex);
+ camel_folder_delete_message(p->source, uid, p->ex);
}
} else {
camel_folder_delete_message(p->source, uid, p->ex);