Synch to No Gnus 200510111141.
[elisp/gnus.git-] / lisp / spam.el
index 484ad14..5a47b7e 100644 (file)
@@ -1,8 +1,10 @@
 ;;; spam.el --- Identifying spam
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: network
+;; Maintainer: Ted Zlatanov <tzz@lifelogs.com>
+;; Keywords: network, spam, mail, bogofilter, BBDB, dspam, dig, whitelist, blacklist, gmane, hashcash, spamassassin, bsfilter, ifile, stat, crm114, spamoracle
 
 ;; This file is part of GNU Emacs.
 
@@ -18,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -40,6 +42,7 @@
 
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'spam-report))
+(eval-when-compile (require 'hashcash))
 
 (require 'path-util)
 (require 'gnus-sum)
@@ -58,6 +61,8 @@
 ;; autoload spam-report
 (eval-and-compile
   (autoload 'spam-report-gmane "spam-report")
+  (autoload 'spam-report-gmane-spam "spam-report")
+  (autoload 'spam-report-gmane-ham "spam-report")
   (autoload 'spam-report-resend "spam-report"))
 
 ;; autoload gnus-registry
@@ -80,7 +85,9 @@ Populated by spam-install-backend-super.")
 
 (defgroup spam nil
   "Spam configuration."
-  :version "21.4")
+  :version "22.1"
+  :group 'mail
+  :group 'news)
 
 (defcustom spam-summary-exit-behavior 'default
   "Exit behavior at the time of summary exit.
@@ -350,7 +357,22 @@ Only meaningful if you enable `spam-use-blackholes'."
   :type '(radio (const nil) regexp)
   :group 'spam)
 
-(defcustom spam-face 'gnus-splash-face
+(defface spam
+  '((((class color) (type tty) (background dark))
+     (:foreground "gray80" :background "gray50"))
+    (((class color) (type tty) (background light))
+     (:foreground "gray50" :background "gray80"))
+    (((class color) (background dark))
+     (:foreground "ivory2"))
+    (((class color) (background light))
+     (:foreground "ivory4"))
+    (t :inverse-video t))
+  "Face for spam-marked articles."
+  :group 'spam)
+;; backward-compatibility alias
+(put 'spam-face 'face-alias 'spam)
+
+(defcustom spam-face 'spam
   "Face for spam-marked articles."
   :type 'face
   :group 'spam)
@@ -1037,11 +1059,10 @@ backends)."
                              nil)
 
 (spam-install-nocheck-backend 'spam-use-gmane
-                             nil
+                             'spam-report-gmane-unregister-routine
                              'spam-report-gmane-register-routine
-                             ;; does Gmane support unregistration?
-                             nil
-                             nil)
+                             'spam-report-gmane-register-routine
+                             'spam-report-gmane-unregister-routine)
 
 (spam-install-nocheck-backend 'spam-use-resend
                              'spam-report-resend-register-ham-routine
@@ -1315,6 +1336,10 @@ addition to the set values for the group."
   (unless gnus-group-is-exiting-without-update-p
     (gnus-message 6 "Exiting summary buffer and applying spam rules")
 
+    ;; before we begin, remove any article limits
+;    (ignore-errors
+;      (gnus-summary-pop-limit t))
+
     ;; first of all, unregister any articles that are no longer ham or spam
     ;; we have to iterate over the processors, or else we'll be too slow
     (dolist (classification (spam-classifications))
@@ -1999,18 +2024,10 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
 
 ;;{{{ Hashcash.
 
-(eval-when-compile
-  (autoload 'mail-check-payment "hashcash"))
-
-(condition-case nil
-    (progn
-      (require 'hashcash)
-
-      (defun spam-check-hashcash ()
-       "Check the headers for hashcash payments."
-       (mail-check-payment)))   ;mail-check-payment returns a boolean
+(defun spam-check-hashcash ()
+  "Check the headers for hashcash payments."
+  (ignore-errors (mail-check-payment)))         ;mail-check-payment returns a boolean
 
-  (file-error))
 ;;}}}
 
 ;;{{{ BBDB
@@ -2084,21 +2101,23 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
        (when spam-cache-lookups
          (setq bbdb-cache (gethash 'spam-use-BBDB spam-caches))
          (unless bbdb-cache
-           (setq bbdb-cache
-                 ;; this is the expanded (bbdb-hashtable) macro
-                 ;; without the debugging support
-                 (with-current-buffer (bbdb-buffer)
-                   (save-excursion
-                     (save-window-excursion
-                       (bbdb-records nil t)
-                       bbdb-hashtable))))
+           (setq bbdb-cache (make-vector 17 0)) ; a good starting hash value
+           ;; this is based on the expanded (bbdb-hashtable) macro
+           ;; without the debugging support
+           (with-current-buffer (bbdb-buffer)
+             (save-excursion
+               (save-window-excursion
+                 (bbdb-records nil t)
+                 (mapatoms 
+                  (lambda (symbol)
+                    (intern (downcase (symbol-name symbol)) bbdb-cache))
+                  bbdb-hashtable))))
            (puthash 'spam-use-BBDB bbdb-cache spam-caches)))
        (when who
          (setq who (nth 1 (gnus-extract-address-components who)))
          (if
              (if spam-cache-lookups
-                 (symbol-value
-                  (intern-soft who bbdb-cache))
+                 (intern-soft (downcase who) bbdb-cache)
                (bbdb-search-simple nil who))
              t
            (if spam-use-BBDB-exclusive
@@ -2411,7 +2430,11 @@ REMOVE not nil, remove the ADDRESSES."
 ;;{{{ Spam-report glue (gmane and resend reporting)
 (defun spam-report-gmane-register-routine (articles)
   (when articles
-    (apply 'spam-report-gmane articles)))
+    (apply 'spam-report-gmane-spam articles)))
+
+(defun spam-report-gmane-unregister-routine (articles)
+  (when articles
+    (apply 'spam-report-gmane-ham articles)))
 
 (defun spam-report-resend-register-ham-routine (articles)
   (spam-report-resend-register-routine articles t))
@@ -2860,8 +2883,8 @@ installed through spam-necessary-extra-headers."
     (add-to-list 'gnus-extra-headers header))
 
   (setq spam-install-hooks t)
-  ;; TODO: How do we redo this every time spam-face is customized?
-  (push '((eq mark gnus-spam-mark) . spam-face)
+  ;; TODO: How do we redo this every time the `spam' face is customized?
+  (push '((eq mark gnus-spam-mark) . spam)
        gnus-summary-highlight)
   ;; Add hooks for loading and saving the spam stats
   (add-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save)