X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-localdir.el;h=06d0d0643e5b2b110bb14be483d83edd338e5e4f;hb=c2738fdc4e616fb55973a7e285432f60af6c1c57;hp=7ebcf1c59167dbf2a6d94aebd1180119ca15f8eb;hpb=bd8c917787a2b1d4c2048b2a573dce7edfb7a700;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-localdir.el b/elmo/elmo-localdir.el index 7ebcf1c..06d0d06 100644 --- a/elmo/elmo-localdir.el +++ b/elmo/elmo-localdir.el @@ -148,7 +148,8 @@ (when numbers (let ((dir (elmo-localdir-folder-directory-internal folder)) (new-msgdb (elmo-make-msgdb)) - entity message-id gmark + entity message-id + flags (i 0) (len (length numbers))) (message "Creating msgdb...") @@ -157,16 +158,10 @@ (elmo-localdir-msgdb-create-entity dir (car numbers))) (when entity - (setq message-id (elmo-msgdb-overview-entity-get-id entity)) - (setq gmark (or (elmo-msgdb-global-mark-get message-id) - (unless (eq 'read (elmo-flag-table-get - flag-table message-id)) - (elmo-msgdb-mark - (elmo-flag-table-get flag-table message-id) - (elmo-file-cache-status - (elmo-file-cache-get message-id)) - 'new)))) - (elmo-msgdb-append-entity new-msgdb entity gmark)) + (setq message-id (elmo-msgdb-overview-entity-get-id entity) + flags (elmo-flag-table-get flag-table message-id)) + (elmo-global-flags-set flags folder (car numbers) message-id) + (elmo-msgdb-append-entity new-msgdb entity flags)) (when (> len elmo-display-progress-threshold) (setq i (1+ i)) (elmo-display-progress @@ -220,17 +215,9 @@ (table (elmo-flag-table-load (elmo-folder-msgdb-path folder))) (succeeds numbers) (next-num (1+ (car (elmo-folder-status folder)))) - mark flag id) + flags id) (while numbers - (setq mark (and src-msgdb-exists - (elmo-message-mark src-folder (car numbers))) - flag (cond - ((null mark) 'read) - ((member mark (elmo-msgdb-answered-marks)) - 'answered) - ;; - ((not (member mark (elmo-msgdb-unread-marks))) - 'read))) + (setq flags (elmo-message-flags src-folder (car numbers))) (elmo-copy-file (elmo-message-file-name src-folder (car numbers)) (expand-file-name @@ -241,7 +228,7 @@ (when (setq id (and src-msgdb-exists (elmo-message-field src-folder (car numbers) 'message-id))) - (elmo-flag-table-set table id flag)) + (elmo-flag-table-set table id flags)) (elmo-progress-notify 'elmo-folder-move-messages) (if (and (setq numbers (cdr numbers)) (not same-number)) @@ -339,48 +326,31 @@ (luna-define-method elmo-folder-pack-numbers ((folder elmo-localdir-folder)) (let* ((dir (elmo-localdir-folder-directory-internal folder)) (msgdb (elmo-folder-msgdb folder)) - (onum-alist (elmo-msgdb-get-number-alist msgdb)) - (omark-alist (elmo-msgdb-get-mark-alist msgdb)) - (new-number 1) ; first ordinal position in localdir - flist onum mark new-mark-alist total) - (setq flist - (if elmo-pack-number-check-strict - (elmo-folder-list-messages folder) ; allow localnews - (mapcar 'car onum-alist))) - (setq total (length flist)) - (while flist - (when (> total elmo-display-progress-threshold) - (elmo-display-progress - 'elmo-folder-pack-numbers "Packing..." - (/ (* new-number 100) total))) - (setq onum (car flist)) - (when (not (eq onum new-number)) ; why \=() is wrong.. - (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 - (elmo-msgdb-overview-get-entity onum msgdb) - new-number) - ;; update number-alist - (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 - (elmo-msgdb-mark-append - new-mark-alist - new-number mark))) - (setq new-number (1+ new-number)) - (setq flist (cdr flist))) + (new-msgdb (elmo-make-msgdb (elmo-folder-msgdb-path folder))) + (numbers (sort (elmo-folder-list-messages + folder + nil + (not elmo-pack-number-check-strict)) + '<)) + (new-number 1) ; first ordinal position in localdir + total entity) + (setq total (length numbers)) + (elmo-with-progress-display (> total elmo-display-progress-threshold) + (elmo-folder-pack-numbers total "Packing...") + (dolist (old-number numbers) + (setq entity (elmo-msgdb-message-entity msgdb old-number)) + (when (not (eq old-number new-number)) ; why \=() is wrong.. + (elmo-bind-directory + dir + ;; xxx nfs,hardlink + (rename-file (int-to-string old-number) + (int-to-string new-number) t)) + (elmo-msgdb-overview-entity-set-number entity new-number)) + (elmo-msgdb-append-entity new-msgdb entity + (elmo-msgdb-flags msgdb old-number)) + (setq new-number (1+ new-number)))) (message "Packing...done") - (elmo-folder-set-msgdb-internal - folder - (elmo-make-msgdb - (elmo-msgdb-get-overview msgdb) - onum-alist - new-mark-alist)))) + (elmo-folder-set-msgdb-internal folder new-msgdb))) (luna-define-method elmo-folder-message-file-p ((folder elmo-localdir-folder)) t) @@ -400,6 +370,8 @@ (throw 'found t)) (setq lock (cdr lock))))))) +(autoload 'elmo-global-flags-set "elmo-flag") + (require 'product) (product-provide (provide 'elmo-localdir) (require 'elmo-version))