- (sort flist '<))))
-
-(luna-define-method elmo-folder-append-buffer ((folder elmo-localdir-folder)
- unread
- &optional number)
- (let ((filename (elmo-message-file-name
- 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)
- (if (elmo-folder-message-file-p src-folder)
- (let ((dir (elmo-localdir-folder-directory-internal folder))
- (succeeds numbers)
- (next-num (1+ (car (elmo-folder-status folder)))))
- (while 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))
- (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)))))
- succeeds)
- (luna-call-next-method)))
-
-(luna-define-method elmo-folder-delete-messages ((folder elmo-localdir-folder)
- numbers)
- (dolist (number numbers)
- (elmo-localdir-delete-message folder number))
- t)
-
-(defun elmo-localdir-delete-message (folder number)
- "Delete message in the FOLDER with NUMBER."
- (let ((filename (elmo-message-file-name folder number)))
- (when (and (string-match "[0-9]+" filename) ; for safety.
- (file-exists-p filename)
- (file-writable-p filename)
- (not (file-directory-p filename)))
- (delete-file filename)
- t)))
-
-(luna-define-method elmo-message-fetch ((folder elmo-localdir-folder)
- number strategy
- &optional section outbuf unseen)
- ;; strategy, section, unseen is ignored.
- (if outbuf
- (with-current-buffer outbuf
- (erase-buffer)
- (when (file-exists-p (elmo-message-file-name folder number))
- (insert-file-contents-as-binary
- (elmo-message-file-name folder number))
- (elmo-delete-cr-buffer))
- t)
- (with-temp-buffer
- (when (file-exists-p (elmo-message-file-name folder number))
- (insert-file-contents-as-binary (elmo-message-file-name folder number))
- (elmo-delete-cr-buffer))
- (buffer-string))))
-
-(luna-define-method elmo-folder-list-messages-internal
- ((folder elmo-localdir-folder) &optional nohide)
- (elmo-localdir-list-subr folder))
-
-(luna-define-method elmo-folder-status ((folder elmo-localdir-folder))
- (elmo-localdir-list-subr folder t))
-
-(luna-define-method elmo-folder-creatable-p ((folder elmo-localdir-folder))
+ (setq numbers (sort flist '<))
+ (elmo-living-messages numbers killed))))
+
+(defun elmo-localdir-append-msg (spec string &optional msg no-see)
+ (let ((dir (elmo-localdir-get-folder-directory spec))
+ (tmp-buffer (get-buffer-create " *ELMO Temp buffer*"))
+ (next-num (or msg
+ (1+ (car (elmo-localdir-max-of-folder spec)))))
+ filename)
+ (save-excursion
+ (set-buffer tmp-buffer)
+ (erase-buffer)
+ (setq filename (expand-file-name (int-to-string
+ next-num)
+ dir))
+ (unwind-protect
+ (if (file-writable-p filename)
+ (progn
+ (insert string)
+ (as-binary-output-file
+ (write-region (point-min) (point-max) filename nil 'no-msg))
+ t)
+ nil
+ )
+ (kill-buffer tmp-buffer)))))
+
+(defun elmo-localdir-delete-msg (spec number)
+ (let (file
+ (dir (elmo-localdir-get-folder-directory spec))
+ (number (int-to-string number)))
+ (setq file (expand-file-name number dir))
+ (if (and (string-match "[0-9]+" number) ; for safety.
+ (file-exists-p file)
+ (file-writable-p file)
+ (not (file-directory-p file)))
+ (progn (delete-file file)
+ t))))
+
+(defun elmo-localdir-read-msg (spec number outbuf &optional msgdb unread)
+ (save-excursion
+ (let* ((number (int-to-string number))
+ (dir (elmo-localdir-get-folder-directory spec))
+ (file (expand-file-name number dir)))
+ (set-buffer outbuf)
+ (erase-buffer)
+ (when (file-exists-p file)
+ (as-binary-input-file (insert-file-contents file))
+ (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-localdir-delete-msgs (spec msgs)
+ (mapcar '(lambda (msg) (elmo-localdir-delete-msg spec msg))
+ msgs))
+
+(defun elmo-localdir-list-folder (spec &optional nohide); called by elmo-localdir-search()
+ (elmo-localdir-list-folder-subr spec))
+
+(defun elmo-localdir-max-of-folder (spec)
+ (elmo-localdir-list-folder-subr spec t))
+
+(defun elmo-localdir-check-validity (spec validity-file)
+ (let* ((dir (elmo-localdir-get-folder-directory spec))
+ (cur-val (nth 5 (file-attributes dir)))
+ (file-val (read
+ (or (elmo-get-file-string validity-file)
+ "nil"))))
+ (cond
+ ((or (null cur-val) (null file-val)) nil)
+ ((> (car cur-val) (car file-val)) nil)
+ ((= (car cur-val) (car file-val))
+ (if (> (cadr cur-val) (cadr file-val)) nil t)) ; t if same
+ (t t))))
+
+(defun elmo-localdir-sync-validity (spec validity-file)
+ (save-excursion
+ (let* ((dir (elmo-localdir-get-folder-directory spec))
+ (tmp-buffer (get-buffer-create " *ELMO TMP*"))
+ (number-file (expand-file-name elmo-msgdb-number-filename dir)))
+ (set-buffer tmp-buffer)
+ (erase-buffer)
+ (prin1 (nth 5 (file-attributes dir)) tmp-buffer)
+ (princ "\n" tmp-buffer)
+ (if (file-writable-p validity-file)
+ (write-region (point-min) (point-max)
+ validity-file nil 'no-msg)
+ (message (format "%s is not writable." number-file)))
+ (kill-buffer tmp-buffer))))
+
+(defun elmo-localdir-folder-exists-p (spec)
+ (file-directory-p (elmo-localdir-get-folder-directory spec)))
+
+(defun elmo-localdir-folder-creatable-p (spec)