Fix typo.
[elisp/wanderlust.git] / elmo / elmo-dop.el
index 8980c03..b944188 100644 (file)
 ;;; Code:
 ;; 
 
-(require 'elmo)
 (require 'elmo-vars)
 (require 'elmo-msgdb)
 (require 'elmo-util)
+(eval-when-compile
+  (require 'elmo-imap4)
+  (require 'elmo-localdir))
 
 ;; global variable.
 (defvar elmo-dop-queue nil
   "A list of (folder-name function-to-be-called argument-list).
 Automatically loaded/saved.")
 
-(defvar elmo-dop-folder (concat "+" (expand-file-name "dop"
-                                                     elmo-msgdb-dir))
-  "A folder for `elmo-folder-append-messages' disconnected operations.")
-
-(defun elmo-dop-queue-append (folder function arguments)
-  (let ((operation (list (elmo-folder-name-internal folder)
-                        function arguments)))
+(defun elmo-dop-queue-append (folder function argument)
+  (let ((operation (list (elmo-string folder) function argument)))
+    (elmo-dop-queue-load)
     (unless (member operation elmo-dop-queue) ;; don't append same operation
       (setq elmo-dop-queue
            (append elmo-dop-queue
@@ -56,12 +54,13 @@ Automatically loaded/saved.")
   "Flush Disconnected operations.
 If optional argument FORCE is non-nil, try flushing all operation queues
 even an operation concerns the unplugged folder."
+  (elmo-dop-queue-load) ; load cache.
   (elmo-dop-queue-merge)
   (let ((queue elmo-dop-queue)
        (count 0)
        len)
     (while queue
-      (if (or force (elmo-folder-plugged-p (elmo-make-folder (caar queue))))
+      (if (or force (elmo-folder-plugged-p (caar queue)))
          (setq count (1+ count)))
       (setq queue (cdr queue)))
     (when (> count 0)
@@ -149,13 +148,12 @@ even an operation concerns the unplugged folder."
           (member (cadr que) elmo-dop-merge-funcs)
           (setq match-queue
                 (car (delete nil
-                             (mapcar
-                              (lambda (new-queue)
-                                (if (and
-                                     (string= (car que) (car new-queue))
-                                     (string= (cadr que) (cadr new-queue)))
-                                    new-queue))
-                              new-queue)))))
+                             (mapcar '(lambda (new-queue)
+                                        (if (and
+                                             (string= (car que) (car new-queue))
+                                             (string= (cadr que) (cadr new-queue)))
+                                            new-queue))
+                                     new-queue)))))
          (setcar (cddr match-queue)
                  (append (nth 2 match-queue) (nth 2 que)))
        (setq new-queue (append new-queue (list que))))
@@ -176,12 +174,46 @@ even an operation concerns the unplugged folder."
                       elmo-msgdb-dir)
      elmo-dop-queue)))
 
+(defun elmo-dop-lock-message (message-id &optional lock-list)
+  (let ((locked (or lock-list
+                   (elmo-object-load
+                    (expand-file-name
+                     elmo-msgdb-lock-list-filename
+                     elmo-msgdb-dir)))))
+    (setq locked (cons message-id locked))
+    (elmo-object-save
+     (expand-file-name elmo-msgdb-lock-list-filename
+                      elmo-msgdb-dir)
+     locked)))
+
+(defun elmo-dop-unlock-message (message-id &optional lock-list)
+  (let ((locked (or lock-list
+                   (elmo-object-load
+                    (expand-file-name elmo-msgdb-lock-list-filename
+                                      elmo-msgdb-dir)))))
+    (setq locked (delete message-id locked))
+    (elmo-object-save
+     (expand-file-name elmo-msgdb-lock-list-filename
+                      elmo-msgdb-dir)
+     locked)))
+
+(defun elmo-dop-lock-list-load ()
+  (elmo-object-load
+   (expand-file-name elmo-msgdb-lock-list-filename
+                    elmo-msgdb-dir)))
+
+(defun elmo-dop-lock-list-save (lock-list)
+  (elmo-object-save
+   (expand-file-name elmo-msgdb-lock-list-filename
+                    elmo-msgdb-dir)
+   lock-list))
+
 (defun elmo-dop-append-list-load (folder &optional resume)
   (elmo-object-load
    (expand-file-name (if resume
                         elmo-msgdb-resume-list-filename
                       elmo-msgdb-append-list-filename)
-                    (elmo-folder-msgdb-path folder))))
+                    (elmo-msgdb-expand-path folder))))
 
 (defun elmo-dop-append-list-save (folder append-list &optional resume)
   (if append-list
@@ -189,13 +221,13 @@ even an operation concerns the unplugged folder."
        (expand-file-name (if resume
                             elmo-msgdb-resume-list-filename
                           elmo-msgdb-append-list-filename)
-                        (elmo-folder-msgdb-path folder))
+                        (elmo-msgdb-expand-path folder))
        append-list)
     (condition-case ()
        (delete-file (expand-file-name (if resume
                                           elmo-msgdb-resume-list-filename
                                         elmo-msgdb-append-list-filename)
-                                      (elmo-folder-msgdb-path folder)))
+                                      (elmo-msgdb-expand-path folder)))
       (error))))
 
 (defun elmo-dop-deleting-numbers-to-msgids (alist numbers appended)
@@ -209,13 +241,13 @@ even an operation concerns the unplugged folder."
       (setq numbers (cdr numbers)))
     (cons appended deleting-msgids)))
 
