* wl-mime.el (toplevel): Require wl-vars.
[elisp/wanderlust.git] / elmo / elmo-nmz.el
index 9c80224..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,22 +101,23 @@ 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)
@@ -126,9 +130,9 @@ If the value is a list, all elements are used as index paths for namazu."
     (while numlist
       (setq entity
            (elmo-nmz-msgdb-create-entity
-            folder (car numlist)))
+            new-msgdb folder (car numlist)))
       (when entity
-       (elmo-msgdb-append-entity new-msgdb entity '(new)))
+       (elmo-msgdb-append-entity new-msgdb entity '(new unread)))
       (when (> num elmo-display-progress-threshold)
        (setq i (1+ i))
        (setq percent (/ (* i 100) num))
@@ -231,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))