Gnus development mailing list
 help / color / mirror / Atom feed
* Adding unplugged functions to spam-report.el in v5-10
@ 2005-04-21 19:56 Reiner Steib
  2005-04-22 17:36 ` Ted Zlatanov
  0 siblings, 1 reply; 3+ messages in thread
From: Reiner Steib @ 2005-04-21 19:56 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 969 bytes --]

Hi,

14 month ago we added the possibility to collect spam-reports in
unplugged more and submit all the requests when plugged.

As this is quite well tested and unlikely to break anything, I'd like
to add this to v5-10 too.  Objection?

	* spam-report.el (spam-report-unplug-agent)
	(spam-report-plug-agent, spam-report-deagentize)
	(spam-report-agentize, spam-report-url-ping-temp-agent-function):
	support for the Agent in spam-report: when unplugged, report to a
	file; when plugged, submit all the requests.
	[Added missing offline functionality from trunk.]

	* spam-report.el (spam-report-url-to-file)
	(spam-report-requests-file): New function and variable for offline
	reporting.
	(spam-report-url-ping-function): Add `spam-report-url-to-file'
	and user defined function.
	(spam-report-process-queue): New function.
	Process requests from `spam-report-requests-file'.
	(spam-report-url-ping-mm-url): Autoload
	[Added missing offline functionality from trunk.]


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: rs-spam-report-gmane-offline-03.patch --]
[-- Type: text/x-patch, Size: 6326 bytes --]

--- spam-report.el	26 Nov 2004 03:07:44 -0000	6.9.2.2
+++ spam-report.el	21 Apr 2005 19:54:01 -0000
@@ -59,14 +59,32 @@
 
 (defcustom spam-report-url-ping-function
   'spam-report-url-ping-plain
-  "Function to use for url ping spam reporting."
+  "Function to use for url ping spam reporting.
+The function must accept the arguments `host' and `report'."
   :type '(choice
 	  (const :tag "Connect directly"
 		 spam-report-url-ping-plain)
 	  (const :tag "Use the external program specified in `mm-url-program'"
-		 spam-report-url-ping-mm-url))
+		 spam-report-url-ping-mm-url)
+	  (const :tag "Store request URLs in `spam-report-requests-file'"
+		 spam-report-url-to-file)
+	  (function :tag "User defined function" nil))
   :group 'spam-report)
 
+(defcustom spam-report-requests-file
+  (nnheader-concat gnus-directory "spam/" "spam-report-requests.url")
+  ;; Is there a convention for the extension of such a file?
+  ;; Should we use `spam-directory'?
+  "File where spam report request are stored."
+  :type 'file
+  :group 'spam-report)
+
+(defvar spam-report-url-ping-temp-agent-function nil
+  "Internal variable for `spam-report-agentize' and `spam-report-deagentize'.
+This variable will store the value of `spam-report-url-ping-function' from
+before `spam-report-agentize' was run, so that `spam-report-deagentize' can
+undo that change.")
+
 (defun spam-report-gmane (&rest articles)
   "Report an article as spam through Gmane"
   (dolist (article articles)
@@ -75,10 +93,11 @@
 		   (string-match spam-report-gmane-regex gnus-newsgroup-name)))
       (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article)
       (if spam-report-gmane-use-article-number
-	  (spam-report-url-ping "spam.gmane.org"
-				(format "/%s:%d"
-					(gnus-group-real-name gnus-newsgroup-name)
-					article))
+	  (spam-report-url-ping 
+	   "spam.gmane.org"
+	   (format "/%s:%d"
+		   (gnus-group-real-name gnus-newsgroup-name)
+		   article))
 	(with-current-buffer nntp-server-buffer
 	  (gnus-request-head article gnus-newsgroup-name)
 	  (goto-char (point-min))
@@ -113,13 +132,112 @@
        (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n"
 	       report (gnus-emacs-version) host)))))
 
