Function: gnus-read-header

gnus-read-header is a byte-compiled function defined in gnus-sum.el.gz.

Signature

(gnus-read-header ID &optional HEADER)

Documentation

Read the headers of article ID and enter them into the Gnus system.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
;;; Header reading.

(defun gnus-read-header (id &optional header)
  "Read the headers of article ID and enter them into the Gnus system."
  (let ((group gnus-newsgroup-name)
	(gnus-override-method
	 (or
	  gnus-override-method
	  (and (gnus-news-group-p gnus-newsgroup-name)
	       (car (gnus-refer-article-methods)))))
	where)
    ;; First we check to see whether the header in question is already
    ;; fetched.
    (if (stringp id)
	;; This is a Message-ID.
	(setq header (or header (gnus-id-to-header id)))
      ;; This is an article number.
      (setq header (or header (gnus-summary-article-header id))))
    (if (and header
	     (not (gnus-summary-article-sparse-p (mail-header-number header))))
	;; We have found the header.
	header
      ;; We have to really fetch the header to this article.
      (with-current-buffer nntp-server-buffer
	(when (setq where (gnus-request-head id group))
	  (nnheader-fold-continuation-lines)
	  (goto-char (point-max))
	  (insert ".\n")
	  (goto-char (point-min))
	  (insert "211 ")
	  (princ (cond
		  ((numberp id) id)
		  ((cdr where) (cdr where))
		  (header (mail-header-number header))
		  (t gnus-reffed-article-number))
		 (current-buffer))
	  (insert " Article retrieved.\n"))
	(if (or (not where)
		(not (setq header (car (gnus-get-newsgroup-headers nil t)))))
	    ()				; Malformed head.
	  (unless (gnus-summary-article-sparse-p (mail-header-number header))
            (when (and (bound-and-true-p gnus-registry-enabled)
                       (not (gnus-ephemeral-group-p (car where))))
              (gnus-registry-handle-action
               (mail-header-id header) nil
               (gnus-group-prefixed-name
		(car where)
		(or gnus-override-method (gnus-find-method-for-group group)))
               (mail-header-subject header)
               (mail-header-from header)))
	    (when (and (stringp id)
		       (or
			(not (string= (gnus-group-real-name group)
				      (car where)))
			(not (gnus-server-equal gnus-override-method
						(gnus-group-method group)))))
	      ;; If we fetched by Message-ID and the article came from
	      ;; a different group (or server), we fudge some bogus
	      ;; article numbers for this article.
	      (setf (mail-header-number header) gnus-reffed-article-number))
	    (with-current-buffer gnus-summary-buffer
              (decf gnus-reffed-article-number)
	      (gnus-remove-header (mail-header-number header))
	      (push header gnus-newsgroup-headers)
	      (setq gnus-current-headers header)
	      (push (mail-header-number header) gnus-newsgroup-limit)))
	  header)))))