;;; Code:
;;
+(eval-when-compile (require 'cl))
+
(require 'elmo)
(require 'elmo-map)
(require 'mime-edit)
(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))
(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))
'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)
((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
(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))