X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-cache.el;h=37f506cda8af1a231f106915af9dd72b7e2bab66;hb=refs%2Fheads%2Fmaster;hp=c09a95f80097fcea0bc55bf151bd94c812d18611;hpb=963a7ca47207d75bc4765071cc23c6d431d1c892;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-cache.el b/elmo/elmo-cache.el index c09a95f..37f506c 100644 --- a/elmo/elmo-cache.el +++ b/elmo/elmo-cache.el @@ -36,7 +36,8 @@ (require 'elmo-map) (eval-and-compile - (luna-define-class elmo-cache-folder (elmo-map-folder) (dir-name directory)) + (luna-define-class elmo-cache-folder (elmo-map-folder elmo-file-tag) + (dir-name directory)) (luna-define-internal-accessors 'elmo-cache-folder)) (luna-define-method elmo-folder-initialize ((folder elmo-cache-folder) @@ -88,32 +89,26 @@ (luna-define-method elmo-folder-msgdb-create ((folder elmo-cache-folder) numbers flag-table) - (let ((i 0) - (len (length numbers)) - (new-msgdb (elmo-make-msgdb)) + (let ((new-msgdb (elmo-make-msgdb)) entity message-id flags) - (message "Creating msgdb...") - (while numbers - (setq entity - (elmo-msgdb-create-message-entity-from-file - (elmo-msgdb-message-entity-handler new-msgdb) - (car numbers) (elmo-message-file-name folder (car numbers)))) - (when 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 numbers) message-id) - (elmo-msgdb-append-entity new-msgdb entity flags)) - (when (> len elmo-display-progress-threshold) - (setq i (1+ i)) - (elmo-display-progress - 'elmo-cache-folder-msgdb-create "Creating msgdb..." - (/ (* i 100) len))) - (setq numbers (cdr numbers))) - (message "Creating msgdb...done") + (elmo-with-progress-display (elmo-folder-msgdb-create (length numbers)) + "Creating msgdb" + (dolist (number numbers) + (setq entity + (elmo-msgdb-create-message-entity-from-file + (elmo-msgdb-message-entity-handler new-msgdb) + number + (elmo-message-file-name folder number))) + (when 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 number message-id) + (elmo-msgdb-append-entity new-msgdb entity flags)) + (elmo-progress-notify 'elmo-folder-msgdb-create))) new-msgdb)) (luna-define-method elmo-folder-append-buffer ((folder elmo-cache-folder) - &optional flag number) + &optional flags number) ;; dir-name is changed according to msgid. (unless (elmo-cache-folder-dir-name-internal folder) (let ((msgid (std11-field-body "message-id")) @@ -127,6 +122,7 @@ (not (file-exists-p file))) (write-region-as-binary (point-min) (point-max) file nil 'no-msg) + (elmo-folder-preserve-flags folder msgid flags) t))))) (luna-define-method elmo-map-folder-delete-messages ((folder elmo-cache-folder) @@ -134,12 +130,18 @@ (dolist (location locations) (elmo-file-cache-delete (expand-file-name location - (elmo-cache-folder-directory-internal folder))))) + (elmo-cache-folder-directory-internal folder)))) + t) -(luna-define-method elmo-message-fetch-with-cache-process - ((folder elmo-cache-folder) number strategy &optional section unseen) - ;; disbable cache process - (elmo-message-fetch-internal folder number strategy section unseen)) +(luna-define-method elmo-message-fetch + ((folder elmo-cache-folder) number strategy &optional unseen section) + ;; disable cache process + (erase-buffer) + (when (elmo-message-fetch-internal folder number strategy section unseen) + (when (and (not unseen) + (elmo-message-flagged-p folder number 'unread)) + (elmo-message-unset-flag folder number 'unread)) + t)) (luna-define-method elmo-map-message-fetch ((folder elmo-cache-folder) location strategy