;;; Code:
;;
+(eval-when-compile (require 'cl))
+(require 'elmo)
(require 'elmo-msgdb)
-(require 'emu)
-(require 'std11)
-(eval-when-compile (require 'elmo-localdir))
;;; User vars.
(defvar elmo-archive-lha-dos-compatible
(setq newfile (elmo-concat-path
prefix
(int-to-string next-num)))
- (unwind-protect
- (elmo-bind-directory
- tmp-dir
- (if (and (or (functionp method) (car method))
- (file-writable-p newfile))
- (progn
- (setq dst-buffer (current-buffer))
- (with-current-buffer src-buffer
- (copy-to-buffer dst-buffer (point-min) (point-max)))
- (as-binary-output-file
+ (elmo-bind-directory
+ tmp-dir
+ (if (and (or (functionp method) (car method))
+ (file-writable-p newfile))
+ (progn
+ (setq dst-buffer (current-buffer))
+ (with-current-buffer src-buffer
+ (copy-to-buffer dst-buffer (point-min) (point-max)))
+ (as-binary-output-file
(write-region (point-min) (point-max) newfile nil 'no-msg))
- (elmo-archive-call-method method (list arc newfile))
- (elmo-folder-preserve-flags
- folder
- (with-current-buffer src-buffer
- (elmo-msgdb-get-message-id-from-buffer))
- flags)
- t)
- nil))))))
-
-(luna-define-method elmo-folder-append-messages :around
- ((folder elmo-archive-folder) src-folder numbers &optional same-number)
+ (when (elmo-archive-call-method method (list arc newfile))
+ (elmo-folder-preserve-flags
+ folder
+ (with-current-buffer src-buffer
+ (elmo-msgdb-get-message-id-from-buffer))
+ flags)
+ t))
+ nil)))))
+
+(defun elmo-folder-append-messages-*-archive (folder
+ src-folder
+ numbers
+ same-number)
(let ((prefix (elmo-archive-folder-archive-prefix-internal folder)))
(cond
((and same-number
(elmo-folder-message-file-p src-folder)
(elmo-folder-message-file-number-p src-folder))
;; same-number(localdir, localnews) -> archive
- (elmo-archive-append-files folder
- (elmo-folder-message-file-directory src-folder)
- numbers)
+ (unless (elmo-archive-append-files
+ folder
+ (elmo-folder-message-file-directory src-folder)
+ numbers)
+ (setq numbers nil))
(elmo-progress-notify 'elmo-folder-move-messages (length numbers))
numbers)
((elmo-folder-message-make-temp-file-p src-folder)
folder))
(car (elmo-folder-status folder)) 0)))))
new-dir base-dir files)
- (setq base-dir temp-dir)
- (when (> (length prefix) 0)
- (when (file-name-directory prefix)
- (elmo-make-directory (file-name-directory prefix)))
- (rename-file
- temp-dir
- (setq new-dir
- (expand-file-name
- prefix
- ;; parent of temp-dir..(works in windows?)
- (expand-file-name ".." temp-dir))))
- ;; now temp-dir has name prefix.
- (setq temp-dir new-dir)
- ;; parent of prefix becomes base-dir.
- (setq base-dir (expand-file-name ".." temp-dir)))
- (setq files
- (mapcar
- '(lambda (x) (elmo-concat-path prefix x))
- (directory-files temp-dir nil "^[^\\.]")))
- (if (elmo-archive-append-files folder
- base-dir
- files)
- (elmo-delete-directory temp-dir)))
+ (unwind-protect
+ (progn
+ (setq base-dir temp-dir)
+ (when (> (length prefix) 0)
+ (when (file-name-directory prefix)
+ (elmo-make-directory (file-name-directory prefix)))
+ (rename-file
+ temp-dir
+ (setq new-dir
+ (expand-file-name
+ prefix
+ ;; parent of temp-dir..(works in windows?)
+ (expand-file-name ".." temp-dir))))
+ ;; now temp-dir has name prefix.
+ (setq temp-dir new-dir)
+ ;; parent of prefix becomes base-dir.
+ (setq base-dir (expand-file-name ".." temp-dir)))
+ (setq files
+ (mapcar
+ '(lambda (x) (elmo-concat-path prefix x))
+ (directory-files temp-dir nil "^[^\\.]")))
+ (unless (elmo-archive-append-files folder
+ base-dir
+ files)
+ (setq numbers nil)))
+ (elmo-delete-directory temp-dir)))
(elmo-progress-notify 'elmo-folder-move-messages (length numbers))
numbers)
- (t (luna-call-next-method)))))
+ (t
+ (elmo-folder-append-messages folder src-folder numbers same-number
+ 'elmo-folder-append-messages-*-archive)))))
(luna-define-method elmo-folder-message-make-temp-file-p
((folder elmo-archive-folder))
(elmo-archive-exec-msgs-subr2
n-prog (append n-prog-arg (list arc)) files (length arc)))))))))
-(luna-define-method elmo-folder-delete-messages ((folder elmo-archive-folder)
- numbers)
+(luna-define-method elmo-folder-delete-messages-internal ((folder
+ elmo-archive-folder)
+ numbers)
(let* ((type (elmo-archive-folder-archive-type-internal folder))
(prefix (elmo-archive-folder-archive-prefix-internal folder))
(arc (elmo-archive-get-archive-name folder))
numbers flag-table)
(when numbers
(save-excursion ;; 981005
- (if (and elmo-archive-use-izip-agent
- (elmo-archive-get-method
- (elmo-archive-folder-archive-type-internal folder)
- 'cat-headers))
- (elmo-archive-msgdb-create-as-numlist-subr2
- folder numbers flag-table)
- (elmo-archive-msgdb-create-as-numlist-subr1
- folder numbers flag-table)))))
+ (elmo-with-progress-display (elmo-folder-create-msgdb (length numbers))
+ "Creating msgdb"
+ (if (and elmo-archive-use-izip-agent
+ (elmo-archive-get-method
+ (elmo-archive-folder-archive-type-internal folder)
+ 'cat-headers))
+ (elmo-archive-msgdb-create-as-numlist-subr2
+ folder numbers flag-table)
+ (elmo-archive-msgdb-create-as-numlist-subr1
+ folder numbers flag-table))))))
(defun elmo-archive-msgdb-create-as-numlist-subr1 (folder numlist flag-table)
(let* ((type (elmo-archive-folder-archive-type-internal folder))
(file (elmo-archive-get-archive-name folder))
(method (elmo-archive-get-method type 'cat))
(new-msgdb (elmo-make-msgdb))
- entity i percent num message-id flags)
+ entity message-id flags)
(with-temp-buffer
- (setq num (length numlist))
- (setq i 0)
- (message "Creating msgdb...")
(while numlist
(erase-buffer)
(setq entity
flags (elmo-flag-table-get flag-table message-id))
(elmo-global-flags-set flags folder (car numlist) message-id)
(elmo-msgdb-append-entity new-msgdb entity flags))
- (when (> num elmo-display-progress-threshold)
- (setq i (1+ i))
- (setq percent (/ (* i 100) num))
- (elmo-display-progress
- 'elmo-archive-msgdb-create-as-numlist-subr1 "Creating msgdb..."
- percent))
+ (elmo-progress-notify 'elmo-folder-msgdb-create)
(setq numlist (cdr numlist)))
- (message "Creating msgdb...done")
new-msgdb)))
;;; info-zip agent
(args (cdr method))
(arc (elmo-archive-get-archive-name folder))
(new-msgdb (elmo-make-msgdb))
- n i percent num msgs case-fold-search)
+ n msgs case-fold-search)
(with-temp-buffer
- (setq num (length numlist))
- (setq i 0)
- (message "Creating msgdb...")
(while numlist
(setq n (min (1- elmo-archive-fetch-headers-volume)
(1- (length numlist))))
'concat
(mapcar '(lambda (x) (elmo-concat-path prefix (int-to-string x))) msgs)
"\n"))
- (message "Fetching headers...")
(as-binary-process (apply 'call-process-region
(point-min) (point-max)
prog t t nil (append args (list arc))))
;;; (elmo-archive-parse-unixmail msgs flag-table)))
(t ;; unknown format
(error "Unknown format!")))
- (when (> num elmo-display-progress-threshold)
- (setq i (+ n i))
- (setq percent (/ (* i 100) num))
- (elmo-display-progress
- 'elmo-archive-msgdb-create-as-numlist-subr2 "Creating msgdb..."
- percent))))
+ (elmo-progress-notify 'elmo-folder-msgdb-create)))
new-msgdb))
(defun elmo-archive-parse-mmdf (folder msgs flag-table)
(elmo-archive-call-method method args t))
(set-buffer-multibyte default-enable-multibyte-characters)
(decode-mime-charset-region (point-min)(point-max) elmo-mime-charset)
- (elmo-buffer-field-condition-match condition number number-list))))))
+ (elmo-message-buffer-match-condition condition number))))))
(luna-define-method elmo-folder-search ((folder elmo-archive-folder)
condition &optional from-msgs)
;; updates match-data.
;; (msgs (or from-msgs (elmo-archive-list-folder spec)))
(msgs (or from-msgs (elmo-folder-list-messages folder)))
- (num (length msgs))
- (i 0)
(case-fold-search nil)
- number-list ret-val)
- (setq number-list msgs)
- (while msgs
- (if (elmo-archive-field-condition-match
- folder (car msgs) number-list
- condition
- (elmo-archive-folder-archive-prefix-internal folder))
- (setq ret-val (cons (car msgs) ret-val)))
- (when (> num elmo-display-progress-threshold)
- (setq i (1+ i))
- (elmo-display-progress
- 'elmo-archive-search "Searching..."
- (/ (* i 100) num)))
- (setq msgs (cdr msgs)))
+ ret-val)
+ (elmo-with-progress-display (elmo-folder-search (length msgs)) "Searching"
+ (dolist (number msgs)
+ (when (elmo-archive-field-condition-match
+ folder number msgs
+ condition
+ (elmo-archive-folder-archive-prefix-internal folder))
+ (setq ret-val (cons number ret-val)))
+ (elmo-progress-notify 'elmo-folder-search)))
(nreverse ret-val)))
;;; method(alist)