* elmo-maildir.el (elmo-folder-rename-internal): New method,
[elisp/wanderlust.git] / elmo / elmo-maildir.el
index 0a91115..0cf693c 100644 (file)
 (require 'elmo)
 (require 'elmo-map)
 
+(defcustom elmo-maildir-folder-path "~/Maildir"
+  "*Maildir folder path."
+  :type 'directory
+  :group 'elmo)
+
 ;;; ELMO Maildir folder
 (eval-and-compile
   (luna-define-class elmo-maildir-folder
@@ -209,7 +214,10 @@ LOCATION."
     (while news
       (rename-file
        (expand-file-name (car news) (expand-file-name "new" maildir))
-       (expand-file-name (concat (car news) ":2,")
+       (expand-file-name (concat
+                         (car news)
+                         (unless (string-match ":2,[A-Z]*$" (car news))
+                           ":2,"))
                         (expand-file-name "cur" maildir)))
       (setq news (cdr news)))))
 
@@ -474,6 +482,20 @@ file name for maildir directories."
          t)
       (error nil))))
 
+(luna-define-method elmo-folder-rename-internal ((folder elmo-maildir-folder)
+                                                new-folder)
+  (let* ((old (elmo-maildir-folder-directory-internal folder))
+        (new (elmo-maildir-folder-directory-internal new-folder))
+        (new-dir (directory-file-name (file-name-directory new))))
+    (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))
+
 (require 'product)
 (product-provide (provide 'elmo-maildir) (require 'elmo-version))