X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-nmz.el;h=765829d42c83d78116a7225a6d3640d237fab498;hb=4dee2f09b7c63b19e24942f13b2917addb2a6501;hp=269e2a8bda0e77e9b0f99d71876ac0e6a330e3fd;hpb=2a3a9b461bd503d6736eb004e28f9b3cd1cddf5a;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-nmz.el b/elmo/elmo-nmz.el index 269e2a8..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,57 +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 new-mark - already-mark seen-mark - important-mark - seen-list) - (let* (overview number-alist mark-alist entity - i percent num pair) + numlist flag-table) + (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)) - 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)) @@ -156,8 +140,8 @@ If the value is a list, all elements are used as index paths for namazu." 'elmo-folder-msgdb-create "Creating msgdb..." percent)) (setq numlist (cdr numlist))) - (message "Creating msgdb...done.") - (list overview number-alist mark-alist))) + (message "Creating msgdb...done") + new-msgdb)) (luna-define-method elmo-folder-message-file-p ((folder elmo-nmz-folder)) t) @@ -170,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 @@ -252,26 +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) - -;;; To override elmo-map-folder methods. -(luna-define-method elmo-folder-list-unreads-internal - ((folder elmo-nmz-folder) unread-marks &optional mark-alist) - t) - -(luna-define-method elmo-folder-unmark-important ((folder elmo-nmz-folder) - numbers) - t) - -(luna-define-method elmo-folder-mark-as-important ((folder elmo-nmz-folder) - numbers) - t) - -(luna-define-method elmo-folder-unmark-read ((folder elmo-nmz-folder) numbers) - t) - -(luna-define-method elmo-folder-mark-as-read ((folder elmo-nmz-folder) numbers) - 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))