Mercurial > emacs
annotate lisp/gnus/gnus-nocem.el @ 72863:526dc1f36b09
(produce_image_glyph): Automatically crop wide images at
right window edge so we can draw the cursor on the same row to
avoid confusing redisplay by placing the cursor outside the visible
window area.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Thu, 14 Sep 2006 09:37:44 +0000 |
parents | 29fe34ec2296 |
children | 183eba998a4d 494bf720eaf0 |
rev | line source |
---|---|
17493 | 1 ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
2 |
64754
fafd692d1e40
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64085
diff
changeset
|
3 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, |
68633
1077b8039c32
Update copyright notices of all files in the gnus directory.
Romain Francoise <romain@orebokech.com>
parents:
64754
diff
changeset
|
4 ;; 2005, 2006 Free Software Foundation, Inc. |
17493 | 5 |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
6 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> |
17493 | 7 ;; Keywords: news |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
64085 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
17493 | 25 |
26 ;;; Commentary: | |
27 | |
28 ;;; Code: | |
29 | |
19539
0f90eb270fc7
Require cl at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
17493
diff
changeset
|
30 (eval-when-compile (require 'cl)) |
0f90eb270fc7
Require cl at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
17493
diff
changeset
|
31 |
17493 | 32 (require 'gnus) |
33 (require 'nnmail) | |
34 (require 'gnus-art) | |
35 (require 'gnus-sum) | |
36 (require 'gnus-range) | |
37 | |
38 (defgroup gnus-nocem nil | |
63976
0629e50e00f6
(gnus-nocem): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63868
diff
changeset
|
39 "NoCeM pseudo-cancellation treatment." |
17493 | 40 :group 'gnus-score) |
41 | |
42 (defcustom gnus-nocem-groups | |
43 '("news.lists.filters" "news.admin.net-abuse.bulletins" | |
44 "alt.nocem.misc" "news.admin.net-abuse.announce") | |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
45 "*List of groups that will be searched for NoCeM messages." |
17493 | 46 :group 'gnus-nocem |
47 :type '(repeat (string :tag "Group"))) | |
48 | |
49 (defcustom gnus-nocem-issuers | |
32626 | 50 '("AutoMoose-1" ; CancelMoose[tm] |
51 "clewis@ferret.ocunix" ; Chris Lewis | |
52 "cosmo.roadkill" | |
53 "SpamHippo" | |
54 "hweede@snafu.de") | |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
55 "*List of NoCeM issuers to pay attention to. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
56 |
32626 | 57 This can also be a list of `(ISSUER CONDITION ...)' elements. |
58 | |
59 See <URL:http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html> for an | |
60 issuer registry." | |
17493 | 61 :group 'gnus-nocem |
56927
55fd4f77387a
Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523
Miles Bader <miles@gnu.org>
parents:
52401
diff
changeset
|
62 :link '(url-link "http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html") |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
63 :type '(repeat (choice string sexp))) |
17493 | 64 |
65 (defcustom gnus-nocem-directory | |
66 (nnheader-concat gnus-article-save-directory "NoCeM/") | |
67 "*Directory where NoCeM files will be stored." | |
68 :group 'gnus-nocem | |
69 :type 'directory) | |
70 | |
71 (defcustom gnus-nocem-expiry-wait 15 | |
72 "*Number of days to keep NoCeM headers in the cache." | |
73 :group 'gnus-nocem | |
74 :type 'integer) | |
75 | |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
76 (defcustom gnus-nocem-verifyer 'pgg-verify |
17493 | 77 "*Function called to verify that the NoCeM message is valid. |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
78 One likely value is `pgg-verify'. If the function in this variable |
17493 | 79 isn't bound, the message will be used unconditionally." |
80 :group 'gnus-nocem | |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
81 :type '(radio (function-item pgg-verify) |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
82 (function-item mc-verify) |
17493 | 83 (function :tag "other"))) |
84 | |
85 (defcustom gnus-nocem-liberal-fetch nil | |
86 "*If t try to fetch all messages which have @@NCM in the subject. | |
87 Otherwise don't fetch messages which have references or whose message-id | |
47936
54348dbd8b9c
(gnus-nocem-liberal-fetch): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
33178
diff
changeset
|
88 matches a previously scanned and verified nocem message." |
17493 | 89 :group 'gnus-nocem |
90 :type 'boolean) | |
91 | |
33178
23d4e36c09fc
(gnus-nocem-check-article-limit): Default to 500.
Dave Love <fx@gnu.org>
parents:
32626
diff
changeset
|
92 (defcustom gnus-nocem-check-article-limit 500 |
32599
0db9e380f3ec
(gnus-nocem-check-article-limit): New variable.
Miles Bader <miles@gnu.org>
parents:
31716
diff
changeset
|
93 "*If non-nil, the maximum number of articles to check in any NoCeM group." |
0db9e380f3ec
(gnus-nocem-check-article-limit): New variable.
Miles Bader <miles@gnu.org>
parents:
31716
diff
changeset
|
94 :group 'gnus-nocem |
32626 | 95 :version "21.1" |
32599
0db9e380f3ec
(gnus-nocem-check-article-limit): New variable.
Miles Bader <miles@gnu.org>
parents:
31716
diff
changeset
|
96 :type '(choice (const :tag "unlimited" nil) |
0db9e380f3ec
(gnus-nocem-check-article-limit): New variable.
Miles Bader <miles@gnu.org>
parents:
31716
diff
changeset
|
97 (integer 1000))) |
0db9e380f3ec
(gnus-nocem-check-article-limit): New variable.
Miles Bader <miles@gnu.org>
parents:
31716
diff
changeset
|
98 |
32626 | 99 (defcustom gnus-nocem-check-from t |
100 "Non-nil means check for valid issuers in message bodies. | |
101 Otherwise don't bother fetching articles unless their author matches a | |
102 valid issuer, which is much faster if you are selective about the issuers." | |
103 :group 'gnus-nocem | |
104 :version "21.1" | |
105 :type 'boolean) | |
106 | |
17493 | 107 ;;; Internal variables |
108 | |
109 (defvar gnus-nocem-active nil) | |
110 (defvar gnus-nocem-alist nil) | |
111 (defvar gnus-nocem-touched-alist nil) | |
112 (defvar gnus-nocem-hashtb nil) | |
113 (defvar gnus-nocem-seen-message-ids nil) | |
114 | |
115 ;;; Functions | |
116 | |
117 (defun gnus-nocem-active-file () | |
118 (concat (file-name-as-directory gnus-nocem-directory) "active")) | |
119 | |
120 (defun gnus-nocem-cache-file () | |
121 (concat (file-name-as-directory gnus-nocem-directory) "cache")) | |
122 | |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
123 ;; |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
124 ;; faster lookups for group names: |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
125 ;; |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
126 |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
127 (defvar gnus-nocem-real-group-hashtb nil |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
128 "Real-name mappings of subscribed groups.") |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
129 |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
130 (defun gnus-fill-real-hashtb () |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
131 "Fill up a hash table with the real-name mappings from the user's active file." |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
132 (setq gnus-nocem-real-group-hashtb (gnus-make-hashtable |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
133 (length gnus-newsrc-alist))) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
134 (mapcar (lambda (group) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
135 (setq group (gnus-group-real-name (car group))) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
136 (gnus-sethash group t gnus-nocem-real-group-hashtb)) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
137 gnus-newsrc-alist)) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
138 |
69362
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
139 ;;;###autoload |
17493 | 140 (defun gnus-nocem-scan-groups () |
141 "Scan all NoCeM groups for new NoCeM messages." | |
142 (interactive) | |
143 (let ((groups gnus-nocem-groups) | |
144 (gnus-inhibit-demon t) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
145 group active gactive articles check-headers) |
17493 | 146 (gnus-make-directory gnus-nocem-directory) |
147 ;; Load any previous NoCeM headers. | |
148 (gnus-nocem-load-cache) | |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
149 ;; Get the group name mappings: |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
150 (gnus-fill-real-hashtb) |
17493 | 151 ;; Read the active file if it hasn't been read yet. |
152 (and (file-exists-p (gnus-nocem-active-file)) | |
153 (not gnus-nocem-active) | |
154 (ignore-errors | |
155 (load (gnus-nocem-active-file) t t t))) | |
156 ;; Go through all groups and see whether new articles have | |
157 ;; arrived. | |
158 (while (setq group (pop groups)) | |
159 (if (not (setq gactive (gnus-activate-group group))) | |
160 () ; This group doesn't exist. | |
161 (setq active (nth 1 (assoc group gnus-nocem-active))) | |
162 (when (and (not (< (cdr gactive) (car gactive))) ; Empty group. | |
163 (or (not active) | |
164 (< (cdr active) (cdr gactive)))) | |
165 ;; Ok, there are new articles in this group, se we fetch the | |
166 ;; headers. | |
167 (save-excursion | |
168 (let ((dependencies (make-vector 10 nil)) | |
169 headers header) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
170 (with-temp-buffer |
17493 | 171 (setq headers |
172 (if (eq 'nov | |
173 (gnus-retrieve-headers | |
174 (setq articles | |
175 (gnus-uncompress-range | |
176 (cons | |
177 (if active (1+ (cdr active)) | |
178 (car gactive)) | |
179 (cdr gactive)))) | |
180 group)) | |
181 (gnus-get-newsgroup-headers-xover | |
182 articles nil dependencies) | |
183 (gnus-get-newsgroup-headers dependencies))) | |
184 (while (setq header (pop headers)) | |
185 ;; We take a closer look on all articles that have | |
186 ;; "@@NCM" in the subject. Unless we already read | |
187 ;; this cross posted message. Nocem messages | |
188 ;; are not allowed to have references, so we can | |
189 ;; ignore scanning followups. | |
190 (and (string-match "@@NCM" (mail-header-subject header)) | |
32626 | 191 (and gnus-nocem-check-from |
192 (let ((case-fold-search t)) | |
193 (catch 'ok | |
194 (mapcar | |
195 (lambda (author) | |
196 (if (consp author) | |
197 (setq author (car author))) | |
198 (if (string-match | |
199 author (mail-header-from header)) | |
200 (throw 'ok t))) | |
201 gnus-nocem-issuers) | |
202 nil))) | |
17493 | 203 (or gnus-nocem-liberal-fetch |
204 (and (or (string= "" (mail-header-references | |
205 header)) | |
206 (null (mail-header-references header))) | |
207 (not (member (mail-header-message-id header) | |
208 gnus-nocem-seen-message-ids)))) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
209 (push header check-headers))) |
69362
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
210 (setq check-headers (last (nreverse check-headers) |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
211 gnus-nocem-check-article-limit)) |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
212 (let ((i 0) |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
213 (len (length check-headers))) |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
214 (dolist (h check-headers) |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
215 (gnus-message |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
216 7 "Checking article %d in %s for NoCeM (%d of %d)..." |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
217 (mail-header-number h) group (incf i) len) |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
218 (gnus-nocem-check-article group h))))))) |
17493 | 219 (setq gnus-nocem-active |
220 (cons (list group gactive) | |
221 (delq (assoc group gnus-nocem-active) | |
222 gnus-nocem-active))))) | |
223 ;; Save the results, if any. | |
224 (gnus-nocem-save-cache) | |
225 (gnus-nocem-save-active))) | |
226 | |
227 (defun gnus-nocem-check-article (group header) | |
228 "Check whether the current article is an NCM article and that we want it." | |
229 ;; Get the article. | |
230 (let ((date (mail-header-date header)) | |
32626 | 231 (gnus-newsgroup-name group) |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
232 issuer b e type) |
17493 | 233 (when (or (not date) |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
234 (time-less-p |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
235 (time-since (date-to-time date)) |
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
236 (days-to-time gnus-nocem-expiry-wait))) |
17493 | 237 (gnus-request-article-this-buffer (mail-header-number header) group) |
238 (goto-char (point-min)) | |
69362
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
239 (when (re-search-forward |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
240 "-----BEGIN PGP\\( SIGNED\\)? MESSAGE-----" |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
241 nil t) |
17493 | 242 (delete-region (point-min) (match-beginning 0))) |
69362
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
243 (when (re-search-forward |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
244 "-----END PGP \\(MESSAGE\\|SIGNATURE\\)-----\n?" |
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
245 nil t) |
17493 | 246 (delete-region (match-end 0) (point-max))) |
247 (goto-char (point-min)) | |
248 ;; The article has to have proper NoCeM headers. | |
249 (when (and (setq b (search-forward "\n@@BEGIN NCM HEADERS\n" nil t)) | |
250 (setq e (search-forward "\n@@BEGIN NCM BODY\n" nil t))) | |
251 ;; We get the name of the issuer. | |
252 (narrow-to-region b e) | |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
253 (setq issuer (mail-fetch-field "issuer") |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
254 type (mail-fetch-field "type")) |
17493 | 255 (widen) |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
256 (if (not (gnus-nocem-message-wanted-p issuer type)) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
257 (message "invalid NoCeM issuer: %s" issuer) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
258 (and (gnus-nocem-verify-issuer issuer) ; She is who she says she is. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
259 (gnus-nocem-enter-article) ; We gobble the message. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
260 (push (mail-header-message-id header) ; But don't come back for |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
261 gnus-nocem-seen-message-ids))))))) ; second helpings. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
262 |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
263 (defun gnus-nocem-message-wanted-p (issuer type) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
264 (let ((issuers gnus-nocem-issuers) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
265 wanted conditions condition) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
266 (cond |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
267 ;; Do the quick check first. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
268 ((member issuer issuers) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
269 t) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
270 ((setq conditions (cdr (assoc issuer issuers))) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
271 ;; Check whether we want this type. |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
272 (while (setq condition (pop conditions)) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
273 (cond |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
274 ((stringp condition) |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
275 (when (string-match condition type) |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
276 (setq wanted t))) |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
277 ((and (consp condition) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
278 (eq (car condition) 'not) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
279 (stringp (cadr condition))) |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
280 (when (string-match (cadr condition) type) |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
281 (setq wanted nil))) |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
282 (t |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
283 (error "Invalid NoCeM condition: %S" condition)))) |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
284 wanted)))) |
17493 | 285 |
286 (defun gnus-nocem-verify-issuer (person) | |
287 "Verify using PGP that the canceler is who she says she is." | |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
288 (if (functionp gnus-nocem-verifyer) |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
289 (ignore-errors |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
290 (funcall gnus-nocem-verifyer)) |
17493 | 291 ;; If we don't have Mailcrypt, then we use the message anyway. |
292 t)) | |
293 | |
294 (defun gnus-nocem-enter-article () | |
295 "Enter the current article into the NoCeM cache." | |
296 (goto-char (point-min)) | |
297 (let ((b (search-forward "\n@@BEGIN NCM BODY\n" nil t)) | |
298 (e (search-forward "\n@@END NCM BODY\n" nil t)) | |
299 (buf (current-buffer)) | |
300 ncm id group) | |
301 (when (and b e) | |
302 (narrow-to-region b (1+ (match-beginning 0))) | |
303 (goto-char (point-min)) | |
304 (while (search-forward "\t" nil t) | |
305 (cond | |
306 ((not (ignore-errors | |
56927
55fd4f77387a
Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523
Miles Bader <miles@gnu.org>
parents:
52401
diff
changeset
|
307 (setq group (let ((obarray gnus-nocem-real-group-hashtb)) |
55fd4f77387a
Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523
Miles Bader <miles@gnu.org>
parents:
52401
diff
changeset
|
308 (read buf))))) |
17493 | 309 ;; An error. |
310 ) | |
311 ((not (symbolp group)) | |
312 ;; Ignore invalid entries. | |
313 ) | |
314 ((not (boundp group)) | |
315 ;; Make sure all entries in the hashtb are bound. | |
316 (set group nil)) | |
317 (t | |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
318 (when (gnus-gethash (gnus-group-real-name (symbol-name group)) |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
319 gnus-nocem-real-group-hashtb) |
17493 | 320 ;; Valid group. |
321 (beginning-of-line) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
322 (while (eq (char-after) ?\t) |
17493 | 323 (forward-line -1)) |
324 (setq id (buffer-substring (point) (1- (search-forward "\t")))) | |
63868
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
325 (unless (if gnus-nocem-hashtb |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
326 (gnus-gethash id gnus-nocem-hashtb) |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
327 (setq gnus-nocem-hashtb (gnus-make-hashtable)) |
e903f947651d
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-458
Miles Bader <miles@gnu.org>
parents:
56927
diff
changeset
|
328 nil) |
17493 | 329 ;; only store if not already present |
330 (gnus-sethash id t gnus-nocem-hashtb) | |
331 (push id ncm)) | |
332 (forward-line 1) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
333 (while (eq (char-after) ?\t) |
17493 | 334 (forward-line 1)))))) |
335 (when ncm | |
336 (setq gnus-nocem-touched-alist t) | |
337 (push (cons (let ((time (current-time))) (setcdr (cdr time) nil) time) | |
338 ncm) | |
339 gnus-nocem-alist)) | |
340 t))) | |
341 | |
69362
29fe34ec2296
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-147
Miles Bader <miles@gnu.org>
parents:
68633
diff
changeset
|
342 ;;;###autoload |
17493 | 343 (defun gnus-nocem-load-cache () |
344 "Load the NoCeM cache." | |
345 (interactive) | |
346 (unless gnus-nocem-alist | |
347 ;; The buffer doesn't exist, so we create it and load the NoCeM | |
348 ;; cache. | |
349 (when (file-exists-p (gnus-nocem-cache-file)) | |
350 (load (gnus-nocem-cache-file) t t t) | |
351 (gnus-nocem-alist-to-hashtb)))) | |
352 | |
353 (defun gnus-nocem-save-cache () | |
354 "Save the NoCeM cache." | |
355 (when (and gnus-nocem-alist | |
356 gnus-nocem-touched-alist) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
357 (with-temp-file (gnus-nocem-cache-file) |
17493 | 358 (gnus-prin1 `(setq gnus-nocem-alist ',gnus-nocem-alist))) |
359 (setq gnus-nocem-touched-alist nil))) | |
360 | |
361 (defun gnus-nocem-save-active () | |
362 "Save the NoCeM active file." | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
363 (with-temp-file (gnus-nocem-active-file) |
17493 | 364 (gnus-prin1 `(setq gnus-nocem-active ',gnus-nocem-active)))) |
365 | |
366 (defun gnus-nocem-alist-to-hashtb () | |
367 "Create a hashtable from the Message-IDs we have." | |
368 (let* ((alist gnus-nocem-alist) | |
369 (pprev (cons nil alist)) | |
370 (prev pprev) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
371 (expiry (days-to-time gnus-nocem-expiry-wait)) |
17493 | 372 entry) |
373 (setq gnus-nocem-hashtb (gnus-make-hashtable (* (length alist) 51))) | |
374 (while (setq entry (car alist)) | |
31716
9968f55ad26e
Update to emacs-21-branch of the Gnus CVS repository.
Gerd Moellmann <gerd@gnu.org>
parents:
24357
diff
changeset
|
375 (if (not (time-less-p (time-since (car entry)) expiry)) |
17493 | 376 ;; This entry has expired, so we remove it. |
377 (setcdr prev (cdr alist)) | |
378 (setq prev alist) | |
379 ;; This is ok, so we enter it into the hashtable. | |
380 (setq entry (cdr entry)) | |
381 (while entry | |
382 (gnus-sethash (car entry) t gnus-nocem-hashtb) | |
383 (setq entry (cdr entry)))) | |
384 (setq alist (cdr alist))))) | |
385 | |
386 (gnus-add-shutdown 'gnus-nocem-close 'gnus) | |
387 | |
388 (defun gnus-nocem-close () | |
389 "Clear internal NoCeM variables." | |
390 (setq gnus-nocem-alist nil | |
391 gnus-nocem-hashtb nil | |
392 gnus-nocem-active nil | |
393 gnus-nocem-touched-alist nil | |
19969
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
394 gnus-nocem-seen-message-ids nil |
5f1ab3dd344d
*** empty log message ***
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19539
diff
changeset
|
395 gnus-nocem-real-group-hashtb nil)) |
17493 | 396 |
397 (defun gnus-nocem-unwanted-article-p (id) | |
398 "Say whether article ID in the current group is wanted." | |
24357
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
399 (and gnus-nocem-hashtb |
15fc6acbae7a
Upgrading to Gnus 5.7; see ChangeLog
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents:
19969
diff
changeset
|
400 (gnus-gethash id gnus-nocem-hashtb))) |
17493 | 401 |
402 (provide 'gnus-nocem) | |
403 | |
52401 | 404 ;;; arch-tag: 0e0c74ea-2f8e-4f3e-8fff-09f767c1adef |
17493 | 405 ;;; gnus-nocem.el ends here |