-;;; 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>
'identity
(mapcar
'elmo-replace-string-as-filename
- (split-string (elmo-localdir-folder-dir-name-internal folder)
- "/"))
+ (split-string
+ (let ((dir-name (elmo-localdir-folder-dir-name-internal folder)))
+ (if (file-name-absolute-p dir-name)
+ (expand-file-name dir-name)
+ dir-name))
+ "/"))
"/")
(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))
(luna-define-method elmo-folder-msgdb-create ((folder elmo-localdir-folder)
numbers
- new-mark
- already-mark
- seen-mark
- important-mark
seen-list)
(when numbers
(let ((dir (elmo-localdir-folder-directory-internal folder))
(if (elmo-file-cache-exists-p message-id) ; XXX
(if seen
nil
- already-mark)
+ elmo-msgdb-unread-cached-mark)
(if seen
nil ;;seen-mark
- new-mark))))
+ elmo-msgdb-new-mark))))
(setq mark-alist
(elmo-msgdb-mark-append
mark-alist
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))
+ (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)
+(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 ((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
(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)
(let* ((old (elmo-localdir-folder-directory-internal folder))
(new (elmo-localdir-folder-directory-internal new-folder))
(new-dir (directory-file-name (file-name-directory new))))
- (if (not (file-directory-p old))
- (error "No such directory: %s" old)
- (if (file-exists-p new)
- (error "Already exists directory: %s" new)
- (if (not (file-exists-p new-dir))
- (elmo-make-directory new-dir))
- (rename-file old new)
- t))))
+ (unless (file-directory-p old)
+ (error "No such directory: %s" old))
+ (when (file-exists-p new)
+ (error "Already exists directory: %s" new))
+ (unless (file-directory-p new-dir)
+ (elmo-make-directory new-dir))
+ (rename-file old new)
+ t))
(defsubst elmo-localdir-field-condition-match (folder condition
number number-list)
(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))
(msgdb (elmo-folder-msgdb folder))
(elmo-msgdb-overview-get-entity onum msgdb)
new-number)
;; update number-alist
- (setcar (assq onum onum-alist) new-number))
+ (and (assq onum onum-alist)
+ (setcar (assq onum onum-alist) new-number)))
;; update mark-alist
(when (setq mark (cadr (assq onum omark-alist)))
(setq new-mark-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)