;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2004
+;; Free Software Foundation, Inc.
+
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news
:type '(repeat (string :tag "Group")))
(defcustom gnus-nocem-issuers
- '("AutoMoose-1" "Automoose-1" ; CancelMoose[tm]
- "rbraver@ohww.norman.ok.us" ; Robert Braver
- "clewis@ferret.ocunix.on.ca" ; Chris Lewis
- "jem@xpat.com" ; Despammer from Korea
- "snowhare@xmission.com" ; Benjamin "Snowhare" Franz
- "red@redpoll.mrfs.oh.us (Richard E. Depew)") ; ARMM! ARMM!
+ '("AutoMoose-1" ; CancelMoose[tm]
+ "clewis@ferret.ocunix" ; Chris Lewis
+ "cosmo.roadkill"
+ "SpamHippo"
+ "hweede@snafu.de")
"*List of NoCeM issuers to pay attention to.
-This can also be a list of `(ISSUER CONDITIONS)' elements."
+This can also be a list of `(ISSUER CONDITION ...)' elements.
+
+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)))
(defcustom gnus-nocem-directory
(defcustom gnus-nocem-liberal-fetch nil
"*If t try to fetch all messages which have @@NCM in the subject.
Otherwise don't fetch messages which have references or whose message-id
-matches an previously scanned and verified nocem message."
+matches a previously scanned and verified nocem message."
+ :group 'gnus-nocem
+ :type 'boolean)
+
+(defcustom gnus-nocem-check-article-limit 500
+ "*If non-nil, the maximum number of articles to check in any NoCeM group."
+ :group 'gnus-nocem
+ :version "21.1"
+ :type '(choice (const :tag "unlimited" nil)
+ (integer 1000)))
+
+(defcustom gnus-nocem-check-from t
+ "Non-nil means check for valid issuers in message bodies.
+Otherwise don't bother fetching articles unless their author matches a
+valid issuer, which is much faster if you are selective about the issuers."
:group 'gnus-nocem
+ :version "21.1"
:type 'boolean)
;;; Internal variables
;; are not allowed to have references, so we can
;; ignore scanning followups.
(and (string-match "@@NCM" (mail-header-subject header))
+ (and gnus-nocem-check-from
+ (let ((case-fold-search t))
+ (catch 'ok
+ (mapc
+ (lambda (author)
+ (if (consp author)
+ (setq author (car author)))
+ (if (string-match
+ author (mail-header-from header))
+ (throw 'ok t)))
+ gnus-nocem-issuers)
+ nil)))
(or gnus-nocem-liberal-fetch
(and (or (string= "" (mail-header-references
header))
(not (member (mail-header-message-id header)
gnus-nocem-seen-message-ids))))
(push header check-headers)))
- (let ((i 0)
- (len (length check-headers)))
+ (let* ((i 0)
+ (check-headers
+ (last check-headers gnus-nocem-check-article-limit))
+ (len (length check-headers)))
(dolist (h check-headers)
(gnus-message
7 "Checking article %d in %s for NoCeM (%d of %d)..."
"Check whether the current article is an NCM article and that we want it."
;; Get the article.
(let ((date (mail-header-date header))
+ (gnus-newsgroup-name group)
issuer b e type)
(when (or (not date)
(time-less-p
(while (search-forward "\t" nil t)
(cond
((not (ignore-errors
- (setq group (let ((obarray gnus-active-hashtb)) (read buf)))))
+ (setq group (let ((obarray gnus-nocem-real-group-hashtb))
+ (read buf)))))
;; An error.
)
((not (symbolp group))