;;; 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-2013 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news
"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.
(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))
(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))
`(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
(setq gnus-async-current-prefetch-article nil)
(when arg
(gnus-async-set-buffer)
- (when gnus-async-post-fetch-function
- (save-excursion
- (save-restriction
- (narrow-to-region mark (point-max))
+ (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))
+ (when gnus-async-post-fetch-function
(funcall gnus-async-post-fetch-function summary))))
(gnus-async-with-semaphore
(setq
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))
(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."
"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