+;;;###autoload
+(defun spam-report-process-queue (&optional file keep)
+  "Report all queued requests from `spam-report-requests-file'.
+
+If FILE is given, use it instead of `spam-report-requests-file'.
+If KEEP is t, leave old requests in the file.  If KEEP is the
+symbol `ask', query before flushing the queue file."
+  (interactive
+   (list (read-file-name
+	  "File: "
+	  (file-name-directory spam-report-requests-file)
+	  spam-report-requests-file
+	  nil
+	  (file-name-nondirectory spam-report-requests-file))
+	 current-prefix-arg))
+  (if (eq spam-report-url-ping-function 'spam-report-url-to-file)
+      (error (concat "Cannot process requests when "
+		     "`spam-report-url-ping-function' is "
+		     "`spam-report-url-to-file'."))
+    (gnus-message 7 "Processing requests using `%s'."
+		  spam-report-url-ping-function))
+  (or file (setq file spam-report-requests-file))
+  (save-excursion
+    (set-buffer (find-file-noselect file))
+    (goto-char (point-min))
+    (while (and (not (eobp))
+		(re-search-forward
+		 "http://\\([^/]+\\)\\(/.*\\) *$" (point-at-eol) t))
+      (funcall spam-report-url-ping-function (match-string 1) (match-string 2))
+      (forward-line 1))
+    (if (or (eq keep nil)
+	    (and (eq keep 'ask)
+		 (y-or-n-p
+		  (format
+		   "Flush requests from `%s'? " (current-buffer)))))
+	(progn
+	  (gnus-message 7 "Flushing request file `%s'"
+			spam-report-requests-file)
+	  (erase-buffer)
+	  (save-buffer)
+	  (kill-buffer (current-buffer)))
+      (gnus-message 7 "Keeping requests in `%s'" spam-report-requests-file))))
+
+;;;###autoload
 (defun spam-report-url-ping-mm-url (host report)
   "Ping a host through HTTP, addressing a specific GET resource. Use
 the external program specified in `mm-url-program' to connect to
 server."
   (with-temp-buffer
-    (let ((url (concat "http://" host "/" report)))
+    (let ((url (concat "http://" host report)))
       (mm-url-insert url t))))
+
+;;;###autoload
+(defun spam-report-url-to-file (host report)
+  "Collect spam report requests in `spam-report-requests-file'.
+Customize `spam-report-url-ping-function' to use this function."
+  (let ((url (concat "http://" host report))
+	(file spam-report-requests-file))
+    (gnus-make-directory (file-name-directory file))
+    (gnus-message 9 "Writing URL `%s' to file `%s'" url file)
+    (with-temp-buffer
+      (insert url)
+      (newline)
+      (append-to-file (point-min) (point-max) file))))
+
+;;;###autoload
+(defun spam-report-agentize ()
+  "Add spam-report support to the Agent.
+Spam reports will be queued with \\[spam-report-url-to-file] when
+the Agent is unplugged, and will be submitted in a batch when the
+Agent is plugged."
+  (interactive)
+  (add-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+  (add-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+;;;###autoload
+(defun spam-report-deagentize ()
+  "Remove spam-report support from the Agent.
+Spam reports will be queued with the method used when
+\\[spam-report-agentize] was run."
+  (interactive)
+  (remove-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+  (remove-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+(defun spam-report-plug-agent ()
+  "Adjust spam report settings for plugged state.
+Process queued spam reports."
+  ;; Process the queue, unless the user only wanted to report to a file
+  ;; anyway.
+  (unless (equal spam-report-url-ping-temp-agent-function
+		 'spam-report-url-to-file)
+    (spam-report-process-queue))
+  ;; Set the reporting function, if we have memorized something otherwise,
+  ;; stick with plain URL reporting.
+  (setq spam-report-url-ping-function
+	(or spam-report-url-ping-temp-agent-function
+	    'spam-report-url-ping-plain)))
+
+(defun spam-report-unplug-agent ()
+  "Restore spam report settings for unplugged state."
+  ;; save the old value
+  (setq spam-report-url-ping-temp-agent-function
+	spam-report-url-ping-function)
+  ;; store all reports to file
+  (setq spam-report-url-ping-function
+	'spam-report-url-to-file))
 
 (provide 'spam-report)
 

[-- Attachment #3: Type: text/plain, Size: 114 bytes --]


Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Adding unplugged functions to spam-report.el in v5-10
  2005-04-21 19:56 Adding unplugged functions to spam-report.el in v5-10 Reiner Steib
@ 2005-04-22 17:36 ` Ted Zlatanov
  2005-04-24 17:18   ` Reiner Steib
  0 siblings, 1 reply; 3+ messages in thread
From: Ted Zlatanov @ 2005-04-22 17:36 UTC (permalink / raw)


On Thu, 21 Apr 2005, reinersteib+gmane@imap.cc wrote:

> 14 month ago we added the possibility to collect spam-reports in
> unplugged more and submit all the requests when plugged.
> 
> As this is quite well tested and unlikely to break anything, I'd like
> to add this to v5-10 too.  Objection?

None here, I think that's fine.

Ted



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Adding unplugged functions to spam-report.el in v5-10
  2005-04-22 17:36 ` Ted Zlatanov
@ 2005-04-24 17:18   ` Reiner Steib
  0 siblings, 0 replies; 3+ messages in thread
From: Reiner Steib @ 2005-04-24 17:18 UTC (permalink / raw)
  Cc: Miles Bader

On Fri, Apr 22 2005, Ted Zlatanov wrote:

> On Thu, 21 Apr 2005, reinersteib+gmane@imap.cc wrote:
>
>> 14 month ago we added the possibility to collect spam-reports in
>> unplugged more and submit all the requests when plugged.
>> 
>> As this is quite well tested and unlikely to break anything, I'd like
>> to add this to v5-10 too.  Objection?
>
> None here, I think that's fine.

Committed.

Miles, these changed don't need to be merged to the trunk, of course.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-04-24 17:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-21 19:56 Adding unplugged functions to spam-report.el in v5-10 Reiner Steib
2005-04-22 17:36 ` Ted Zlatanov
2005-04-24 17:18   ` Reiner Steib

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).