Synch up with main trunk.
[elisp/wanderlust.git] / elmo / elmo-localdir.el
index f9e5c2f..7308144 100644 (file)
     'identity
     (mapcar
      'elmo-replace-string-as-filename
-     (split-string (elmo-localdir-folder-dir-name-internal folder)
-                  "/"))
+     (split-string
+      (let ((dir-name (elmo-localdir-folder-dir-name-internal folder)))
+       (if (file-name-absolute-p dir-name)
+           (expand-file-name dir-name)
+         dir-name))
+      "/"))
     "/")
    (expand-file-name ;;"localdir"
     (symbol-name (elmo-folder-type-internal folder))
 
 (luna-define-method elmo-folder-msgdb-create ((folder elmo-localdir-folder)
                                              numbers
-                                             new-mark
-                                             already-mark
-                                             seen-mark
-                                             important-mark
                                              seen-list)
   (when numbers
     (let ((dir (elmo-localdir-folder-directory-internal folder))
                              (if (elmo-file-cache-exists-p message-id) ; XXX
                                  (if seen
                                      nil
-                                   already-mark)
+                                   elmo-msgdb-unread-cached-mark)
                                (if seen
                                    nil ;;seen-mark
-                                 new-mark))))
+                                 elmo-msgdb-new-mark))))
              (setq mark-alist
                    (elmo-msgdb-mark-append
                     mark-alist
 
 (luna-define-method elmo-folder-append-messages :around
   ((folder elmo-localdir-folder)
-   src-folder numbers unread-marks &optional same-number)
+   src-folder numbers &optional same-number)
   (if (elmo-folder-message-file-p src-folder)
       (let ((dir (elmo-localdir-folder-directory-internal folder))
            (succeeds numbers)
   (let ((dir (elmo-localdir-folder-directory-internal folder)))
     (if (not (file-directory-p dir))
        (error "No such directory: %s" dir)
-      (elmo-delete-directory dir t)
+      (elmo-delete-match-files dir "[0-9]+" t)
       t)))
 
 (luna-define-method elmo-folder-rename-internal ((folder elmo-localdir-folder)
   (let* ((old (elmo-localdir-folder-directory-internal folder))
         (new (elmo-localdir-folder-directory-internal new-folder))
         (new-dir (directory-file-name (file-name-directory new))))
-    (if (not (file-directory-p old))
-       (error "No such directory: %s" old)
-      (if (file-exists-p new)
-         (error "Already exists directory: %s" new)
-       (if (not (file-exists-p new-dir))
-           (elmo-make-directory new-dir))
-       (rename-file old new)
-       t))))
+    (unless (file-directory-p old)
+      (error "No such directory: %s" old))
+    (when (file-exists-p new)
+      (error "Already exists directory: %s" new))
+    (unless (file-directory-p new-dir)
+      (elmo-make-directory new-dir))
+    (rename-file old new)
+    t))
 
 (defsubst elmo-localdir-field-condition-match (folder condition
                                                      number number-list)
         (elmo-msgdb-overview-get-entity onum msgdb)
         new-number)
        ;; update number-alist
-       (setcar (assq onum onum-alist) new-number))
+       (and (assq onum onum-alist)
+            (setcar (assq onum onum-alist) new-number)))
       ;; update mark-alist
       (when (setq mark (cadr (assq onum omark-alist)))
        (setq new-mark-alist
     (message "Packing...done")
     (elmo-folder-set-msgdb-internal
      folder
-     (list (elmo-msgdb-get-overview msgdb)
-          onum-alist
-          new-mark-alist
-          ;; remake hash table
-          (elmo-msgdb-make-overview-hashtb
-           (elmo-msgdb-get-overview msgdb))))))
+     (elmo-make-msgdb
+      (elmo-msgdb-get-overview msgdb)
+      onum-alist
+      new-mark-alist))))
 
 (luna-define-method elmo-folder-message-file-p ((folder elmo-localdir-folder))
   t)