X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-nmz.el;h=765829d42c83d78116a7225a6d3640d237fab498;hb=4dee2f09b7c63b19e24942f13b2917addb2a6501;hp=59fe12807fb184f8056d2a4a2bbfcfea8cefbf8e;hpb=10c9f47884508cec3b96340be0b4118938633e51;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-nmz.el b/elmo/elmo-nmz.el index 59fe128..765829d 100644 --- a/elmo/elmo-nmz.el +++ b/elmo/elmo-nmz.el @@ -28,6 +28,8 @@ ;;; Code: ;; +(eval-when-compile (require 'cl)) + (require 'elmo) (require 'elmo-map) (require 'mime-edit) @@ -73,23 +75,24 @@ If the value is a list, all elements are used as index paths for namazu." (luna-define-method elmo-folder-initialize ((folder elmo-nmz-folder) name) - (with-temp-buffer - (insert "[" name) - (goto-char (point-min)) - (forward-sexp) - (elmo-nmz-folder-set-pattern-internal folder - (buffer-substring - (+ 1 (point-min)) - (- (point) 1))) - (let ((index (buffer-substring (point) (point-max)))) - (elmo-nmz-folder-set-index-path-internal - folder - (cond ((cdr (assoc index elmo-nmz-index-alias-alist))) - ((eq (length index) 0) - elmo-nmz-default-index-path) - (t - index)))) - folder)) + (when (> (length name) 0) + (with-temp-buffer + (insert "[" name) + (goto-char (point-min)) + (forward-sexp) + (elmo-nmz-folder-set-pattern-internal folder + (buffer-substring + (+ 1 (point-min)) + (- (point) 1))) + (let ((index (buffer-substring (point) (point-max)))) + (elmo-nmz-folder-set-index-path-internal + folder + (cond ((cdr (assoc index elmo-nmz-index-alias-alist))) + ((eq (length index) 0) + elmo-nmz-default-index-path) + (t + index)))))) + folder) (luna-define-method elmo-folder-expand-msgdb-path ((folder elmo-nmz-folder)) @@ -98,54 +101,38 @@ If the value is a list, all elements are used as index paths for namazu." (elmo-folder-name-internal folder)) (expand-file-name "nmz" elmo-msgdb-directory))) -(defun elmo-nmz-msgdb-create-entity (folder number) +(defun elmo-nmz-msgdb-create-entity (msgdb folder number) "Create msgdb entity for the message in the FOLDER with NUMBER." (let ((location (expand-file-name (elmo-map-message-location folder number))) entity uid) - (setq entity (elmo-msgdb-create-overview-entity-from-file number location)) - (unless (or (> (length (elmo-msgdb-overview-entity-get-to entity)) 0) - (> (length (elmo-msgdb-overview-entity-get-cc entity)) 0) - (not (string= (elmo-msgdb-overview-entity-get-subject entity) + (setq entity (elmo-msgdb-create-message-entity-from-file + (elmo-msgdb-message-entity-handler msgdb) number location)) + (unless (or (> (length (elmo-message-entity-field entity 'to)) 0) + (> (length (elmo-message-entity-field entity 'cc)) 0) + (not (string= (elmo-message-entity-field entity 'subject) elmo-no-subject))) - (elmo-msgdb-overview-entity-set-subject entity location) + (elmo-message-entity-set-field entity 'subject location) (setq uid (nth 2 (file-attributes location))) - (elmo-msgdb-overview-entity-set-from entity - (concat - (user-full-name uid) - " <"(user-login-name uid) "@" - (system-name) ">"))) + (elmo-message-entity-set-field entity 'from + (concat + (user-full-name uid) + " <"(user-login-name uid) "@" + (system-name) ">"))) entity)) (luna-define-method elmo-folder-msgdb-create ((folder elmo-nmz-folder) numlist flag-table) - (let* (overview number-alist mark-alist entity - i percent num pair) + (let ((new-msgdb (elmo-make-msgdb)) + entity mark i percent num) (setq num (length numlist)) (setq i 0) (message "Creating msgdb...") (while numlist (setq entity (elmo-nmz-msgdb-create-entity - folder (car numlist))) + new-msgdb folder (car numlist))) (when entity - (setq overview - (elmo-msgdb-append-element - overview entity)) - (setq number-alist - (elmo-msgdb-number-add number-alist - (elmo-msgdb-overview-entity-get-number - entity) - (elmo-msgdb-overview-entity-get-id - entity))) - (setq mark-alist - (elmo-msgdb-mark-append - mark-alist - (elmo-msgdb-overview-entity-get-number - entity) - (or (elmo-msgdb-global-mark-get - (elmo-msgdb-overview-entity-get-id - entity)) - elmo-msgdb-new-mark)))) + (elmo-msgdb-append-entity new-msgdb entity '(new unread))) (when (> num elmo-display-progress-threshold) (setq i (1+ i)) (setq percent (/ (* i 100) num)) @@ -154,7 +141,7 @@ If the value is a list, all elements are used as index paths for namazu." percent)) (setq numlist (cdr numlist))) (message "Creating msgdb...done") - (list overview number-alist mark-alist))) + new-msgdb)) (luna-define-method elmo-folder-message-file-p ((folder elmo-nmz-folder)) t) @@ -167,8 +154,7 @@ If the value is a list, all elements are used as index paths for namazu." ((folder elmo-nmz-folder)) t) -(luna-define-method elmo-folder-diff ((folder elmo-nmz-folder) - &optional numbers) +(luna-define-method elmo-folder-diff ((folder elmo-nmz-folder)) (cons nil nil)) (luna-define-method elmo-folder-message-make-temp-files ((folder @@ -249,7 +235,20 @@ If the value is a list, all elements are used as index paths for namazu." (nreverse locations)))) (luna-define-method elmo-folder-exists-p ((folder elmo-nmz-folder)) - t) + (elmo-nmz-folder-pattern-internal folder)) + +(luna-define-method elmo-folder-have-subfolder-p ((folder elmo-nmz-folder)) + (null (elmo-nmz-folder-pattern-internal folder))) + +(luna-define-method elmo-folder-list-subfolders ((folder elmo-nmz-folder) + &optional one-level) + (mapcar (lambda (name) (elmo-recover-string-from-filename name)) + (directory-files (expand-file-name "nmz" elmo-msgdb-directory) + nil + (concat + "^" + (regexp-quote + (elmo-folder-prefix-internal folder)))))) (require 'product) (product-provide (provide 'elmo-nmz) (require 'elmo-version))