Synch with wl-2_8.
[elisp/wanderlust.git] / elmo / elmo-dop.el
index 413252f..c53104b 100644 (file)
@@ -1,4 +1,4 @@
-;;; elmo-dop.el -- Modules for Disconnected Operations on ELMO.
+;;; elmo-dop.el --- Modules for Disconnected Operations on ELMO.
 
 ;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
 
 ;;
 
 ;;; Commentary:
-;; 
+;;
 
 ;;; Code:
-;; 
+;;
 
 (require 'elmo)
 (require 'elmo-vars)
@@ -65,12 +65,12 @@ Automatically loaded/saved.")
 (defvar elmo-dop-queue-method-name-alist
   '((elmo-folder-append-buffer-dop-delayed . "Append")
     (elmo-folder-delete-messages-dop-delayed . "Delete")
-    (elmo-message-encache-dop . "Encache")
-    (elmo-create-folder-dop . "Create")
-    (elmo-folder-mark-as-read-dop . "Read")
-    (elmo-folder-unmark-read-dop . "Unread")
-    (elmo-folder-mark-as-important-dop . "Important")
-    (elmo-folder-unmark-important-dop . "Unimportant")))
+    (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)
@@ -88,10 +88,12 @@ even an operation concerns the unplugged folder."
     ;; obsolete
     (unless (or (null queue)
                (vectorp (car queue)))
-      (when (y-or-n-p "Saved queue is old version(2.4). Clear all pending operations? ")
-       (setq elmo-dop-queue nil)
-       (message "All pending operations are cleared.")
-       (elmo-dop-queue-save)))
+      (if (y-or-n-p "Saved queue is old version(2.6). Clear all pending operations? ")
+         (progn
+           (setq elmo-dop-queue nil)
+           (message "All pending operations are cleared.")
+           (elmo-dop-queue-save))
+       (error "Please use 2.6 or earlier.")))
     (setq count (length queue))
     (when (> count 0)
       (if (elmo-y-or-n-p
@@ -114,10 +116,12 @@ even an operation concerns the unplugged folder."
                    (progn
                      (apply (elmo-dop-queue-method (car queue))
                             (prog1
-                                (setq folder 
+                                (setq folder
                                       (elmo-make-folder
                                        (elmo-dop-queue-fname (car queue))))
-                              (elmo-folder-open folder))
+                              (elmo-folder-open folder)
+                              (unless (elmo-folder-plugged-p folder)
+                                (error "Unplugged.")))
                             (elmo-dop-queue-arguments (car queue)))
                      (elmo-folder-close folder))
                  (quit  (setq failure t))
@@ -129,7 +133,7 @@ even an operation concerns the unplugged folder."
                (setq queue (cdr queue)))
              (message "%d/%d operation(s) are performed successfully."
                       performed num)
-             (sit-for 0) ; 
+             (sit-for 0) ;
              (elmo-dop-queue-save)))
        (if (elmo-y-or-n-p "Clear all pending operations? "
                           (not elmo-dop-flush-confirm) t)
@@ -168,7 +172,7 @@ Return a message number."
                           (elmo-localdir-folder-directory-internal folder))
                          nil 'no-msg)
     new-number))
-  
+
 
 (defun elmo-dop-spool-folder-list-messages (folder)
   "List messages in the dop spool folder.
@@ -210,8 +214,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))
@@ -246,18 +250,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))
+      (condition-case nil
+         (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)
@@ -265,7 +275,7 @@ FOLDER is the folder structure."
    folder
    ;; messages are deleted only if message-id is not changed.
    (mapcar 'car
-          (elmo-delete-if 
+          (elmo-delete-if
            (lambda (pair)
              (not (string=
                    (cdr pair)