auth-source.el (auth-source-search): Clarify :create's meaning
[gnus] / lisp / gnus-async.el
index a2ab54b..d4d3dba 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-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -75,8 +74,9 @@ 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)
+  :type '(choice (const nil) function))
 
 ;;; Internal variables.
 
@@ -226,9 +226,6 @@ that was fetched."
   `(lambda (arg)
      (gnus-async-article-callback arg ,group ,article ,mark ,summary ,next)))
 
-(eval-when-compile
-  (autoload 'gnus-html-prefetch-images "gnus-html"))
-
 (defun gnus-async-article-callback (arg group article mark summary next)
   "Function called when an async article is done being fetched."
   (save-excursion
@@ -238,6 +235,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))
@@ -248,7 +251,7 @@ that was fetched."
         gnus-async-article-alist
         (cons (list (intern (format "%s-%d" group article)
                             gnus-async-hashtb)
-                    mark (set-marker (make-marker) (point-max))
+                    mark (point-max-marker)
                     group article)
               gnus-async-article-alist))))
     (if (not (gnus-buffer-live-p summary))
@@ -316,7 +319,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."
@@ -332,8 +336,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