Give a better error message in the "go offline" case.
[gnus] / lisp / gnus-nocem.el
index 00c8184..0364c96 100644 (file)
@@ -1,17 +1,17 @@
 ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
   :group 'gnus-score)
 
 (defcustom gnus-nocem-groups
-  '("news.lists.filters" "news.admin.net-abuse.bulletins"
-    "alt.nocem.misc" "news.admin.net-abuse.announce")
+  '("news.lists.filters" "alt.nocem.misc")
   "*List of groups that will be searched for NoCeM messages."
   :group 'gnus-nocem
+  :version "23.1"
   :type '(repeat (string :tag "Group")))
 
 (defcustom gnus-nocem-issuers
-  '("AutoMoose-1"                      ; CancelMoose[tm]
-    "clewis@ferret.ocunix"             ; Chris Lewis
-    "cosmo.roadkill"
-    "SpamHippo"
-    "hweede@snafu.de")
+  '("Adri Verhoef"
+    "alba-nocem@albasani.net"
+    "bleachbot@httrack.com"
+    "news@arcor-online.net"
+    "news@uni-berlin.de"
+    "nocem@arcor.de"
+    "pgpmoose@killfile.org"
+    "xjsppl@gmx.de")
   "*List of NoCeM issuers to pay attention to.
 
 This can also be a list of `(ISSUER CONDITION ...)' elements.
@@ -60,7 +61,34 @@ See <URL:http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html> for an
 issuer registry."
   :group 'gnus-nocem
   :link '(url-link "http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html")
-  :type '(repeat (choice string sexp)))
+  :version "23.1"
+  :type '(repeat (cons :format "%v" (string :tag "Issuer")
+                      (repeat :tag "Condition"
+                              (group (checklist :inline t (const not))
+                                     (regexp :tag "Type" :value ".*")))))
+  :get (lambda (symbol)
+        (mapcar (lambda (elem)
+                  (if (consp elem)
+                      (cons (car elem)
+                            (mapcar (lambda (elt)
+                                      (if (consp elt) elt (list elt)))
+                                    (cdr elem)))
+                    (list elem)))
+                (default-value symbol)))
+  :set (lambda (symbol value)
+        (custom-set-default
+         symbol
+         (mapcar (lambda (elem)
+                   (if (consp elem)
+                       (if (cdr elem)
+                           (mapcar (lambda (elt)
+                                     (if (consp elt)
+                                         (if (cdr elt) elt (car elt))
+                                       elt))
+                                   elem)
+                         (car elem))
+                     elem))
+                 value))))
 
 (defcustom gnus-nocem-directory
   (nnheader-concat gnus-article-save-directory "NoCeM/")
@@ -73,14 +101,24 @@ issuer registry."
   :group 'gnus-nocem
   :type 'integer)
 
-(defcustom gnus-nocem-verifyer 'pgg-verify
+(defcustom gnus-nocem-verifyer (if (locate-library "epg")
+                                  'gnus-nocem-epg-verify
+                                'pgg-verify)
   "*Function called to verify that the NoCeM message is valid.
-One likely value is `pgg-verify'.  If the function in this variable
-isn't bound, the message will be used unconditionally."
+If the function in this variable isn't bound, the message will be used
+unconditionally."
   :group 'gnus-nocem
-  :type '(radio (function-item pgg-verify)
+  :version "23.1"
+  :type '(radio (function-item gnus-nocem-epg-verify)
+               (function-item pgg-verify)
                (function-item mc-verify)
-               (function :tag "other")))
+               (function :tag "other"))
+  :set (lambda (symbol value)
+        (custom-set-default symbol
+                            (if (and (eq value 'gnus-nocem-epg-verify)
+                                     (not (locate-library "epg")))
+                                'pgg-verify
+                              value))))
 
 (defcustom gnus-nocem-liberal-fetch nil
   "*If t try to fetch all messages which have @@NCM in the subject.
@@ -394,7 +432,21 @@ valid issuer, which is much faster if you are selective about the issuers."
   (and gnus-nocem-hashtb
        (gethash id gnus-nocem-hashtb)))
 
+(autoload 'epg-make-context "epg")
+(eval-when-compile
+  (autoload 'epg-verify-string "epg")
+  (autoload 'epg-context-result-for "epg")
+  (autoload 'epg-signature-status "epg"))
+
+(defun gnus-nocem-epg-verify ()
+  "Return t if EasyPG verifies a signed message in the current buffer."
+  (let ((context (epg-make-context 'OpenPGP))
+       result)
+    (epg-verify-string context (buffer-string))
+    (and (setq result (epg-context-result-for context 'verify))
+        (not (cdr result))
+        (eq (epg-signature-status (car result)) 'good))))
+
 (provide 'gnus-nocem)
 
-;;; arch-tag: 0e0c74ea-2f8e-4f3e-8fff-09f767c1adef
 ;;; gnus-nocem.el ends here