CVS: sylpheedclaws/sylpheed-claws/src/plugins/bogofilter bogofilter.c,1.1.2.21,1.1.2.22 bogofilter_gtk.c,1.1.2.13,1.1.2.14 bogofilter.h,1.1.2.7,1.1.2.8

[email protected] Fri, 22 Dec 2006 09:55:43 +0000
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/plugins/bogofilter
In directory sunsite.dk:/tmp/cvs-serv19611/src/plugins/bogofilter

Modified Files:
      Tag: gtk2
	bogofilter.c bogofilter_gtk.c bogofilter.h 
Log Message:
2006-12-22 [colin]	2.6.1cvs64

	* src/toolbar.c
	* src/toolbar.h
		Add a combo to the learn spam button
	* src/plugins/bogofilter/bogofilter.c
	* src/plugins/bogofilter/bogofilter_gtk.c
	* src/plugins/bogofilter/bogofilter.h
		Allow to store Unsure mails in a specific
		folder to make better teaching easier

Index: bogofilter.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/plugins/bogofilter/Attic/bogofilter.c,v
retrieving revision 1.1.2.21
retrieving revision 1.1.2.22
diff -u -d -r1.1.2.21 -r1.1.2.22
--- bogofilter.c	2006/12/20 13:06:15	1.1.2.21
+++ bogofilter.c	2006/12/22 09:55:39	1.1.2.22
@@ -87,6 +87,10 @@
 	 NULL, NULL, NULL},
 	{"save_folder", NULL, &config.save_folder, P_STRING,
 	 NULL, NULL, NULL},
+	{"save_unsure", "FALSE", &config.save_unsure, P_BOOL,
+	 NULL, NULL, NULL},
+	{"save_unsure_folder", NULL, &config.save_unsure_folder, P_STRING,
+	 NULL, NULL, NULL},
 	{"max_size", "250", &config.max_size, P_INT,
 	 NULL, NULL, NULL},
 	{"bogopath", "bogofilter", &config.bogopath, P_STRING,
@@ -133,6 +137,7 @@
 	gchar **bogo_args;
 	GSList *msglist;
 	GSList *new_hams;
+	GSList *new_unsure;
 	GSList *new_spams;
 	GSList *whitelisted_new_spams;
 	gboolean done;
@@ -311,6 +316,14 @@
 						 * it was not). */
 						data->whitelisted_new_spams = g_slist_prepend(data->whitelisted_new_spams, msginfo);
 
+					} else if (config.save_unsure && parts && parts[0] && parts[1] && *parts[1] == 'U') {
+						
+						debug_print("message %d is unsure\n", msginfo->msgnum);
+						/* Spam will be filtered away */
+						data->mail_filtering_data->filtered = g_slist_prepend(
+							data->mail_filtering_data->filtered, msginfo);
+						data->new_unsure = g_slist_prepend(data->new_unsure, msginfo);
+
 					} else {
 						
 						debug_print("message %d is ham\n", msginfo->msgnum);
@@ -413,7 +426,8 @@
 	static gboolean warned_error = FALSE;
 	int status = 0;
 	int total = 0, curnum = 0;
-	GSList *new_hams = NULL, *new_spams = NULL, *whitelisted_new_spams = NULL;
+	GSList *new_hams = NULL, *new_spams = NULL;
+	GSList *new_unsure, *whitelisted_new_spams = NULL;
 	gchar *bogo_exec = (config.bogopath && *config.bogopath) ? config.bogopath:"bogofilter";
 	gchar *bogo_args[4];
 	gboolean ok_to_thread = TRUE;
@@ -461,6 +475,7 @@
 	to_filter_data->msglist = msglist;
 	to_filter_data->mail_filtering_data = mail_filtering_data;
 	to_filter_data->new_hams = NULL;
+	to_filter_data->new_unsure = NULL;
 	to_filter_data->new_spams = NULL;
 	to_filter_data->whitelisted_new_spams = NULL;
 	to_filter_data->done = FALSE;
@@ -499,6 +514,7 @@
 #endif
 
 	new_hams = to_filter_data->new_hams;
+	new_unsure = to_filter_data->new_unsure;
 	new_spams = to_filter_data->new_spams;
 	whitelisted_new_spams = to_filter_data->whitelisted_new_spams;
 	status = to_filter_data->status;
@@ -514,6 +530,11 @@
 		MsgInfo *msginfo = (MsgInfo *)cur->data;
 		procmsg_msginfo_unset_flags(msginfo, MSG_SPAM, 0);
 	}
