* wl-mime.el (toplevel): Require wl-vars.
[elisp/wanderlust.git] / elmo / elmo-nmz.el
index 4469b7f..765829d 100644 (file)
@@ -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)
@@ -248,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))