Revert last commit (I'm sorry it was my mistake).
[elisp/wanderlust.git] / elmo / elmo-localdir.el
index 1384a38..2fa24e5 100644 (file)
@@ -1,4 +1,4 @@
-;;; elmo-localdir.el -- Localdir Interface for ELMO.
+;;; elmo-localdir.el --- Localdir Interface for ELMO.
 
 ;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
 ;; Copyright (C) 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
 ;;
 
 ;;; Commentary:
-;; 
+;;
 
 ;;; Code:
-;; 
+;;
 (eval-when-compile (require 'cl))
 
 (require 'elmo-msgdb)
 
 (luna-define-method elmo-folder-expand-msgdb-path ((folder
                                                    elmo-localdir-folder))
-  (expand-file-name 
+  (expand-file-name
    (mapconcat
     'identity
-    (mapcar 
+    (mapcar
      'elmo-replace-string-as-filename
      (split-string (elmo-localdir-folder-dir-name-internal folder)
                   "/"))
     "/")
    (expand-file-name ;;"localdir"
     (symbol-name (elmo-folder-type-internal folder))
-    elmo-msgdb-dir)))
+    elmo-msgdb-directory)))
 
 (luna-define-method elmo-message-file-name ((folder
                                             elmo-localdir-folder)
                                                         numbers
                                                         &optional
                                                         start-number)
-  (let ((temp-dir (elmo-folder-make-temp-dir folder))
+  (let ((temp-dir (elmo-folder-make-temporary-directory folder))
        (cur-number (or start-number 0)))
     (dolist (number numbers)
-      (elmo-add-name-to-file
+      (elmo-copy-file
        (expand-file-name
        (int-to-string number)
        (elmo-localdir-folder-directory-internal folder))
                (elmo-msgdb-append-element
                 overview entity))
          (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-         (setq number-alist
-               (elmo-msgdb-number-add number-alist
-                                      num
-                                      message-id))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist
+                                      num
+                                      message-id))
          (setq seen (member message-id seen-list))
          (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
                              (if (elmo-file-cache-exists-p message-id) ; XXX
 
 (defsubst elmo-localdir-list-subr (folder &optional nonsort)
   (let ((flist (mapcar 'string-to-int
-                      (directory-files 
+                      (directory-files
                        (elmo-localdir-folder-directory-internal folder)
                        nil "^[0-9]+$" t)))
        (killed (elmo-msgdb-killed-list-load (elmo-folder-msgdb-path folder))))
                   folder
                   (or number
                       (1+ (car (elmo-folder-status folder)))))))
-    (if (file-writable-p filename)
-       (write-region-as-binary
-        (point-min) (point-max) filename nil 'no-msg))
-    t))
-
-(luna-define-method elmo-folder-append-messages :around ((folder elmo-localdir-folder)
-                                                        src-folder numbers
-                                                        unread-marks
-                                                        &optional same-number)
+    (when (file-writable-p filename)
+      (write-region-as-binary
+       (point-min) (point-max) filename nil 'no-msg)
+      t)))
+
+(luna-define-method elmo-folder-append-messages :around
+  ((folder elmo-localdir-folder)
+   src-folder numbers unread-marks &optional same-number)
   (if (elmo-folder-message-file-p src-folder)
       (let ((dir (elmo-localdir-folder-directory-internal folder))
            (succeeds numbers)
            (int-to-string
             (if same-number (car numbers) next-num))
            dir))
+         (elmo-progress-notify 'elmo-folder-move-messages)
          (if (and (setq numbers (cdr numbers))
                   (not same-number))
              (setq next-num
 (luna-define-method elmo-folder-creatable-p ((folder elmo-localdir-folder))
   t)
 
+(luna-define-method elmo-folder-writable-p ((folder elmo-localdir-folder))
+  t)
+
 (luna-define-method elmo-folder-create ((folder elmo-localdir-folder))
   (let ((dir (elmo-localdir-folder-directory-internal folder)))
     (if (file-directory-p dir)
        (elmo-make-directory dir))
       t)))
 
-(luna-define-method elmo-folder-delete ((folder elmo-localdir-folder))
+(luna-define-method elmo-folder-delete :before ((folder elmo-localdir-folder))
   (let ((dir (elmo-localdir-folder-directory-internal folder)))
     (if (not (file-directory-p dir))
        (error "No such directory: %s" dir)
-      (elmo-delete-directory dir t)
+      (elmo-delete-match-files dir "[0-9]+" t)
       t)))
 
 (luna-define-method elmo-folder-rename-internal ((folder elmo-localdir-folder)
    (expand-file-name (int-to-string number)
                     (elmo-localdir-folder-directory-internal folder))
    condition number number-list))
-  
-(luna-define-method elmo-folder-search ((folder elmo-localdir-folder)
-                                       condition &optional numbers)
-  (let* ((msgs (or numbers (elmo-folder-list-messages folder)))
-        (num (length msgs))
-        (i 0)
-        last cur number-list case-fold-search ret-val)
-    (cond
-     ;; short cut.
-     ((and (vectorp condition)
-          (string= (elmo-filter-key condition) "last"))
-      (nthcdr (max (- (length msgs)
-                     (string-to-int (elmo-filter-value condition)))
-                  0)
-             msgs))
-     ((and (vectorp condition)
-          (string= (elmo-filter-key condition) "first"))
-      (let ((rest (nthcdr (string-to-int (elmo-filter-value condition) )
-                         msgs)))
-       (mapcar '(lambda (x)
-                  (delete x msgs)) rest))
-      msgs)
-     (t
-      (setq number-list msgs)
-      (while msgs
-       (if (elmo-localdir-field-condition-match folder condition
-                                                (car msgs) number-list)
-           (setq ret-val (cons (car msgs) ret-val)))
-       (when (> num elmo-display-progress-threshold)
-         (setq i (1+ i))
-         (setq cur (/ (* i 100) num))
-         (unless (eq cur last)
-           (elmo-display-progress
-            'elmo-localdir-search "Searching..."
-            cur)
-           (setq last cur)))
-       (setq msgs (cdr msgs)))
-      (nreverse ret-val)))))
 
 (luna-define-method elmo-folder-pack-numbers ((folder elmo-localdir-folder))
   (let* ((dir (elmo-localdir-folder-directory-internal folder))
         (/ (* new-number 100) total)))
       (setq onum (car flist))
       (when (not (eq onum new-number))         ; why \=() is wrong..
-        (elmo-bind-directory
+       (elmo-bind-directory
         dir
         ;; xxx  nfs,hardlink
         (rename-file (int-to-string onum) (int-to-string new-number) t))
-        ;; update overview
-        (elmo-msgdb-overview-entity-set-number
+       ;; update overview
+       (elmo-msgdb-overview-entity-set-number
         (elmo-msgdb-overview-get-entity onum msgdb)
         new-number)
        ;; update number-alist
     (message "Packing...done")
     (elmo-folder-set-msgdb-internal
      folder
-     (list (elmo-msgdb-get-overview msgdb)
-          onum-alist
-          new-mark-alist
-          ;; remake hash table
-          (elmo-msgdb-make-overview-hashtb
-           (elmo-msgdb-get-overview msgdb))))))
+     (elmo-make-msgdb
+      (elmo-msgdb-get-overview msgdb)
+      onum-alist
+      new-mark-alist))))
 
 (luna-define-method elmo-folder-message-file-p ((folder elmo-localdir-folder))
   t)