From ac8c99968624159a827d8f6db842d9fcc22c7a60 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Wed, 5 Sep 2012 11:35:16 +0200 Subject: [PATCH] nnimap: revert synchronous listing of nnimap Signed-off-by: Julien Danjou --- lisp/ChangeLog | 5 ++++ lisp/nnimap.el | 71 +++++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 558add9d5..f7b26e988 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-09-05 Julien Danjou + + * nnimap.el (nnimap-request-list): Revert change that made listing + synchronous. + 2012-09-03 Lars Ingebrigtsen * dgnushack.el: XEmacs 21.5 compilation fix. diff --git a/lisp/nnimap.el b/lisp/nnimap.el index 53bc2dd9f..5783f29d8 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -1200,35 +1200,48 @@ If LIMIT, first try to limit the search to the N last articles." (when (nnimap-change-group nil server) (with-current-buffer nntp-server-buffer (erase-buffer) - (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-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))) + (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))))) (deffoo nnimap-request-newgroups (date &optional server) (when (nnimap-change-group nil server) -- 2.25.1