gnus-notifications: add actions support
[gnus] / lisp / gnus-async.el
index 979e671..603952d 100644 (file)
@@ -1,7 +1,6 @@
 ;;; gnus-async.el --- asynchronous support for Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2012 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -75,6 +74,7 @@ It should return non-nil if the article is to be prefetched."
   "Function called after an article has been prefetched.
 The function will be called narrowed to the region of the article
 that was fetched."
+  :version "24.1"
   :group 'gnus-asynchronous
   :type 'function)
 
@@ -145,8 +145,7 @@ that was fetched."
   (when (and (gnus-buffer-live-p summary)
             gnus-asynchronous
             (gnus-group-asynchronous-p group))
-    (save-excursion
-      (set-buffer gnus-summary-buffer)
+    (with-current-buffer gnus-summary-buffer
       (let ((next (caadr (gnus-data-find-list article))))
        (when next
          (if (not (fboundp 'run-with-idle-timer))
@@ -205,8 +204,7 @@ that was fetched."
 
          (when (and do-fetch article)
            ;; We want to fetch some more articles.
-           (save-excursion
-             (set-buffer summary)
+           (with-current-buffer summary
              (let (mark)
                (gnus-async-set-buffer)
                (goto-char (point-max))
@@ -240,6 +238,12 @@ that was fetched."
       (save-excursion
        (save-restriction
          (narrow-to-region mark (point-max))
+         ;; Put the articles into the agent, if they aren't already.
+         (when (and gnus-agent
+                    (gnus-agent-group-covered-p group))
+           (save-restriction
+             (narrow-to-region mark (point-max))
+             (gnus-agent-store-article article group)))
          ;; Prefetch images for the groups that want that.
          (when (fboundp 'gnus-html-prefetch-images)
            (gnus-html-prefetch-images summary))
@@ -318,7 +322,8 @@ that was fetched."
     (set-marker (caddr entry) nil))
   (gnus-async-with-semaphore
     (setq gnus-async-article-alist
-         (delq entry gnus-async-article-alist))))
+         (delq entry gnus-async-article-alist))
+    (unintern (car entry) gnus-async-hashtb)))
 
 (defun gnus-async-prefetch-remove-group (group)
   "Remove all articles belonging to GROUP from the prefetch buffer."
@@ -334,8 +339,8 @@ that was fetched."
   "Return the entry for ARTICLE in GROUP if it has been prefetched."
   (let ((entry (save-excursion
                 (gnus-async-set-buffer)
-                (assq (intern (format "%s-%d" group article)
-                              gnus-async-hashtb)
+                (assq (intern-soft (format "%s-%d" group article)
+                                   gnus-async-hashtb)
                       gnus-async-article-alist))))
     ;; Perhaps something has emptied the buffer?
     (if (and entry