X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-async.el;h=9bb28f3a05d00fe0d0c759092437ecb0e283aa04;hb=06b90ae8fdfbe69d395e9d8cc1c0854d3b1d7b42;hp=a39821cb1184aa129b316afc19c66eea69a8cd1b;hpb=93112af86b3e0d6c1c2afe6a21b4ae9b9855df20;p=gnus diff --git a/lisp/gnus-async.el b/lisp/gnus-async.el index a39821cb1..9bb28f3a0 100644 --- a/lisp/gnus-async.el +++ b/lisp/gnus-async.el @@ -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)) @@ -228,17 +226,23 @@ 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 (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)) - (funcall gnus-async-post-fetch-function)))) + (save-excursion + (save-restriction + (narrow-to-region mark (point-max)) + ;; 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 @@ -312,7 +316,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." @@ -328,8 +333,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 @@ -384,5 +389,4 @@ that was fetched." (provide 'gnus-async) -;; arch-tag: fee61de5-3ea2-4de6-8578-2f90ce89391d ;;; gnus-async.el ends here