-(defun elmo-dop-list-deleted (name number-alist)
-  "List message numbers to be deleted on folder with NAME from NUMBER-ALIST."
+(defun elmo-dop-list-deleted (folder number-alist)
+  "List message numbers to be deleted on FOLDER from NUMBER-ALIST."
   (elmo-dop-queue-load)
   (let ((queue elmo-dop-queue)
        numbers matches nalist)
     (while queue
-      (if (and (string= (nth 0 (car queue)) name)
+      (if (and (string= (nth 0 (car queue)) folder)
               (string= (nth 1 (car queue)) "delete-msgids"))
          (setq numbers
                (nconc numbers
@@ -317,26 +349,6 @@ even an operation concerns the unplugged folder."
               (elmo-folder-get-spec folder)
               msgs msgdb))))
 
-(defun elmo-dop-folder-status (folder)
-  (let* ((number-alist (elmo-msgdb-number-load
-                       (elmo-folder-msgdb-path folder)))
-        (number-list (mapcar 'car number-alist))
-        (append-list (elmo-dop-append-list-load folder))
-        (append-num (length append-list))
-        alreadies
-        (i 0)
-        max-num)
-    (while append-list
-      (if (rassoc (car append-list) number-alist)
-         (setq alreadies (append alreadies
-                                 (list (car append-list)))))
-      (setq append-list (cdr append-list)))
-    (setq max-num
-         (or (nth (max (- (length number-list) 1) 0) number-list)
-             0))
-    (cons (- (+ max-num append-num) (length alreadies))
-         (- (+ (length number-list) append-num) (length alreadies)))))
-
 (defun elmo-dop-max-of-folder (folder)
   (if (eq (elmo-folder-get-type folder) 'imap4)
       (if elmo-enable-disconnected-operation
@@ -407,8 +419,10 @@ even an operation concerns the unplugged folder."
                            (car appendings))))
        (when file-string
          (condition-case ()
-             (elmo-append-msg folder file-string (car appendings) nil
-                              (not (member (car appendings) seen-list)))
+             (setq failure (not 
+                            (elmo-append-msg 
+                             folder file-string (car appendings) nil
+                             (not (member (car appendings) seen-list)))))
            (quit  (setq failure t))
            (error (setq failure t)))
          (setq i (+ 1 i))
@@ -445,6 +459,12 @@ even an operation concerns the unplugged folder."
        (error "Unplugged"))
     (elmo-call-func folder "create-folder")))
 
+(defun elmo-dop-delete-folder (folder)
+  (error "Unplugged"))
+
+(defun elmo-dop-rename-folder (old-folder new-folder)
+  (error "Unplugged"))
+
 (defun elmo-dop-append-msg (folder string message-id &optional msg)
   (if elmo-enable-disconnected-operation
       (if message-id