Function: nnfolder-retrieve-headers

nnfolder-retrieve-headers is a byte-compiled function defined in nnfolder.el.gz.

Signature

(nnfolder-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/nnfolder.el.gz
(deffoo nnfolder-retrieve-headers (articles &optional group server fetch-old)
  (with-current-buffer nntp-server-buffer
    (erase-buffer)
    (let (article start stop num)
      (nnfolder-possibly-change-group group server)
      (when nnfolder-current-buffer
	(set-buffer nnfolder-current-buffer)
	(goto-char (point-min))
	(if (stringp (car articles))
	    'headers
	  (if (nnfolder-retrieve-headers-with-nov articles fetch-old)
	      'nov
	    (setq articles (gnus-sorted-intersection
			    ;; Is ARTICLES sorted?
			    (sort articles #'<)
			    (nnfolder-existing-articles)))
	    (while (setq article (pop articles))
	      (set-buffer nnfolder-current-buffer)
	      (cond ((nnfolder-goto-article article)
		     (setq start (point))
		     (setq stop (if (search-forward "\n\n" nil t)
				    (1- (point))
				  (point-max)))
		     (set-buffer nntp-server-buffer)
		     (insert (format "221 %d Article retrieved.\n" article))
		     (insert-buffer-substring nnfolder-current-buffer
					      start stop)
		     (goto-char (point-max))
		     (insert ".\n"))

		    ;; If we couldn't find this article, skip over ranges
		    ;; of missing articles so we don't search the whole file
		    ;; for each of them.
		    ((numberp article)
		     (setq start (point))
		     (and
		      ;; Check that we are either at BOF or after an
		      ;; article with a lower number.  We do this so we
		      ;; won't be confused by out-of-order article numbers,
		      ;; as caused by active file bogosity.
		      (cond
		       ((bobp))
		       ((search-backward (concat "\n" nnfolder-article-marker)
					 nil t)
			(goto-char (match-end 0))
			(setq num (string-to-number
				   (buffer-substring
				    (point) (point-at-eol))))
			(goto-char start)
			(< num article)))
		      ;; Check that we are before an article with a
		      ;; higher number.
		      (search-forward (concat "\n" nnfolder-article-marker)
				      nil t)
		      (progn
			(setq num (string-to-number
				   (buffer-substring
				    (point) (point-at-eol))))
			(> num article))
		      ;; Discard any article numbers before the one we're
		      ;; now looking at.
		      (while (and articles
				  (< (car articles) num))
			(setq articles (cdr articles))))
		     (goto-char start))))
	    (set-buffer nntp-server-buffer)
	    (nnheader-fold-continuation-lines)
	    'headers))))))