Function: nnimap-request-list

nnimap-request-list is a byte-compiled function defined in nnimap.el.gz.

Signature

(nnimap-request-list &optional SERVER)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/nnimap.el.gz
(deffoo nnimap-request-list (&optional server)
  (when (nnimap-change-group nil server)
    (with-current-buffer nntp-server-buffer
      (erase-buffer)
      (let ((groups
	     (with-current-buffer (nnimap-buffer)
	       (nnimap-get-groups)))
	    sequences responses)
	(when groups
	  (with-current-buffer (nnimap-buffer)
	    (setf (nnimap-group nnimap-object) nil)
	    (dolist (group groups)
	      (setf (nnimap-examined nnimap-object) group)
	      (push (list (nnimap-send-command "EXAMINE %S"
					       (nnimap-group-to-imap group))
			  group)
		    sequences))
	    (nnimap-wait-for-response (caar sequences))
	    (setq responses
		  (nnimap-get-responses (mapcar #'car sequences))))
	  (dolist (response responses)
	    (let* ((sequence (car response))
		   (response (cadr response))
		   (group (cadr (assoc sequence sequences))))
	      (when (and group
			 (equal (caar response) "OK"))
		(let ((uidnext (nnimap-find-parameter "UIDNEXT" response))
		      highest exists)
		  (dolist (elem response)
		    (when (equal (cadr elem) "EXISTS")
		      (setq exists (string-to-number (car elem)))))
		  (when uidnext
		    (setq highest (1- (string-to-number (car uidnext)))))
		  (cond
		   ((null highest)
		    (insert (format "%S 0 1 y\n" group)))
		   ((zerop exists)
		    ;; Empty group.
		    (insert (format "%S %d %d y\n" group
				    highest (1+ highest))))
		   (t
		    ;; Return the widest possible range.
		    (insert (format "%S %d 1 y\n" group
				    (or highest exists)))))))))
	  t)))))