*** empty log message ***
[gnus] / lisp / gnus-demon.el
index 1038ab6..3ee19b8 100644 (file)
 
 ;;; Code:
 
+(require 'gnus-load)
+(require 'gnus-int)
+(require 'nnheader)
 (require 'gnus)
-
-(eval-when-compile (require 'cl))
+(eval-and-compile
+  (if (string-match "XEmacs" (emacs-version))
+      (require 'itimer)
+    (require 'timer)))
 
 (defvar gnus-demon-handlers nil
   "Alist of daemonic handlers to be run at intervals.
@@ -82,7 +87,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
   (interactive)
   (gnus-demon-cancel)
   (if (null gnus-demon-handlers)
-      () ; Nothing to do.
+      ()                               ; Nothing to do.
     ;; Set up timer.
     (setq gnus-demon-timer 
          (nnheader-run-at-time 
@@ -106,7 +111,10 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
   (and gnus-demon-timer
        (nnheader-cancel-timer gnus-demon-timer))
   (setq gnus-demon-timer nil
-       gnus-use-demon nil))
+       gnus-use-demon nil)
+  (condition-case ()
+      (nnheader-cancel-function-timers 'gnus-demon)
+    (error t)))
 
 (defun gnus-demon-is-idle-p ()
   "Whether Emacs is idle or not."
@@ -211,11 +219,22 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
 (defun gnus-demon-scan-mail ()
   (let ((servers gnus-opened-servers)
        server)
-    (while servers
-      (setq server (car (pop servers)))
+    (while (setq server (car (pop servers)))
       (and (gnus-check-backend-function 'request-scan (car server))
+          (or (gnus-server-opened server)
+              (gnus-open-server server))
           (gnus-request-scan nil server)))))
 
+(defun gnus-demon-add-rescan ()
+  "Add daemonic scanning of new articles from all backends."
+  (gnus-demon-add-handler 'gnus-demon-scan-news 120 60))
+
+(defun gnus-demon-scan-news ()
+  (when (gnus-alive-p)
+    (save-excursion
+      (set-buffer gnus-group-buffer)
+      (gnus-group-get-new-news))))
+
 (provide 'gnus-demon)
 
 ;;; gnus-demon.el ends here