nnimap: revert synchronous listing of nnimap
authorJulien Danjou <julien@danjou.info>
Wed, 5 Sep 2012 09:35:16 +0000 (11:35 +0200)
committerJulien Danjou <julien@danjou.info>
Wed, 5 Sep 2012 09:35:16 +0000 (11:35 +0200)
Signed-off-by: Julien Danjou <julien@danjou.info>
lisp/ChangeLog
lisp/nnimap.el

index 558add9..f7b26e9 100644 (file)
@@ -1,3 +1,8 @@
+2012-09-05  Julien Danjou  <julien@danjou.info>
+
+       * nnimap.el (nnimap-request-list): Revert change that made listing
+       synchronous.
+
 2012-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
 
        * dgnushack.el: XEmacs 21.5 compilation fix.
index 53bc2dd..5783f29 100644 (file)
@@ -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)