Function: pop3-uidl-stat
pop3-uidl-stat is a byte-compiled function defined in pop3.el.gz.
Signature
(pop3-uidl-stat PROCESS)
Documentation
Return a list of unread message numbers and total size.
Source Code
;; Defined in /usr/src/emacs/lisp/net/pop3.el.gz
(defun pop3-uidl-stat (process)
"Return a list of unread message numbers and total size."
(pop3-send-command process "UIDL")
(let (err messages size)
(if (condition-case code
(progn
(pop3-read-response process)
t)
(error (setq err (error-message-string code))
nil))
(let ((start pop3-read-point)
saved list)
(with-current-buffer (process-buffer process)
(while (not (re-search-forward "^\\.\r\n" nil t))
(unless (memq (process-status process) '(open run))
(error "pop3 server closed the connection"))
(pop3-accept-process-output process)
(goto-char start))
(setq pop3-read-point (point-marker)
pop3-uidl nil)
(while (progn (forward-line -1) (>= (point) start))
(when (looking-at "[0-9]+ \\([^\n\r ]+\\)")
(push (match-string 1) pop3-uidl)))
(when pop3-uidl
(setq pop3-uidl-saved (pop3-uidl-load)
saved (cdr (assoc pop3-maildrop
(cdr (assoc pop3-mailhost
pop3-uidl-saved)))))
(let ((i (length pop3-uidl)))
(while (> i 0)
(unless (member (nth (1- i) pop3-uidl) saved)
(push i messages))
(decf i)))
(when messages
(setq list (pop3-list process)
size 0)
(dolist (msg messages)
(setq size (+ size (cdr (assq msg list)))))
(list messages size)))))
(message "%s doesn't support UIDL (%s), so we try a regressive way..."
pop3-mailhost err)
(sit-for 1)
(setq size (pop3-stat process))
(dotimes (i (car size)) (push (1+ i) messages))
(setcar size (nreverse messages))
size)))