2006-03-01 [wwp] 2.0.0cvs91
authorTristan Chabredier <wwp@claws-mail.org>
Wed, 1 Mar 2006 15:09:33 +0000 (15:09 +0000)
committerTristan Chabredier <wwp@claws-mail.org>
Wed, 1 Mar 2006 15:09:33 +0000 (15:09 +0000)
* 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.

ChangeLog
PATCHSETS
configure.ac
src/messageview.c
src/plugins/spamassassin/spamassassin.c
src/plugins/spamassassin/spamassassin.h
src/procmsg.c
src/procmsg.h
src/summaryview.c

index 6f5d6425371565b08c8e26debd9347bf2ebc83f7..bc04cbf2fe041a50e877884947b443b0608d1352 100644 (file)
--- 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
index 925028f9981fd6050b4003a2a44674ce0df9cda2..3bba6d7cfd0b851f223fa1fbebbd369d94dc8abd 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index 6b6e6d290c55f5868217966c5361fa7f40c83e6d..0000d7e269b4a709b3c2c37df57d64666a0806ad 100644 (file)
@@ -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=
 
index 92dfcaa36158eaf8db9daa63f4730cada23bb240..dcbcd970094b999a2bd96cf9d332b9284a68445f 100644 (file)
@@ -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
index 16891120fe34af2347ff024b452af91705c7fa3e..b7c0cc39f8d38f6f5e74e0f4bcb6eacd07f98c7f 100644 (file)
@@ -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)
index 0440ca2c4f4e89a64be7a5a8beeea8f35567fdbc..b5490e3960a4c68a05a2f1ebe2035a643f0552d2 100644 (file)
@@ -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
index 8f89d8563b316083ce148a6c54b8f4f0a3fe06a9..4e07d495d0a870fe78b2b1ab63ab240d8a97a9e6 100644 (file)
@@ -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;
index 6c7c71025247a38f5fd30b62a7ce9440271ebfa7..fdfcbdfa3c8e71a04d366a3d1c822eb91e91ac63 100644 (file)
@@ -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__ */
index 39642a26611d9dba07eeb7d81a30a426f78e22eb..28db0fc6ee280d3b6e428eaaf88984d230b6bba2 100644 (file)
@@ -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);
                        }