diff options
Diffstat (limited to 'mail/mail-autofilter.c')
-rw-r--r-- | mail/mail-autofilter.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/mail/mail-autofilter.c b/mail/mail-autofilter.c index fe48b1777a..8084b226f1 100644 --- a/mail/mail-autofilter.c +++ b/mail/mail-autofilter.c @@ -223,6 +223,29 @@ rule_match_mlist(RuleContext *context, FilterRule *rule, const char *mlist) } static void +rule_from_address (FilterRule *rule, RuleContext *context, CamelInternetAddress* addr, int flags) +{ + rule->grouping = FILTER_GROUP_ANY; + + if (flags & AUTO_FROM) { + const char *name, *address; + char *namestr; + + camel_internet_address_get (addr, 0, &name, &address); + rule_add_sender (context, rule, address); + if (name == NULL || name[0] == '\0') + name = address; + namestr = g_strdup_printf(_("Mail from %s"), name); + filter_rule_set_name (rule, namestr); + g_free (namestr); + } + if (flags & AUTO_TO) { + rule_match_recipients (context, rule, addr); + } + +} + +static void rule_from_message (FilterRule *rule, RuleContext *context, CamelMimeMessage *msg, int flags) { CamelInternetAddress *addr; @@ -293,6 +316,20 @@ em_vfolder_rule_from_message (EMVFolderContext *context, CamelMimeMessage *msg, } FilterRule * +em_vfolder_rule_from_address (EMVFolderContext *context, CamelInternetAddress *addr, int flags, const char *source) +{ + EMVFolderRule *rule; + char *euri = em_uri_from_camel(source); + + rule = em_vfolder_rule_new (); + em_vfolder_rule_add_source (rule, euri); + rule_from_address ((FilterRule *)rule, (RuleContext *)context, addr, flags); + g_free(euri); + + return (FilterRule *)rule; +} + +FilterRule * filter_rule_from_message (EMFilterContext *context, CamelMimeMessage *msg, int flags) { EMFilterRule *rule; |