- (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"
- (utf7-encode group t))
- 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)))
- (egroup (encode-coding-string group 'utf-8)))
- (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" egroup)))
- ((zerop exists)
- ;; Empty group.
- (insert (format "%S %d %d y\n" egroup
- highest (1+ highest))))
- (t
- ;; Return the widest possible range.
- (insert (format "%S %d 1 y\n" egroup
- (or highest exists)))))))))
- t)))))
+ (dolist (response
+ (with-current-buffer (nnimap-buffer)
+ ;; Build a list of (group result-of-EXAMINE) for each group
+ (mapcar
+ (lambda (group)
+ (list group (cdr (nnimap-possibly-change-group group server nil t))))
+ (nnimap-get-groups))))
+ (let ((group (encode-coding-string (car response) 'utf-8))
+ (response (cadr response)))
+ (when (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)))