* elmo-imap4.el (elmo-imap4-mailbox-size-update-maybe): Ignore
authordmaus <dmaus>
Sun, 18 Jul 2010 18:02:11 +0000 (18:02 +0000)
committerdmaus <dmaus>
Sun, 18 Jul 2010 18:02:11 +0000 (18:02 +0000)
EXPUNGE responses.
(elmo-imap4-mailbox-size-update-maybe): Use latest EXIST or RECENT
response value.

If the mailbox size changes due to EXPUNGE by another client the
server will inform us with a EXISTS or RECENT response.  If the
expunging didn't change the mailbox size the server might not do so.

If there are more than one EXISTS or RECENT response, use the latest.

elmo/ChangeLog
elmo/elmo-imap4.el

index 9881ba9..8e3052b 100644 (file)
@@ -1,3 +1,10 @@
+2010-07-18  David Maus  <dmaus@ictsoc.de>
+
+       * elmo-imap4.el (elmo-imap4-mailbox-size-update-maybe): Ignore
+       EXPUNGE responses.
+       (elmo-imap4-mailbox-size-update-maybe): Use latest EXIST or RECENT
+       response value.
+
 2010-07-02  David Maus  <dmaus@ictsoc.de>
 
        * elmo-imap4.el (elmo-server-diff-async): Remove.  Unused luna
index 8901194..6aae78d 100644 (file)
@@ -287,30 +287,20 @@ Debug information is inserted in the buffer \"*IMAP4 DEBUG*\"")
 
 (defun elmo-imap4-mailbox-size-update-maybe (session response)
   "Update size of selected mailbox in SESSION according to RESPONSE."
-  (let ((exists (elmo-imap4-response-value response 'exists))
-       (recent (elmo-imap4-response-value response 'recent))
+  (let ((exists (elmo-imap4-response-value-all response 'exists))
+       (recent (elmo-imap4-response-value-all response 'recent))
        (current-size (or (elmo-imap4-session-current-mailbox-size-internal
-                          session) (cons nil nil)))
-       (expunge 0))
-    (when (assq 'expunge response)
-      (mapc '(lambda (r)
-              (if (eq (car r) 'expunge)
-                  (setq expunge (1+ expunge)))) response))
-    (when (or (> expunge 0) exists recent)
-      (when (> expunge 0)
-       (if (null (car current-size))
-           (elmo-imap4-debug "[%s] -> (bug) cannot reduce mailbox size"
-                             (format-time-string "%T"))
-         (setcar current-size (- (car current-size)
-                                 expunge))))
-      (if exists (setcar current-size exists))
-      (if recent (setcdr current-size recent))
-      (elmo-imap4-session-set-current-mailbox-size-internal
-       session current-size)
-      (elmo-imap4-debug "[%s] -> mailbox size adjusted: %s, %s"
-                       (format-time-string "%T")
-                       (elmo-imap4-session-current-mailbox-internal session)
-                       current-size))))
+                          session) (cons nil nil))))
+    (if exists (setcar current-size (if (atom exists)
+                                       exists (car (last exists)))))
+    (if recent (setcdr current-size (if (atom recent)
+                                       recent (car (last recent)))))
+    (elmo-imap4-session-set-current-mailbox-size-internal
+     session current-size)
+    (elmo-imap4-debug "[%s] -> mailbox size adjusted: %s, %s"
+                     (format-time-string "%T")
+                     (elmo-imap4-session-current-mailbox-internal session)
+                     current-size)))
 
 ;;; Session commands.