X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-maildir.el;h=151a232f0ee2feff016054ab0de8b555d495d84a;hb=fb40159a1fc3d4fb1400f8fe3befb1056bc75b8c;hp=c53ee3ab4dd3038d2b9559c6be7fcb9d6c4bc608;hpb=51f9787799e1f8a5ad1f9cde0fd99489dae071c3;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-maildir.el b/elmo/elmo-maildir.el index c53ee3a..151a232 100644 --- a/elmo/elmo-maildir.el +++ b/elmo/elmo-maildir.el @@ -35,6 +35,11 @@ (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 @@ -58,12 +63,12 @@ (luna-define-method elmo-folder-expand-msgdb-path ((folder elmo-maildir-folder)) - (expand-file-name - (elmo-replace-string-as-filename + (expand-file-name + (elmo-replace-string-as-filename (elmo-maildir-folder-directory-internal folder)) (expand-file-name "maildir" - elmo-msgdb-dir))) + elmo-msgdb-directory))) (defun elmo-maildir-message-file-name (folder location) "Get a file name of the message from FOLDER which corresponded to @@ -127,8 +132,7 @@ LOCATION." (elmo-maildir-folder-flagged-locations-internal folder)) (luna-define-method elmo-folder-msgdb-create - ((folder elmo-maildir-folder) - numbers new-mark already-mark seen-mark important-mark seen-list) + ((folder elmo-maildir-folder) numbers flag-table) (let* ((unread-list (elmo-maildir-folder-unread-locations-internal folder)) (flagged-list (elmo-maildir-folder-flagged-locations-internal folder)) (len (length numbers)) @@ -154,9 +158,9 @@ LOCATION." entity))) (cond ((member location unread-list) - (setq mark new-mark)) ; unread! + (setq mark elmo-msgdb-new-mark)) ; unread! ((member location flagged-list) - (setq mark important-mark))) + (setq mark elmo-msgdb-important-mark))) (if (setq mark (or (elmo-msgdb-global-mark-get (elmo-msgdb-overview-entity-get-id entity)) @@ -209,7 +213,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))))) @@ -270,6 +277,16 @@ LOCATION." locs) (elmo-maildir-delete-mark-msgs folder locs ?S)) +(luna-define-method elmo-map-folder-mark-as-answered ((folder + elmo-maildir-folder) + locs) + (elmo-maildir-set-mark-msgs folder locs ?R)) + +(luna-define-method elmo-map-folder-unmark-answered ((folder + elmo-maildir-folder) + locs) + (elmo-maildir-delete-mark-msgs folder locs ?R)) + (luna-define-method elmo-folder-list-subfolders ((folder elmo-maildir-folder) &optional one-level) (let ((prefix (concat (elmo-folder-name-internal folder) @@ -337,7 +354,7 @@ file name for maildir directories." filename)) (luna-define-method elmo-folder-append-buffer ((folder elmo-maildir-folder) - unread &optional number) + &optional status number) (let ((basedir (elmo-maildir-folder-directory-internal folder)) (src-buf (current-buffer)) dst-buf filename) @@ -377,7 +394,7 @@ file name for maildir directories." numbers &optional start-number) - (let ((temp-dir (elmo-folder-make-temp-dir folder)) + (let ((temp-dir (elmo-folder-make-temporary-directory folder)) (cur-number (if start-number 0))) (dolist (number numbers) (elmo-copy-file @@ -389,7 +406,7 @@ file name for maildir directories." (luna-define-method elmo-folder-append-messages :around ((folder elmo-maildir-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-maildir-folder-directory-internal folder)) (succeeds numbers) @@ -458,42 +475,43 @@ file name for maildir directories." (error)))) (luna-define-method elmo-folder-delete ((folder elmo-maildir-folder)) - (let ((basedir (elmo-maildir-folder-directory-internal folder))) - (condition-case nil - (let ((tmp-files (directory-files - (expand-file-name "tmp" basedir) - t "[^.].*"))) - ;; Delete files in tmp. - (dolist (file tmp-files) - (delete-file file)) - (dolist (dir '("new" "cur" "tmp" ".")) - (setq dir (expand-file-name dir basedir)) - (if (not (file-directory-p dir)) - (error nil) - (elmo-delete-directory dir t))) - t) - (error nil)))) - -(luna-define-method elmo-folder-search ((folder elmo-maildir-folder) - condition &optional numbers) - (save-excursion - (let* ((msgs (or numbers (elmo-folder-list-messages folder))) - (i 0) - case-fold-search matches - percent num - (len (length msgs)) - number-list msg-num) - (setq number-list msgs) - (dolist (number numbers) - (if (elmo-file-field-condition-match - (elmo-message-file-name folder number) - condition number number-list) - (setq matches (cons number matches))) - (setq i (1+ i)) - (elmo-display-progress - 'elmo-maildir-search "Searching..." - (/ (* i 100) len))) - (nreverse matches)))) + (let ((msgs (and (elmo-folder-exists-p folder) + (elmo-folder-list-messages folder)))) + (when (yes-or-no-p (format "%sDelete msgdb and substance of \"%s\"? " + (if (> (length msgs) 0) + (format "%d msg(s) exists. " (length msgs)) + "") + (elmo-folder-name-internal folder))) + (let ((basedir (elmo-maildir-folder-directory-internal folder))) + (condition-case nil + (let ((tmp-files (directory-files + (expand-file-name "tmp" basedir) + t "[^.].*"))) + ;; Delete files in tmp. + (dolist (file tmp-files) + (delete-file file)) + (dolist (dir '("new" "cur" "tmp" ".")) + (setq dir (expand-file-name dir basedir)) + (if (not (file-directory-p dir)) + (error nil) + (elmo-delete-directory dir t)))) + (error nil))) + (elmo-msgdb-delete-path folder) + t))) + +(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))