* elmo-util.el (elmo-parse-token): Fixed how to treat quoted-pair
[elisp/wanderlust.git] / elmo / elmo-dop.el
index 66b1aa5..abf1bce 100644 (file)
@@ -62,6 +62,20 @@ Automatically loaded/saved.")
                                    method arguments)))
     (setq elmo-dop-queue (nconc elmo-dop-queue (list queue)))))
 
+(defvar elmo-dop-queue-method-name-alist
+  '((elmo-folder-append-buffer-dop-delayed . "Append")
+    (elmo-folder-delete-messages-dop-delayed . "Delete")
+    (elmo-message-encache . "Encache")
+    (elmo-create-folder . "Create")
+    (elmo-folder-mark-as-read . "Read")
+    (elmo-folder-unmark-read . "Unread")
+    (elmo-folder-mark-as-important . "Important")
+    (elmo-folder-unmark-important . "Unimportant")))
+
+(defmacro elmo-dop-queue-method-name (queue)
+  `(cdr (assq (elmo-dop-queue-method ,queue)
+             elmo-dop-queue-method-name-alist)))
+
 (defun elmo-dop-queue-flush (&optional force)
   "Flush disconnected operations.
 If optional argument FORCE is non-nil, try flushing all operation queues
@@ -144,9 +158,9 @@ which is corresponded to the FOLDER."
 FOLDER is the folder structure.
 Return a message number."
   (setq folder (elmo-dop-spool-folder folder))
+  (unless (elmo-folder-exists-p folder)
+    (elmo-folder-create folder))
   (let ((new-number (1+ (car (elmo-folder-status folder)))))
-    (unless (elmo-folder-exists-p folder)
-      (elmo-folder-create folder))
     ;; dop folder is a localdir folder.
     (write-region-as-binary (point-min) (point-max)
                          (expand-file-name
@@ -196,8 +210,8 @@ FOLDER is the folder structure."
                           numbers)))
   t)
 
-(defsubst elmo-message-encache-dop (folder number)
-  (elmo-dop-queue-append folder 'elmo-message-encache (list number)))
+(defsubst elmo-message-encache-dop (folder number &optional read)
+  (elmo-dop-queue-append folder 'elmo-message-encache (list number read)))
 
 (defsubst elmo-create-folder-dop (folder)
   (elmo-dop-queue-append folder 'elmo-folder-create nil))
@@ -232,18 +246,24 @@ FOLDER is the folder structure."
 
 ;;; Delayed operation (executed at online status).
 (defun elmo-folder-append-buffer-dop-delayed (folder unread number set-number)
-  (let ((spool-folder (elmo-dop-spool-folder folder)))
+  (let ((spool-folder (elmo-dop-spool-folder folder))
+       failure saved)
     (with-temp-buffer
       (elmo-message-fetch spool-folder number
                          (elmo-make-fetch-strategy 'entire)
                          nil (current-buffer) 'unread)
       (condition-case nil 
-         (elmo-folder-append-buffer folder unread set-number)
-       (error
-        ;; Append failed...
-        (elmo-folder-append-buffer (elmo-make-folder elmo-lost+found-folder)
-                                   unread set-number)))
-      (elmo-folder-delete-messages spool-folder (list number))
+         (setq failure (not
+                        (elmo-folder-append-buffer folder unread set-number)))
+       (error (setq failure t)))
+      (when failure
+       ;; Append failed...
+       (setq saved (elmo-folder-append-buffer
+                    (elmo-make-folder elmo-lost+found-folder)
+                    unread set-number)))
+      (if (or (not failure)
+             saved)
+         (elmo-folder-delete-messages spool-folder (list number)))
       t)))
 
 (defun elmo-folder-delete-messages-dop-delayed (folder number-alist)