X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-archive.el;h=8437532c1b4b6d9eedfaa48f7be42fdf630b456c;hb=d9e613d8c4841bd56a057163810d8b77487bf8a9;hp=e610f4d304137dc85f9b1417ef335c329ae49321;hpb=c2738fdc4e616fb55973a7e285432f60af6c1c57;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-archive.el b/elmo/elmo-archive.el index e610f4d..8437532 100644 --- a/elmo/elmo-archive.el +++ b/elmo/elmo-archive.el @@ -33,7 +33,9 @@ ;;; Code: ;; +(eval-when-compile (require 'cl)) +(require 'elmo) (require 'elmo-msgdb) (require 'emu) (require 'std11) @@ -578,11 +580,11 @@ TYPE specifies the archiver's symbol." (elmo-archive-message-fetch-internal folder number)) (luna-define-method elmo-folder-append-buffer ((folder elmo-archive-folder) - &optional flag number) - (elmo-archive-folder-append-buffer folder flag number)) + &optional flags number) + (elmo-archive-folder-append-buffer folder flags number)) ;; verrrrrry slow!! -(defun elmo-archive-folder-append-buffer (folder flag number) +(defun elmo-archive-folder-append-buffer (folder flags number) (let* ((type (elmo-archive-folder-archive-type-internal folder)) (prefix (elmo-archive-folder-archive-prefix-internal folder)) (arc (elmo-archive-get-archive-name folder)) @@ -616,8 +618,13 @@ TYPE specifies the archiver's symbol." (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)) - t) + (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)))))) (luna-define-method elmo-folder-append-messages :around @@ -629,9 +636,10 @@ TYPE specifies the archiver's symbol." (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) @@ -666,7 +674,8 @@ TYPE specifies the archiver's symbol." (if (elmo-archive-append-files folder base-dir files) - (elmo-delete-directory temp-dir))) + (elmo-delete-directory temp-dir) + (setq numbers nil))) (elmo-progress-notify 'elmo-folder-move-messages (length numbers)) numbers) (t (luna-call-next-method))))) @@ -759,8 +768,9 @@ TYPE specifies the archiver's symbol." (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)) @@ -893,25 +903,29 @@ TYPE specifies the archiver's symbol." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; MessageDB functions (from elmo-localdir.el) -(defsubst elmo-archive-msgdb-create-entity-subr (number) +(defsubst elmo-archive-msgdb-create-entity-subr (msgdb number) (let (header-end) - (elmo-set-buffer-multibyte default-enable-multibyte-characters) + (set-buffer-multibyte default-enable-multibyte-characters) (goto-char (point-min)) (if (re-search-forward "\\(^--.*$\\)\\|\\(\n\n\\)" nil t) (setq header-end (point)) (setq header-end (point-max))) (narrow-to-region (point-min) header-end) - (elmo-msgdb-create-overview-from-buffer number))) + (elmo-msgdb-create-message-entity-from-buffer + (elmo-msgdb-message-entity-handler msgdb) number))) ;; verrrry slow!! -(defsubst elmo-archive-msgdb-create-entity (method archive number type &optional prefix) +(defsubst elmo-archive-msgdb-create-entity (msgdb + method + archive number type + &optional prefix) (let* ((msg (elmo-concat-path prefix (int-to-string number))) (arg-list (list archive msg))) (when (elmo-archive-article-exists-p archive msg type) ;; insert article. (as-binary-process (elmo-archive-call-method method arg-list t)) - (elmo-archive-msgdb-create-entity-subr number)))) + (elmo-archive-msgdb-create-entity-subr msgdb number)))) (luna-define-method elmo-folder-msgdb-create ((folder elmo-archive-folder) numbers flag-table) @@ -940,10 +954,11 @@ TYPE specifies the archiver's symbol." (erase-buffer) (setq entity (elmo-archive-msgdb-create-entity + new-msgdb method file (car numlist) type (elmo-archive-folder-archive-prefix-internal folder))) (when entity - (setq message-id (elmo-msgdb-overview-entity-get-id 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 numlist) message-id) (elmo-msgdb-append-entity new-msgdb entity flags)) @@ -1027,8 +1042,8 @@ TYPE specifies the archiver's symbol." () ; nop (save-excursion (narrow-to-region sp ep) - (setq entity (elmo-archive-msgdb-create-entity-subr number) - message-id (elmo-msgdb-overview-entity-get-id entity) + (setq entity (elmo-archive-msgdb-create-entity-subr new-msgdb number) + 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) @@ -1052,7 +1067,7 @@ TYPE specifies the archiver's symbol." (when (file-exists-p arc) (as-binary-process (elmo-archive-call-method method args t)) - (elmo-set-buffer-multibyte default-enable-multibyte-characters) + (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))))))