(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)
"cache/"
(file-name-nondirectory f))))
(directory-files (elmo-cache-folder-directory-internal folder)
- t "^[^.].*+"))))
+ t "^[01][0-9A-F]$"))))
(luna-define-method elmo-folder-message-file-p ((folder elmo-cache-folder))
t)
(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))
- entity message-id mark)
- (message "Creating msgdb...")
- (while numbers
- (setq entity
- (elmo-msgdb-create-overview-entity-from-file
- (car numbers) (elmo-message-file-name folder (car numbers))))
- (when entity
- (setq message-id (elmo-msgdb-overview-entity-get-id entity))
- (setq mark (or (elmo-msgdb-global-mark-get 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 mark))
- (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")
+ (let ((new-msgdb (elmo-make-msgdb))
+ entity message-id flags)
+ (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* ((file (elmo-file-cache-get-path (std11-field-body "message-id")))
- (dir (directory-file-name (file-name-directory file))))
- (unless (file-exists-p dir)
- (elmo-make-directory dir))
- (when (file-writable-p file)
- (write-region-as-binary
- (point-min) (point-max) file nil 'no-msg))))
- t)
+ (let ((msgid (std11-field-body "message-id"))
+ file dir)
+ (when msgid
+ (setq file (elmo-file-cache-get-path msgid))
+ (setq dir (directory-file-name (file-name-directory file)))
+ (unless (file-exists-p dir)
+ (elmo-make-directory dir))
+ (when (and (file-writable-p file)
+ (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)
locations)
(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