X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-cache.el;h=7a81949691ef9ccb5dc9dd9d3fa8958f0cb21389;hb=129ba17ee2b41bc7f6d10a871fb5db09dcc4a968;hp=2824f85b17d4b8b530e45d95bf4f2fee5d8b924c;hpb=9e39553b80115a949a7f04ddced4459a7797f8bd;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-cache.el b/elmo/elmo-cache.el index 2824f85..7a81949 100644 --- a/elmo/elmo-cache.el +++ b/elmo/elmo-cache.el @@ -35,10 +35,6 @@ (require 'elmo) (require 'elmo-map) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; cache backend by Kenichi OKADA -;; (eval-and-compile (luna-define-class elmo-cache-folder (elmo-map-folder) (dir-name directory)) (luna-define-internal-accessors 'elmo-cache-folder)) @@ -79,7 +75,7 @@ "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) @@ -91,70 +87,66 @@ (elmo-cache-folder-directory-internal folder))) (luna-define-method elmo-folder-msgdb-create ((folder elmo-cache-folder) - numbers new-mark - already-mark seen-mark - important-mark - seen-list) + numbers flag-table) (let ((i 0) (len (length numbers)) - overview number-alist mark-alist entity message-id - num mark) + (new-msgdb (elmo-make-msgdb)) + entity message-id flags) (message "Creating msgdb...") (while numbers (setq entity - (elmo-msgdb-create-overview-entity-from-file + (elmo-msgdb-create-message-entity-from-file + (elmo-msgdb-message-entity-handler new-msgdb) (car numbers) (elmo-message-file-name folder (car numbers)))) - (if (null entity) - () - (setq num (elmo-msgdb-overview-entity-get-number entity)) - (setq overview - (elmo-msgdb-append-element - overview entity)) - (setq message-id (elmo-msgdb-overview-entity-get-id entity)) - (setq number-alist - (elmo-msgdb-number-add number-alist - num - message-id)) - (if (setq mark (or (elmo-msgdb-global-mark-get message-id) - (if (member message-id seen-list) nil new-mark))) - (setq mark-alist - (elmo-msgdb-mark-append - mark-alist - num mark))) - (when (> len elmo-display-progress-threshold) - (setq i (1+ i)) - (elmo-display-progress - 'elmo-cache-folder-msgdb-create "Creating msgdb..." - (/ (* i 100) len)))) + (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") - (list overview number-alist mark-alist))) + new-msgdb)) (luna-define-method elmo-folder-append-buffer ((folder elmo-cache-folder) - unread - &optional 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) +(luna-define-method elmo-message-fetch + ((folder elmo-cache-folder) number strategy &optional unseen section) ;; disbable cache process - (elmo-message-fetch-internal folder number strategy section unseen)) + (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 @@ -165,62 +157,15 @@ (when (file-exists-p file) (insert-file-contents-as-binary file)))) -(luna-define-method elmo-folder-creatable-p ((folder elmo-cache-folder)) - nil) - (luna-define-method elmo-folder-writable-p ((folder elmo-cache-folder)) t) (luna-define-method elmo-folder-exists-p ((folder elmo-cache-folder)) t) -(luna-define-method elmo-folder-search ((folder elmo-cache-folder) - condition &optional from-msgs) - (let* ((msgs (or from-msgs (elmo-folder-list-messages folder))) - (number-list msgs) - (i 0) - (num (length msgs)) - file - matched - case-fold-search) - (while msgs - (if (and (setq file (elmo-message-file-name folder (car msgs))) - (file-exists-p file) - (elmo-file-field-condition-match file - condition - (car msgs) - number-list)) - (setq matched (nconc matched (list (car msgs))))) - (elmo-display-progress - 'elmo-internal-folder-search "Searching..." - (/ (* (setq i (1+ i)) 100) num)) - (setq msgs (cdr msgs))) - matched)) - (luna-define-method elmo-message-file-p ((folder elmo-cache-folder) number) t) -;;; To override elmo-map-folder methods. -(luna-define-method elmo-folder-list-unreads-internal - ((folder elmo-cache-folder) unread-marks &optional mark-alist) - t) - -(luna-define-method elmo-folder-unmark-important ((folder elmo-cache-folder) - numbers) - t) - -(luna-define-method elmo-folder-mark-as-important ((folder elmo-cache-folder) - numbers) - t) - -(luna-define-method elmo-folder-unmark-read ((folder elmo-cache-folder) - numbers) - t) - -(luna-define-method elmo-folder-mark-as-read ((folder elmo-cache-folder) - numbers) - t) - (require 'product) (product-provide (provide 'elmo-cache) (require 'elmo-version))