+	/* unflag unsure */
+	for (cur = new_unsure; cur; cur = cur->next) {
+		MsgInfo *msginfo = (MsgInfo *)cur->data;
+		procmsg_msginfo_unset_flags(msginfo, MSG_SPAM, 0);
+	}
 	/* flag whitelisted spams */
 	for (cur = whitelisted_new_spams; cur; cur = cur->next) {
 		MsgInfo *msginfo = (MsgInfo *)cur->data;
@@ -561,22 +582,40 @@
 		g_slist_free(mail_filtering_data->unfiltered);
 		mail_filtering_data->filtered = NULL;
 		mail_filtering_data->unfiltered = NULL;
-	} else if (config.receive_spam && new_spams) {
-		FolderItem *save_folder;
+	} else {
+		if (config.receive_spam && new_spams) {
+			FolderItem *save_folder;
 
-		if ((!config.save_folder) ||
-		    (config.save_folder[0] == '\0') ||
-		    ((save_folder = folder_find_item_from_identifier(config.save_folder)) == NULL))
-			save_folder = folder_get_default_trash();
-		if (save_folder) {
-			for (cur = new_spams; cur; cur = cur->next) {
-				msginfo = (MsgInfo *)cur->data;
-				msginfo->is_move = TRUE;
-				msginfo->to_filter_folder = save_folder;
+			if ((!config.save_folder) ||
+			    (config.save_folder[0] == '\0') ||
+			    ((save_folder = folder_find_item_from_identifier(config.save_folder)) == NULL))
+				save_folder = folder_get_default_trash();
+			if (save_folder) {
+				for (cur = new_spams; cur; cur = cur->next) {
+					msginfo = (MsgInfo *)cur->data;
+					msginfo->is_move = TRUE;
+					msginfo->to_filter_folder = save_folder;
+				}
 			}
 		}
+		if (config.save_unsure && new_unsure) {
+			FolderItem *save_unsure_folder;
+
+			if ((!config.save_unsure_folder) ||
+			    (config.save_unsure_folder[0] == '\0') ||
+			    ((save_unsure_folder = folder_find_item_from_identifier(config.save_unsure_folder)) == NULL))
+				save_unsure_folder = folder_get_default_inbox();
+			if (save_unsure_folder) {
+				for (cur = new_unsure; cur; cur = cur->next) {
+					msginfo = (MsgInfo *)cur->data;
+					msginfo->is_move = TRUE;
+					msginfo->to_filter_folder = save_unsure_folder;
+				}
+			}
+		}
 	} 
 	g_slist_free(new_hams);
+	g_slist_free(new_unsure);
 	g_slist_free(new_spams);
 	g_slist_free(whitelisted_new_spams);
 
@@ -621,6 +660,8 @@
 			else 
 				/* learn as ham */
 				cmd = g_strdup_printf("%s -n -I '%s'", bogo_exec, file);
+				
+			debug_print("%s\n", cmd);
 			if ((status = execute_command_line(cmd, FALSE)) != 0)
 				log_error(_("Learning failed; `%s` returned with status %d."),
 						cmd, status);
@@ -668,7 +709,8 @@
 				else 
 					/* learn as ham */
 					cmd = g_strdup_printf("%s -n -I '%s'", bogo_exec, file);
-
+				
+				debug_print("%s\n", cmd);
 				if ((status = execute_command_line(cmd, FALSE)) != 0)
 					log_error(_("Learning failed; `%s` returned with status %d."),
 							cmd, status);
@@ -695,7 +737,7 @@
 				bogo_args[1] = spam ? "-s":"-n";
 			bogo_args[2] = "-b";
 			bogo_args[3] = NULL;
-
+			debug_print("|%s %s %s ...\n", bogo_args[0], bogo_args[1], bogo_args[2]);
 			bogo_forked = g_spawn_async_with_pipes(
 					NULL, bogo_args,NULL, G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,
 					NULL, NULL, &bogo_pid, &bogo_stdin,

Index: bogofilter_gtk.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/plugins/bogofilter/Attic/bogofilter_gtk.c,v
retrieving revision 1.1.2.13
retrieving revision 1.1.2.14
diff -u -d -r1.1.2.13 -r1.1.2.14
--- bogofilter_gtk.c	2006/12/15 19:06:14	1.1.2.13
+++ bogofilter_gtk.c	2006/12/22 09:55:40	1.1.2.14
@@ -50,6 +50,9 @@
 	GtkWidget *receive_spam;
 	GtkWidget *save_folder;
 	GtkWidget *save_folder_select;
+	GtkWidget *save_unsure;
+	GtkWidget *save_unsure_folder;
+	GtkWidget *save_unsure_folder_select;
 	GtkWidget *insert_header;
 	GtkWidget *max_size;
 	GtkWidget *bogopath;
@@ -66,15 +69,15 @@
 
 static void foldersel_cb(GtkWidget *widget, gpointer data)
 {
-	struct BogofilterPage *page = (struct BogofilterPage *) data;
+	GtkWidget *entry = (GtkWidget *) data;
 	FolderItem *item;
 	gchar *item_id;
 	gint newpos = 0;
 	
 	item = foldersel_folder_sel(NULL, FOLDER_SEL_MOVE, NULL);
 	if (item && (item_id = folder_item_get_identifier(item)) != NULL) {
-		gtk_editable_delete_text(GTK_EDITABLE(page->save_folder), 0, -1);
-		gtk_editable_insert_text(GTK_EDITABLE(page->save_folder), item_id, strlen(item_id), &newpos);
+		gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1);
+		gtk_editable_insert_text(GTK_EDITABLE(entry), item_id, strlen(item_id), &newpos);
 		g_free(item_id);
 	}
 }
@@ -100,7 +103,8 @@
 
 	GtkWidget *vbox1, *vbox2;
 	GtkWidget *hbox_max_size;
-	GtkWidget *hbox_process_emails, *hbox_save_spam, *hbox_bogopath, *hbox_whitelist;
+	GtkWidget *hbox_process_emails, *hbox_save_spam, *hbox_save_unsure;
+	GtkWidget *hbox_bogopath, *hbox_whitelist;
 
 	GtkWidget *max_size_label;
 	GtkObject *max_size_spinbtn_adj;
@@ -113,6 +117,10 @@
 	GtkWidget *save_spam_folder_entry;
 	GtkWidget *save_spam_folder_select;
 
+	GtkWidget *save_unsure_checkbtn;
+	GtkWidget *save_unsure_folder_entry;
+	GtkWidget *save_unsure_folder_select;
+
 	GtkWidget *insert_header_chkbtn;
 	GtkWidget *whitelist_ab_chkbtn;
 	GtkWidget *bogopath_label;
@@ -176,7 +184,7 @@
 	gtk_widget_show (save_spam_folder_entry);
 	gtk_box_pack_start (GTK_BOX (hbox_save_spam), save_spam_folder_entry, TRUE, TRUE, 0);
 	gtk_tooltips_set_tip(tooltips, save_spam_folder_entry,
-			_("Folder for storing identified spam. Leave empty to use the default trash folder"),
+			_("Folder for storing identified spam. Leave empty to use the default trash folder."),
 			NULL);
 
 	save_spam_folder_select = gtkut_get_browse_directory_btn(_("_Browse"));
@@ -186,6 +194,28 @@
 			_("Click this button to select a folder for storing spam"),
 			NULL);
 
+	hbox_save_unsure = gtk_hbox_new(FALSE, 8);
+	gtk_widget_show(hbox_save_unsure);
+	gtk_box_pack_start (GTK_BOX (vbox2), hbox_save_unsure, TRUE, TRUE, 0);
+
+	save_unsure_checkbtn = gtk_check_button_new_with_label(_("When unsure, move in"));
+	gtk_widget_show(save_unsure_checkbtn);
+	gtk_box_pack_start(GTK_BOX(hbox_save_unsure), save_unsure_checkbtn, FALSE, FALSE, 0);
+
+	save_unsure_folder_entry = gtk_entry_new();
+	gtk_widget_show (save_unsure_folder_entry);
+	gtk_box_pack_start (GTK_BOX (hbox_save_unsure), save_unsure_folder_entry, TRUE, TRUE, 0);
+	gtk_tooltips_set_tip(tooltips, save_unsure_folder_entry,
+			_("Folder for storing mail for which spam status is Unsure. Leave empty to use the default inbox folder."),
+			NULL);
+
+	save_unsure_folder_select = gtkut_get_browse_directory_btn(_("_Browse"));
+	gtk_widget_show (save_unsure_folder_select);
+	gtk_box_pack_start (GTK_BOX (hbox_save_unsure), save_unsure_folder_select, FALSE, FALSE, 0);
+	gtk_tooltips_set_tip(tooltips, save_unsure_folder_select,
+			_("Click this button to select a folder for storing Unsure mails"),
+			NULL);
+
 	insert_header_chkbtn = gtk_check_button_new_with_label(_("Insert X-Bogosity header"));
 	gtk_widget_show(insert_header_chkbtn);
 	gtk_box_pack_start(GTK_BOX(vbox2), insert_header_chkbtn, FALSE, FALSE, 0);
@@ -244,19 +274,25 @@
 	SET_TOGGLE_SENSITIVITY(save_spam_checkbtn, save_spam_folder_entry);
 	SET_TOGGLE_SENSITIVITY(save_spam_checkbtn, save_spam_folder_select);
 	SET_TOGGLE_SENSITIVITY(save_spam_checkbtn, insert_header_chkbtn);
+	SET_TOGGLE_SENSITIVITY(save_unsure_checkbtn, save_unsure_folder_entry);
+	SET_TOGGLE_SENSITIVITY(save_unsure_checkbtn, save_unsure_folder_select);
+	SET_TOGGLE_SENSITIVITY(save_unsure_checkbtn, insert_header_chkbtn);
 	SET_TOGGLE_SENSITIVITY(whitelist_ab_chkbtn, whitelist_ab_folder_combo);
 	SET_TOGGLE_SENSITIVITY(whitelist_ab_chkbtn, whitelist_ab_select_btn);
 
 	config = bogofilter_get_config();
 
 	g_signal_connect(G_OBJECT(save_spam_folder_select), "clicked",
-			G_CALLBACK(foldersel_cb), page);
+			G_CALLBACK(foldersel_cb), save_spam_folder_entry);
+	g_signal_connect(G_OBJECT(save_unsure_folder_select), "clicked",
+			G_CALLBACK(foldersel_cb), save_unsure_folder_entry);
 	g_signal_connect(G_OBJECT (whitelist_ab_select_btn), "clicked",
 			 G_CALLBACK(bogofilter_whitelist_ab_select_cb), page);
 
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(max_size_spinbtn), (float) config->max_size);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(process_emails_checkbtn), config->process_emails);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_spam_checkbtn), config->receive_spam);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_unsure_checkbtn), config->save_unsure);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(insert_header_chkbtn), config->insert_header);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(whitelist_ab_chkbtn), config->whitelist_ab);
 	if (config->whitelist_ab_folder != NULL)
