diff options
-rw-r--r-- | mail/ChangeLog | 16 | ||||
-rw-r--r-- | mail/folder-browser.c | 50 | ||||
-rw-r--r-- | mail/folder-browser.h | 1 | ||||
-rw-r--r-- | mail/mail-autofilter.c | 84 | ||||
-rw-r--r-- | mail/mail-autofilter.h | 8 | ||||
-rw-r--r-- | mail/mail-vfolder.c | 11 | ||||
-rw-r--r-- | mail/mail-vfolder.h | 1 |
7 files changed, 114 insertions, 57 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 4863495dac..2c5040faaa 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,21 @@ 2001-02-23 Not Zed <NotZed@Ximian.com> + * mail-vfolder.c (vfolder_gui_add_from_mlist): Rule to add mlist + vfolder. + + * mail-autofilter.c (filter_gui_add_for_mailing_list): Removed. + (rule_from_mlist): Build a generic match rule from an mlist. + (vfolder_rule_from_mlist): Setup the vfolder rule for an mlist. + (filter_rule_from_mlist): Setup a filter rule fro an mlist. + (filter_gui_add_from_mlist): GUI thingy to do the work. + + * folder-browser.c (on_right_click): Added vfolder on mailing list + to filter menu. + (on_right_click): Use header_raw_check_mailign_list instead of + mlist magic to get the mailing list name. + (filter_mlist): Changed to use new add_from_mlist() call. + (vfolder_mlist): New function for vfolder from mlist. + * mail-send-recv.c (build_dialogue): Only allow downloading if the source is enabled at this time. (mail_autoreceive_setup): Check for enabled sources before setting diff --git a/mail/folder-browser.c b/mail/folder-browser.c index b8a7624d92..296a9ba30a 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -496,6 +496,20 @@ vfolder_recipient (GtkWidget *w, FolderBrowser *fb) } void +vfolder_mlist (GtkWidget *w, FolderBrowser *fb) +{ + char *name; + + g_return_if_fail (fb->mail_display->current_message != NULL); + + name = header_raw_check_mailing_list(&((CamelMimePart *)fb->mail_display->current_message)->headers); + if (name) { + vfolder_gui_add_from_mlist(fb->mail_display->current_message, name, fb->uri); + g_free(name); + } +} + +void filter_subject (GtkWidget *w, FolderBrowser *fb) { filter_gui_add_from_message (fb->mail_display->current_message, AUTO_SUBJECT); @@ -517,19 +531,14 @@ void filter_mlist (GtkWidget *w, FolderBrowser *fb) { char *name; - char *header_value; - const char *header_name; - + g_return_if_fail (fb->mail_display->current_message != NULL); - name = mail_mlist_magic_detect_list (fb->mail_display->current_message, &header_name, &header_value); - if (name == NULL) - return; - - filter_gui_add_for_mailing_list (fb->mail_display->current_message, name, header_name, header_value); - - g_free (name); - g_free (header_value); + name = header_raw_check_mailing_list(&((CamelMimePart *)fb->mail_display->current_message)->headers); + if (name) { + filter_gui_add_from_mlist(name); + g_free(name); + } } void @@ -648,14 +657,17 @@ on_right_click (ETable *table, gint row, gint col, GdkEvent *event, FolderBrowse CamelMessageInfo *info; GPtrArray *uids; int enable_mask = 0; - int last_item, i; + int i; char *mailing_list_name = NULL; char *subject_match = NULL, *from_match = NULL; +#define MLIST_VFOLDER (3) +#define MLIST_FILTER (8) EPopupMenu filter_menu[] = { { _("VFolder on Subject"), NULL, GTK_SIGNAL_FUNC (vfolder_subject), NULL, 2 }, { _("VFolder on Sender"), NULL, GTK_SIGNAL_FUNC (vfolder_sender), NULL, 2 }, { _("VFolder on Recipients"), NULL, GTK_SIGNAL_FUNC (vfolder_recipient), NULL, 2 }, + { _("VFolder on Mailing List"), NULL, GTK_SIGNAL_FUNC (vfolder_mlist), NULL, 66 }, { "", NULL, GTK_SIGNAL_FUNC (NULL), NULL, 0 }, { _("Filter on Subject"), NULL, GTK_SIGNAL_FUNC (filter_subject), NULL, 2 }, { _("Filter on Sender"), NULL, GTK_SIGNAL_FUNC (filter_sender), NULL, 2 }, @@ -692,8 +704,6 @@ on_right_click (ETable *table, gint row, gint col, GdkEvent *event, FolderBrowse { NULL, NULL, NULL, NULL, 0 } }; - last_item = (sizeof (filter_menu) / sizeof (*filter_menu)) - 2; - if (fb->reconfigure) { enable_mask = 0; goto display_menu; @@ -709,7 +719,7 @@ on_right_click (ETable *table, gint row, gint col, GdkEvent *event, FolderBrowse const char *subject, *real, *addr; const CamelInternetAddress *from; - mailing_list_name = mail_mlist_magic_detect_list (fb->mail_display->current_message, NULL, NULL); + mailing_list_name = header_raw_check_mailing_list(&((CamelMimePart *)fb->mail_display->current_message)->headers); if ((subject = camel_mime_message_get_subject(fb->mail_display->current_message)) && (subject = strip_re(subject)) @@ -774,16 +784,18 @@ display_menu: /* generate the "Filter on Mailing List menu item name */ if (mailing_list_name == NULL) { enable_mask |= 64; - filter_menu[last_item].name = g_strdup (_("Filter on Mailing List")); + filter_menu[MLIST_FILTER].name = g_strdup (_("Filter on Mailing List")); + filter_menu[MLIST_VFOLDER].name = g_strdup (_("VFolder on Mailing List")); } else { - filter_menu[last_item].name = g_strdup_printf (_("Filter on Mailing List (%s)"), - mailing_list_name); + filter_menu[MLIST_FILTER].name = g_strdup_printf (_("Filter on Mailing List (%s)"), mailing_list_name); + filter_menu[MLIST_VFOLDER].name = g_strdup_printf (_("VFolder on Mailing List (%s)"), mailing_list_name); g_free(mailing_list_name); } e_popup_menu_run (menu, event, enable_mask, 0, fb); - g_free(filter_menu[last_item].name); + g_free(filter_menu[MLIST_FILTER].name); + g_free(filter_menu[MLIST_VFOLDER].name); return TRUE; } diff --git a/mail/folder-browser.h b/mail/folder-browser.h index d6df42f4e4..04ddaae110 100644 --- a/mail/folder-browser.h +++ b/mail/folder-browser.h @@ -85,6 +85,7 @@ void folder_browser_clear_search (FolderBrowser *fb); void vfolder_subject (GtkWidget *w, FolderBrowser *fb); void vfolder_sender (GtkWidget *w, FolderBrowser *fb); void vfolder_recipient (GtkWidget *w, FolderBrowser *fb); +void vfolder_mlist (GtkWidget *w, FolderBrowser *fb); void filter_subject (GtkWidget *w, FolderBrowser *fb); void filter_sender (GtkWidget *w, FolderBrowser *fb); diff --git a/mail/mail-autofilter.c b/mail/mail-autofilter.c index 8dea249bb2..ca38085ebf 100644 --- a/mail/mail-autofilter.c +++ b/mail/mail-autofilter.c @@ -265,6 +265,52 @@ filter_rule_from_message(FilterContext *context, CamelMimeMessage *msg, int flag return (FilterRule *)rule; } +static void +rule_from_mlist(FilterRule *rule, RuleContext *context, const char *mlist) +{ + FilterPart *part; + FilterElement *element; + char *rule_name; + + part = rule_context_create_part(context, "mlist"); + filter_rule_add_part(rule, part); + + element = filter_part_find_element(part, "mlist-type"); + filter_option_set_current((FilterOption *)element, "is"); + + element = filter_part_find_element (part, "mlist"); + filter_input_set_value((FilterInput *)element, mlist); + + rule_name = g_strdup_printf(_("%s mailing list"), mlist); + filter_rule_set_name((FilterRule *) rule, rule_name); + g_free (rule_name); +} + +FilterRule * +vfolder_rule_from_mlist(VfolderContext *context, const char *mlist, const char *source) +{ + VfolderRule *rule; + + rule = vfolder_rule_new (); + vfolder_rule_add_source (rule, source); + rule_from_mlist((FilterRule *)rule, (RuleContext *)context, mlist); + + return (FilterRule *)rule; +} + +FilterRule * +filter_rule_from_mlist(FilterContext *context, const char *mlist) +{ + FilterFilter *rule; + + rule = filter_filter_new (); + rule_from_mlist((FilterRule *)rule, (RuleContext *)context, mlist); + + /* should we define the default action? */ + + return (FilterRule *)rule; +} + void filter_gui_add_from_message (CamelMimeMessage *msg, int flags) { @@ -290,50 +336,22 @@ filter_gui_add_from_message (CamelMimeMessage *msg, int flags) } void -filter_gui_add_for_mailing_list (CamelMimeMessage *msg, - const char *list_name, - const char *header_name, - const char *header_value) +filter_gui_add_from_mlist (const char *mlist) { FilterContext *fc; - FilterRule *rule; - FilterPart *part; - FilterElement *element; char *userrules, *systemrules; - char *rule_name; + FilterRule *rule; extern char *evolution_dir; - - g_return_if_fail (msg != NULL); - g_return_if_fail (CAMEL_IS_MIME_MESSAGE (msg)); - g_return_if_fail (list_name != NULL); - g_return_if_fail (header_name != NULL); - g_return_if_fail (header_value != NULL); - + fc = filter_context_new (); userrules = g_strdup_printf ("%s/filters.xml", evolution_dir); systemrules = g_strdup_printf ("%s/evolution/filtertypes.xml", EVOLUTION_DATADIR); rule_context_load ((RuleContext *)fc, systemrules, userrules); + rule = filter_rule_from_mlist(fc, mlist); - rule = (FilterRule *) filter_filter_new (); - - part = rule_context_create_part ((RuleContext *)fc, "header"); - filter_rule_add_part ((FilterRule *)rule, part); - - element = filter_part_find_element (part, "header-field"); - filter_input_set_value ((FilterInput *)element, header_name); - - element = filter_part_find_element (part, "header-type"); - filter_option_set_current ((FilterOption *)element, "is"); - - element = filter_part_find_element (part, "word"); - filter_input_set_value ((FilterInput *)element, header_value); - - rule_name = g_strdup_printf (_("%s mailing list"), list_name); - filter_rule_set_name ((FilterRule *) rule, rule_name); - g_free (rule_name); + filter_rule_set_source (rule, FILTER_SOURCE_INCOMING); rule_context_add_rule_gui ((RuleContext *)fc, rule, _("Add Filter Rule"), userrules); - g_free (userrules); g_free (systemrules); gtk_object_unref (GTK_OBJECT (fc)); diff --git a/mail/mail-autofilter.h b/mail/mail-autofilter.h index 5787b74c7c..ab36b68d33 100644 --- a/mail/mail-autofilter.h +++ b/mail/mail-autofilter.h @@ -39,15 +39,13 @@ enum { FilterRule *vfolder_rule_from_message(VfolderContext *context, CamelMimeMessage *msg, int flags, const char *source); FilterRule *filter_rule_from_message(FilterContext *context, CamelMimeMessage *msg, int flags); +FilterRule *vfolder_rule_from_mlist(VfolderContext *context, const char *mlist, const char *source); +FilterRule *filter_rule_from_mlist(FilterContext *context, const char *mlist); /* easiest place to put this */ void filter_gui_add_from_message (CamelMimeMessage *msg, int flags); - -void filter_gui_add_for_mailing_list (CamelMimeMessage *msg, - const char *list_name, - const char *header_name, - const char *header_value); +void filter_gui_add_from_mlist (const char *mlist); #endif diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 6426979f36..cb5be64207 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -344,6 +344,17 @@ vfolder_gui_add_from_message(CamelMimeMessage *msg, int flags, const char *sourc vfolder_gui_add_rule(rule); } +void +vfolder_gui_add_from_mlist(CamelMimeMessage *msg, const char *mlist, const char *source) +{ + VfolderRule *rule; + + g_return_if_fail (msg != NULL); + + rule = (VfolderRule*)vfolder_rule_from_mlist(context, mlist, source); + vfolder_gui_add_rule(rule); +} + EvolutionStorage * mail_vfolder_get_vfolder_storage (void) { diff --git a/mail/mail-vfolder.h b/mail/mail-vfolder.h index dc2d995d43..c76e532b0c 100644 --- a/mail/mail-vfolder.h +++ b/mail/mail-vfolder.h @@ -20,6 +20,7 @@ void vfolder_edit(void); FilterPart *vfolder_create_part(const char *name); void vfolder_gui_add_rule(VfolderRule *rule); void vfolder_gui_add_from_message(CamelMimeMessage *msg, int flags, const char *source); +void vfolder_gui_add_from_mlist(CamelMimeMessage *msg, const char *mlist, const char *source); EvolutionStorage *mail_vfolder_get_vfolder_storage (void); |