(elmo-spam-bsfilter-update-switch): Change default value to `--auto-update'.
[elisp/wanderlust.git] / elmo / elmo-localdir.el
index 2775ee4..935762d 100644 (file)
@@ -46,7 +46,7 @@
 
 ;;; ELMO Local directory folder
 (eval-and-compile
-  (luna-define-class elmo-localdir-folder (elmo-folder)
+  (luna-define-class elmo-localdir-folder (elmo-folder elmo-file-tag)
                     (dir-name directory))
   (luna-define-internal-accessors 'elmo-localdir-folder))
 
   (when numbers
     (let ((dir (elmo-localdir-folder-directory-internal folder))
          (new-msgdb (elmo-make-msgdb))
-         entity message-id
-         flags
-         (i 0)
-         (len (length numbers)))
-      (message "Creating msgdb...")
-      (while numbers
-       (setq entity
-             (elmo-localdir-msgdb-create-entity
-              new-msgdb dir (car numbers)))
-       (when entity
-         (setq message-id (elmo-message-entity-field entity 'message-id)
-               flags (elmo-flag-table-get flag-table message-id))
-         (elmo-global-flags-set flags folder (car numbers) message-id)
-         (elmo-msgdb-append-entity new-msgdb entity flags))
-       (when (> len elmo-display-progress-threshold)
-         (setq i (1+ i))
-         (elmo-display-progress
-          'elmo-localdir-msgdb-create-as-numbers "Creating msgdb..."
-          (/ (* i 100) len)))
-       (setq numbers (cdr numbers)))
-      (message "Creating msgdb...done")
+         entity message-id flags)
+      (elmo-with-progress-display (elmo-folder-msgdb-create (length numbers))
+         "Creating msgdb"
+       (dolist (number numbers)
+         (setq entity (elmo-localdir-msgdb-create-entity
+                       new-msgdb dir number))
+         (when entity
+           (setq message-id (elmo-message-entity-field entity 'message-id)
+                 flags (elmo-flag-table-get flag-table message-id))
+           (elmo-global-flags-set flags folder number message-id)
+           (elmo-msgdb-append-entity new-msgdb entity flags))
+         (elmo-progress-notify 'elmo-folder-msgdb-create)))
       new-msgdb)))
 
 (luna-define-method elmo-folder-list-subfolders ((folder elmo-localdir-folder)
     one-level)))
 
 (defsubst elmo-localdir-list-subr (folder &optional nonsort)
-  (let ((flist (mapcar 'string-to-int
+  (let ((flist (mapcar 'string-to-number
                       (directory-files
                        (elmo-localdir-folder-directory-internal folder)
                        nil "^[0-9]+$" t)))
        folder (elmo-msgdb-get-message-id-from-buffer) flags)
       t)))
 
-(luna-define-method elmo-folder-append-messages :around
-  ((folder elmo-localdir-folder)
-   src-folder numbers &optional same-number)
-  (if (elmo-folder-message-file-p src-folder)
-      (let ((src-msgdb-exists (not (zerop (elmo-folder-length src-folder))))
-           (dir (elmo-localdir-folder-directory-internal folder))
-           (table (elmo-folder-flag-table folder))
-           (succeeds numbers)
-           (next-num (1+ (car (elmo-folder-status folder))))
-           flags id)
-       (while numbers
-         (setq flags (elmo-message-flags src-folder (car numbers)))
-         (elmo-copy-file
-          (elmo-message-file-name src-folder (car numbers))
-          (expand-file-name
-           (int-to-string
-            (if same-number (car numbers) next-num))
-           dir))
-         ;; save flag-table only when src folder's msgdb is loaded.
-         (when (setq id (and src-msgdb-exists
-                             (elmo-message-field src-folder (car numbers)
-                                                 'message-id)))
-           (elmo-flag-table-set table id flags))
-         (elmo-progress-notify 'elmo-folder-move-messages)
-         (if (and (setq numbers (cdr numbers))
-                  (not same-number))
-             (setq next-num
-                   (if (elmo-localdir-locked-p)
-                       ;; MDA is running.
-                       (1+ (car (elmo-folder-status folder)))
-                     (1+ next-num)))))
-       (when (elmo-folder-persistent-p folder)
-         (elmo-folder-close-flag-table folder))
-       succeeds)
-    (luna-call-next-method)))
+(defun elmo-folder-append-messages-*-localdir (folder
+                                              src-folder
+                                              numbers
+                                              same-number)
+  (let ((src-msgdb-exists (not (zerop (elmo-folder-length src-folder))))
+       (dir (elmo-localdir-folder-directory-internal folder))
+       (table (elmo-folder-flag-table folder))
+       (succeeds numbers)
+       (next-num (1+ (car (elmo-folder-status folder))))
+       flags id)
+    (while numbers
+      (setq flags (elmo-message-flags src-folder (car numbers)))
+      (elmo-copy-file
+       (elmo-message-file-name src-folder (car numbers))
+       (expand-file-name
+       (int-to-string
+        (if same-number (car numbers) next-num))
+       dir))
+      ;; save flag-table only when src folder's msgdb is loaded.
+      (when (setq id (and src-msgdb-exists
+                         (elmo-message-field src-folder (car numbers)
+                                             'message-id)))
+       (elmo-flag-table-set table id flags))
+      (elmo-progress-notify 'elmo-folder-move-messages)
+      (if (and (setq numbers (cdr numbers))
+              (not same-number))
+         (setq next-num
+               (if (elmo-localdir-locked-p)
+                   ;; MDA is running.
+                   (1+ (car (elmo-folder-status folder)))
+                 (1+ next-num)))))
+    (when (elmo-folder-persistent-p folder)
+      (elmo-folder-close-flag-table folder))
+    succeeds))
 
 (luna-define-method elmo-folder-delete-messages-internal
   ((folder elmo-localdir-folder) numbers)
 (luna-define-method elmo-message-fetch-internal ((folder elmo-localdir-folder)
                                                 number strategy
                                                 &optional section unread)
-  (when (file-exists-p (elmo-message-file-name folder number))
-    (insert-file-contents-as-binary
-     (elmo-message-file-name folder number))))
+  (let ((filename (elmo-message-file-name folder number)))
+    (when (file-exists-p filename)
+      (insert-file-contents-as-raw-text filename))))
 
 (luna-define-method elmo-folder-list-messages-internal
   ((folder elmo-localdir-folder) &optional nohide)
                         (not elmo-pack-number-check-strict))
                        '<))
         (new-number 1)           ; first ordinal position in localdir
-        total entity)
-    (setq total (length numbers))
-    (elmo-with-progress-display (> total elmo-display-progress-threshold)
-       (elmo-folder-pack-numbers total "Packing...")
+        entity)
+    (elmo-with-progress-display (elmo-folder-pack-numbers (length numbers))
+       "Packing"
       (dolist (old-number numbers)
        (setq entity (elmo-msgdb-message-entity msgdb old-number))
        (when (not (eq old-number new-number)) ; why \=() is wrong..