diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-13 10:41:31 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-13 10:41:31 +0000 |
commit | ed3b53d5c76f6f631141962ec0318832f7103698 (patch) | |
tree | 0672be07eb746e02b66502c5a615f7948fcf3eb6 /src | |
parent | c39ae22ff8abe554f3a80208b9a2434296b3e26f (diff) |
integrated junk filter setting into common prefs.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@336 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/filter.c | 9 | ||||
-rw-r--r-- | src/filter.h | 1 | ||||
-rw-r--r-- | src/inc.c | 5 | ||||
-rw-r--r-- | src/prefs_common.c | 88 | ||||
-rw-r--r-- | src/prefs_common.h | 3 |
5 files changed, 93 insertions, 13 deletions
diff --git a/src/filter.c b/src/filter.c index bc11a824..217c55da 100644 --- a/src/filter.c +++ b/src/filter.c @@ -1169,6 +1169,15 @@ void filter_rule_match_type_str_to_enum(const gchar *match_type, } } +void filter_rule_list_free(GSList *fltlist) +{ + GSList *cur; + + for (cur = fltlist; cur != NULL; cur = cur->next) + filter_rule_free((FilterRule *)cur->data); + g_slist_free(fltlist); +} + void filter_rule_free(FilterRule *rule) { if (!rule) return; diff --git a/src/filter.h b/src/filter.h index ab1ff711..46d6caa0 100644 --- a/src/filter.h +++ b/src/filter.h @@ -186,6 +186,7 @@ void filter_rule_match_type_str_to_enum (const gchar *type_str, FilterMatchType *type, FilterMatchFlag *flag); +void filter_rule_list_free (GSList *fltlist); void filter_rule_free (FilterRule *rule); void filter_cond_list_free (GSList *cond_list); void filter_action_list_free (GSList *action_list); @@ -1021,6 +1021,11 @@ static gint inc_drop_message(Pop3Session *session, const gchar *file) if (session->ac_prefs->filter_on_recv) filter_apply(prefs_common.fltlist, file, fltinfo); + if (!fltinfo->drop_done) { + if (prefs_common.enable_junk && + prefs_common.filter_junk_on_recv) + filter_apply(prefs_common.junk_fltlist, file, fltinfo); + } if (!fltinfo->drop_done) { if (folder_item_add_msg diff --git a/src/prefs_common.c b/src/prefs_common.c index a84c5ab2..8d63d903 100644 --- a/src/prefs_common.c +++ b/src/prefs_common.c @@ -47,6 +47,7 @@ #include "foldersel.h" #include "inc.h" #include "menu.h" +#include "filter.h" #include "codeconv.h" #include "utils.h" #include "gtkutils.h" @@ -156,7 +157,9 @@ static struct JunkMail { GtkWidget *chkbtn_enable_junk; GtkWidget *entry_junk_learncmd; GtkWidget *entry_nojunk_learncmd; + GtkWidget *entry_classify_cmd; GtkWidget *entry_junkfolder; + GtkWidget *chkbtn_filter_on_recv; } junk; #if USE_GPGME @@ -590,8 +593,14 @@ static PrefParam param[] = { &prefs_common.nojunk_learncmd, P_STRING, &junk.entry_nojunk_learncmd, prefs_set_data_from_entry, prefs_set_entry}, + {"junk_classify_command", "bogofilter -I", + &prefs_common.junk_classify_cmd, P_STRING, + &junk.entry_classify_cmd, prefs_set_data_from_entry, prefs_set_entry}, {"junk_folder", NULL, &prefs_common.junk_folder, P_STRING, &junk.entry_junkfolder, prefs_set_data_from_entry, prefs_set_entry}, + {"filter_junk_on_receive", "FALSE", &prefs_common.filter_junk_on_recv, + P_BOOL, &junk.chkbtn_filter_on_recv, + prefs_set_data_from_toggle, prefs_set_toggle}, #if USE_GPGME /* Privacy */ @@ -693,6 +702,8 @@ static PrefParam param[] = { {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} }; +static void prefs_common_junk_filter_list_set (void); + /* widget creating functions */ static void prefs_common_create (void); static void prefs_receive_create (void); @@ -814,6 +825,8 @@ void prefs_common_read_config(void) prefs_common.mime_open_cmd_history = g_list_reverse(prefs_common.mime_open_cmd_history); + + prefs_common_junk_filter_list_set(); } void prefs_common_write_config(void) @@ -859,6 +872,35 @@ void prefs_common_open(void) gtk_widget_show(dialog.window); } +static void prefs_common_junk_filter_list_set(void) +{ + FilterRule *rule; + FilterCond *cond; + FilterAction *action; + GSList *cond_list = NULL, *action_list = NULL; + + if (prefs_common.junk_fltlist) { + filter_rule_list_free(prefs_common.junk_fltlist); + prefs_common.junk_fltlist = NULL; + } + + if (!prefs_common.junk_classify_cmd || !prefs_common.junk_folder) + return; + + cond = filter_cond_new(FLT_COND_CMD_TEST, 0, 0, NULL, + prefs_common.junk_classify_cmd); + cond_list = g_slist_append(NULL, cond); + action = filter_action_new(FLT_ACTION_COPY, prefs_common.junk_folder); + action_list = g_slist_append(NULL, action); + action = filter_action_new(FLT_ACTION_DELETE, NULL); + action_list = g_slist_append(action_list, action); + + rule = filter_rule_new(_("Junk mail filter"), FLT_OR, + cond_list, action_list); + + prefs_common.junk_fltlist = g_slist_append(NULL, rule); +} + static void prefs_common_create(void) { gint page = 0; @@ -1915,9 +1957,11 @@ static void prefs_junk_create(void) GtkWidget *label; GtkWidget *entry_junk_learncmd; GtkWidget *entry_nojunk_learncmd; + GtkWidget *entry_classify_cmd; GtkWidget *vbox3; GtkWidget *entry_junkfolder; GtkWidget *btn_folder; + GtkWidget *chkbtn_filter_on_recv; vbox1 = gtk_vbox_new (FALSE, VSPACING); gtk_widget_show (vbox1); @@ -1965,17 +2009,17 @@ static void prefs_junk_create(void) PACK_VSPACER(vbox2, vbox3, 0); - label = gtk_label_new - (_("Specify command line for learning junk mail. " - "You must add a filter rule with 'Result of command' " - "as a condition to enable automatic filtering using " - "the result of this learning.")); + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Classifying command")); gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); - gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); - gtkut_widget_set_small_font_size (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + entry_classify_cmd = gtk_entry_new (); + gtk_widget_show (entry_classify_cmd); + gtk_box_pack_start (GTK_BOX (hbox), entry_classify_cmd, TRUE, TRUE, 0); PACK_VSPACER(vbox2, vbox3, 0); @@ -2009,10 +2053,27 @@ static void prefs_junk_create(void) gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtkut_widget_set_small_font_size (label); - junk.chkbtn_enable_junk = chkbtn_enable_junk; - junk.entry_junk_learncmd = entry_junk_learncmd; + PACK_VSPACER(vbox2, vbox3, 0); + + PACK_CHECK_BUTTON(vbox2, chkbtn_filter_on_recv, + _("Filter messages classified as junk on receiving")); + + label = gtk_label_new + (_("Filtered messages will be moved to the junk folder and " + "deleted from the server.")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtkut_widget_set_small_font_size (label); + + junk.chkbtn_enable_junk = chkbtn_enable_junk; + junk.entry_junk_learncmd = entry_junk_learncmd; junk.entry_nojunk_learncmd = entry_nojunk_learncmd; - junk.entry_junkfolder = entry_junkfolder; + junk.entry_classify_cmd = entry_classify_cmd; + junk.entry_junkfolder = entry_junkfolder; + junk.chkbtn_filter_on_recv = chkbtn_filter_on_recv; } #if USE_GPGME @@ -3721,6 +3782,7 @@ static void prefs_common_ok(void) static void prefs_common_apply(void) { prefs_set_data_from_dialog(param); + prefs_common_junk_filter_list_set(); main_window_reflect_prefs_all(); sock_set_io_timeout(prefs_common.io_timeout_secs); prefs_common_write_config(); diff --git a/src/prefs_common.h b/src/prefs_common.h index 336f8a50..266b8e6f 100644 --- a/src/prefs_common.h +++ b/src/prefs_common.h @@ -191,7 +191,9 @@ struct _PrefsCommon gboolean enable_junk; gchar *junk_learncmd; gchar *nojunk_learncmd; + gchar *junk_classify_cmd; gchar *junk_folder; + gboolean filter_junk_on_recv; #if USE_GPGME /* Privacy */ @@ -233,6 +235,7 @@ struct _PrefsCommon /* Filtering */ GSList *fltlist; + GSList *junk_fltlist; /* Actions */ GSList *actions_list; |