aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-autofilter.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2003-11-01 14:01:55 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2003-11-01 14:01:55 +0800
commit2b8a138befe06bfeee85f8b1ccb153013b4f54f6 (patch)
tree2e332a4e6f4d0bae71fd627fa05a9980cfc847d9 /mail/mail-autofilter.c
parent2dfb2624476858863b56106b394cdc8c3b08dfe3 (diff)
downloadgsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar.gz
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar.bz2
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar.lz
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar.xz
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.tar.zst
gsoc2013-evolution-2b8a138befe06bfeee85f8b1ccb153013b4f54f6.zip
setup filter-on-thread and vfolder-on-thread.
2003-11-01 Jeffrey Stedfast <fejj@ximian.com> * em-folder-view.c: setup filter-on-thread and vfolder-on-thread. * mail-autofilter.c (rule_from_message): handle AUTO_THREAD (rule_match_thread): new function to setup a filter on a msgid svn path=/trunk/; revision=23158
Diffstat (limited to 'mail/mail-autofilter.c')
-rw-r--r--mail/mail-autofilter.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/mail/mail-autofilter.c b/mail/mail-autofilter.c
index 9e98758700..dbf2002a3d 100644
--- a/mail/mail-autofilter.c
+++ b/mail/mail-autofilter.c
@@ -222,6 +222,25 @@ rule_match_mlist(RuleContext *context, FilterRule *rule, const char *mlist)
}
static void
+rule_match_thread (RuleContext *context, FilterRule *rule, const char *msgid)
+{
+ FilterElement *element;
+ FilterPart *part;
+
+ if (msgid[0] == 0)
+ return;
+
+ part = rule_context_create_part (context, "header");
+ filter_rule_add_part (rule, part);
+
+ element = filter_part_find_element (part, "header-type");
+ filter_option_set_current ((FilterOption *) element, "contains");
+
+ element = filter_part_find_element (part, "header");
+ filter_input_set_value ((FilterInput *) element, msgid);
+}
+
+static void
rule_from_message (FilterRule *rule, RuleContext *context, CamelMimeMessage *msg, int flags)
{
CamelInternetAddress *addr;
@@ -273,6 +292,30 @@ rule_from_message (FilterRule *rule, RuleContext *context, CamelMimeMessage *msg
}
g_free(mlist);
}
+ if (flags & AUTO_THREAD) {
+ char *name, *msgid = nULL;
+ const char *refs = NULL;
+
+ if (!(refs = camel_medium_get_header ((CamelMedium *) msg, "References"))) {
+ if (!(refs = camel_medium_get_header ((CamelMedium *) msg, "In-Reply-To")))
+ msgid = camel_message_get_message_id (msg);
+ }
+
+ if (refs || msgid) {
+ struct _camel_header_references *r = NULL;
+
+ if (refs) {
+ r = camel_header_references_decode (refs);
+ msgid = r->id;
+ }
+
+ rule_match_thread (context, rule, msgid);
+ name = g_strdup_printf (_("Replies to %s"), msgid);
+
+ if (r)
+ camel_header_references_list_clear (&r);
+ }
+ }
}
FilterRule *