From: Tristan Chabredier Date: Wed, 1 Mar 2006 15:09:33 +0000 (+0000) Subject: 2006-03-01 [wwp] 2.0.0cvs91 X-Git-Tag: REL_2_1_0~103 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=eea782606d70d299316f14100ce71d427d39abc5 2006-03-01 [wwp] 2.0.0cvs91 * src/messageview.c * src/procmsg.c * src/procmsg.h * src/summaryview.c * src/plugins/spamassassin/spamassassin.c * src/plugins/spamassassin/spamassassin.h make learner callbacks return a status (0 for ok), handle it in main code to avoid setting flags when learning failed, don't learn on TCP if offline in spamassassin, thanks to Colin. --- diff --git a/ChangeLog b/ChangeLog index 6f5d64253..bc04cbf2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2006-03-01 [wwp] 2.0.0cvs91 + + * src/messageview.c + * src/procmsg.c + * src/procmsg.h + * src/summaryview.c + * src/plugins/spamassassin/spamassassin.c + * src/plugins/spamassassin/spamassassin.h + make learner callbacks return a status (0 for ok), + handle it in main code to avoid setting flags when learning failed, + don't learn on TCP if offline in spamassassin, + thanks to Colin. + + + 2006-03-01 [wwp] 2.0.0cvs90 * src/compose.c diff --git a/PATCHSETS b/PATCHSETS index 925028f99..3bba6d7cf 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -1274,3 +1274,4 @@ ( cvs diff -u -r 1.18.2.23 -r 1.18.2.24 src/plugins/spamassassin/spamassassin.c; cvs diff -u -r 1.4.2.8 -r 1.4.2.9 src/plugins/spamassassin/spamassassin.h; cvs diff -u -r 1.23.2.21 -r 1.23.2.22 src/plugins/spamassassin/spamassassin_gtk.c; ) > 2.0.0cvs88.patchset ( cvs diff -u -r 1.18.2.24 -r 1.18.2.25 src/plugins/spamassassin/spamassassin.c; ) > 2.0.0cvs89.patchset ( cvs diff -u -r 1.382.2.247 -r 1.382.2.248 src/compose.c; ) > 2.0.0cvs90.patchset +( cvs diff -u -r 1.94.2.78 -r 1.94.2.79 src/messageview.c; cvs diff -u -r 1.150.2.54 -r 1.150.2.55 src/procmsg.c; cvs diff -u -r 1.60.2.24 -r 1.60.2.25 src/procmsg.h; cvs diff -u -r 1.395.2.176 -r 1.395.2.177 src/summaryview.c; cvs diff -u -r 1.18.2.25 -r 1.18.2.26 src/plugins/spamassassin/spamassassin.c; cvs diff -u -r 1.4.2.9 -r 1.4.2.10 src/plugins/spamassassin/spamassassin.h; ) > 2.0.0cvs91.patchset diff --git a/configure.ac b/configure.ac index 6b6e6d290..0000d7e26 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=0 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=90 +EXTRA_VERSION=91 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/messageview.c b/src/messageview.c index 92dfcaa36..dcbcd9700 100644 --- a/src/messageview.c +++ b/src/messageview.c @@ -63,6 +63,7 @@ #include "partial_download.h" #include "gedit-print.h" #include "inc.h" +#include "log.h" static GList *messageview_list = NULL; @@ -1615,11 +1616,16 @@ void messageview_set_menu_sensitive(MessageView *messageview) void messageview_learn (MessageView *msgview, gboolean is_spam) { if (is_spam) { - procmsg_msginfo_set_flags(msgview->msginfo, MSG_SPAM, 0); - procmsg_spam_learner_learn(msgview->msginfo, NULL, TRUE); + if (procmsg_spam_learner_learn(msgview->msginfo, NULL, TRUE) == 0) + procmsg_msginfo_set_flags(msgview->msginfo, MSG_SPAM, 0); + else + log_error(_("An error happened while learning.\n")); + } else { - procmsg_msginfo_unset_flags(msgview->msginfo, MSG_SPAM, 0); - procmsg_spam_learner_learn(msgview->msginfo, NULL, FALSE); + if (procmsg_spam_learner_learn(msgview->msginfo, NULL, FALSE) == 0) + procmsg_msginfo_unset_flags(msgview->msginfo, MSG_SPAM, 0); + else + log_error(_("An error happened while learning.\n")); } if (msgview->toolbar) toolbar_set_learn_button diff --git a/src/plugins/spamassassin/spamassassin.c b/src/plugins/spamassassin/spamassassin.c index 16891120f..b7c0cc39f 100644 --- a/src/plugins/spamassassin/spamassassin.c +++ b/src/plugins/spamassassin/spamassassin.c @@ -45,6 +45,7 @@ #include "libspamc.h" #include "spamassassin.h" +#include "inc.h" #include "log.h" #include "prefs_common.h" @@ -258,19 +259,24 @@ SpamAssassinConfig *spamassassin_get_config(void) return &config; } -void spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam) +int spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam) { gchar *cmd = NULL; gchar *file = NULL; gboolean async = FALSE; if (msginfo == NULL && msglist == NULL) - return; + return -1; + + if (config.transport == SPAMASSASSIN_TRANSPORT_TCP + && prefs_common.work_offline + && !inc_offline_should_override()) + return -1; if (msginfo) { file = procmsg_get_message_file(msginfo); if (file == NULL) - return; + return -1; if (config.transport == SPAMASSASSIN_TRANSPORT_TCP) { cmd = g_strdup_printf("spamc -d %s -p %u -u %s -t %u -s %u -L %s < %s", config.hostname, config.port, @@ -310,7 +316,7 @@ void spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam) g_free(tmpfile); } g_free(cmd); - return; + return 0; } else { cmd = g_strdup_printf("sa-learn -u %s %s %s", config.username, @@ -336,13 +342,14 @@ void spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam) } } if (cmd == NULL) - return; + return -1; debug_print("%s\n", cmd); /* only run async if we have a list, or we could end up * forking lots of perl processes and bury the machine */ execute_command_line(cmd, async); g_free(cmd); + return 0; } void spamassassin_save_config(void) diff --git a/src/plugins/spamassassin/spamassassin.h b/src/plugins/spamassassin/spamassassin.h index 0440ca2c4..b5490e396 100644 --- a/src/plugins/spamassassin/spamassassin.h +++ b/src/plugins/spamassassin/spamassassin.h @@ -53,7 +53,7 @@ gint spamassassin_check_username (void); void spamassassin_set_message_callback (MessageCallback callback); gint spamassassin_gtk_init(void); void spamassassin_gtk_done(void); -void spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam); +int spamassassin_learn(MsgInfo *msginfo, GSList *msglist, gboolean spam); void spamassassin_register_hook(void); void spamassassin_unregister_hook(void); #endif diff --git a/src/procmsg.c b/src/procmsg.c index 8f89d8563..4e07d495d 100644 --- a/src/procmsg.c +++ b/src/procmsg.c @@ -2071,7 +2071,7 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimei static GSList *spam_learners = NULL; -void procmsg_register_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)) +void procmsg_register_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)) { if (!g_slist_find(spam_learners, learn_func)) spam_learners = g_slist_append(spam_learners, learn_func); @@ -2083,7 +2083,7 @@ void procmsg_register_spam_learner (void (*learn_func)(MsgInfo *info, GSList *li } } -void procmsg_unregister_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)) +void procmsg_unregister_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)) { spam_learners = g_slist_remove(spam_learners, learn_func); if (mainwindow_get_mainwindow()) { @@ -2099,13 +2099,15 @@ gboolean procmsg_spam_can_learn(void) return g_slist_length(spam_learners) > 0; } -void procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam) +int procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam) { GSList *cur = spam_learners; + int ret = 0; for (; cur; cur = cur->next) { - void ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data; - func(info, list, spam); + int ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data; + ret |= func(info, list, spam); } + return ret; } static gchar *spam_folder_item = NULL; diff --git a/src/procmsg.h b/src/procmsg.h index 6c7c71025..fdfcbdfa3 100644 --- a/src/procmsg.h +++ b/src/procmsg.h @@ -326,11 +326,11 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo (MsgInfo *src_msginfo, MimeInfo *mimeinfo); -void procmsg_register_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)); -void procmsg_unregister_spam_learner (void (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)); +void procmsg_register_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)); +void procmsg_unregister_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam)); gboolean procmsg_spam_can_learn (void); void procmsg_spam_set_folder (const char *item_identifier); FolderItem *procmsg_spam_get_folder (void); -void procmsg_spam_learner_learn (MsgInfo *msginfo, GSList *msglist, gboolean spam); +int procmsg_spam_learner_learn (MsgInfo *msginfo, GSList *msglist, gboolean spam); #endif /* __PROCMSG_H__ */ diff --git a/src/summaryview.c b/src/summaryview.c index 39642a266..28db0fc6e 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -87,6 +87,7 @@ #include "partial_download.h" #include "timing.h" #include "gedit-print.h" +#include "log.h" #define SUMMARY_COL_MARK_WIDTH 10 #define SUMMARY_COL_STATUS_WIDTH 13 @@ -3229,21 +3230,29 @@ void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *wid for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { GtkCTreeNode *row = GTK_CTREE_NODE(cur->data); MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, row); - if (is_spam) { - summary_msginfo_change_flags(msginfo, MSG_SPAM, 0, MSG_NEW|MSG_UNREAD, 0); - if (procmsg_spam_get_folder() != summaryview->folder_item) { - summary_move_row_to(summaryview, row, procmsg_spam_get_folder()); - moved = TRUE; - } - } else { - summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0); - } msgs = g_slist_prepend(msgs, msginfo); } - procmsg_spam_learner_learn(NULL, msgs, is_spam); - g_slist_free(msgs); + if (procmsg_spam_learner_learn(NULL, msgs, is_spam) == 0) { + for (cur = GTK_CLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { + GtkCTreeNode *row = GTK_CTREE_NODE(cur->data); + MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, row); + if (is_spam) { + summary_msginfo_change_flags(msginfo, MSG_SPAM, 0, MSG_NEW|MSG_UNREAD, 0); + if (procmsg_spam_get_folder() != summaryview->folder_item) { + summary_move_row_to(summaryview, row, procmsg_spam_get_folder()); + moved = TRUE; + } + } else { + summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0); + } + } + } else { + log_error(_("An error happened while learning.\n")); + } + g_slist_free(msgs); + prefs_common.immediate_exec = immediate_exec; END_LONG_OPERATION(summaryview); @@ -5097,8 +5106,10 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row, if (MSG_IS_MARKED(msginfo->flags)) { summary_unmark_row(summaryview, row); } else if (MSG_IS_SPAM(msginfo->flags)) { - summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0); - procmsg_spam_learner_learn(msginfo, NULL, FALSE); + if (procmsg_spam_learner_learn(msginfo, NULL, FALSE) == 0) + summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0); + else + log_error(_("An error happened while learning.\n")); } else { summary_mark_row(summaryview, row); }