diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2003-11-01 14:01:55 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2003-11-01 14:01:55 +0800 |
commit | 2b8a138befe06bfeee85f8b1ccb153013b4f54f6 (patch) | |
tree | 2e332a4e6f4d0bae71fd627fa05a9980cfc847d9 /mail/mail-autofilter.c | |
parent | 2dfb2624476858863b56106b394cdc8c3b08dfe3 (diff) | |
download | gsoc2013-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.c | 43 |
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 * |