@@ -264,17 +300,25 @@
 				config->whitelist_ab_folder);
 	if (config->save_folder != NULL)
 		gtk_entry_set_text(GTK_ENTRY(save_spam_folder_entry), config->save_folder);
+	if (config->save_unsure_folder != NULL)
+		gtk_entry_set_text(GTK_ENTRY(save_unsure_folder_entry), config->save_unsure_folder);
 	if (config->bogopath != NULL)
 		gtk_entry_set_text(GTK_ENTRY(bogopath_entry), config->bogopath);
 
 	page->max_size = max_size_spinbtn;
 	page->process_emails = process_emails_checkbtn;
+
 	page->receive_spam = save_spam_checkbtn;
+	page->save_folder = save_spam_folder_entry;
+	page->save_folder_select = save_spam_folder_select;
+
+	page->save_unsure = save_unsure_checkbtn;
+	page->save_unsure_folder = save_unsure_folder_entry;
+	page->save_unsure_folder_select = save_unsure_folder_select;
+
 	page->insert_header = insert_header_chkbtn;
 	page->whitelist_ab = whitelist_ab_chkbtn;
 	page->whitelist_ab_folder_combo = whitelist_ab_folder_combo;
-	page->save_folder = save_spam_folder_entry;
-	page->save_folder_select = save_spam_folder_select;
 	page->bogopath = bogopath_entry;
 
 	page->page.widget = vbox1;
@@ -303,6 +347,13 @@
 	/* save_folder */
 	g_free(config->save_folder);
 	config->save_folder = gtk_editable_get_chars(GTK_EDITABLE(page->save_folder), 0, -1);
+
+	/* save_unsure */
+	config->save_unsure = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->save_unsure));
+
+	/* save_unsure_folder */
+	g_free(config->save_unsure_folder);
+	config->save_unsure_folder = gtk_editable_get_chars(GTK_EDITABLE(page->save_unsure_folder), 0, -1);
 
 	/* insert_header */
 	config->insert_header = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->insert_header));

Index: bogofilter.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/plugins/bogofilter/Attic/bogofilter.h,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -u -d -r1.1.2.7 -r1.1.2.8
--- bogofilter.h	2006/12/15 16:52:38	1.1.2.7
+++ bogofilter.h	2006/12/22 09:55:40	1.1.2.8
@@ -36,6 +36,8 @@
 	gboolean		 insert_header;
 	gboolean		 whitelist_ab;
 	gchar			*whitelist_ab_folder;
+	gboolean		 save_unsure;
+	gchar 			*save_unsure_folder;
 };
 
 BogofilterConfig *bogofilter_get_config	      (void);