-;;; elmo-cache.el -- Cache modules for Elmo.
+;;; elmo-cache.el --- Cache modules for ELMO.
;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
;; Copyright (C) 2000 Kenichi OKADA <okada@opaopa.org>
;;
;;; Commentary:
-;;
+;;
;;; Code:
-;;
+;;
(require 'elmo-vars)
(require 'elmo-util)
(require 'elmo)
(require 'elmo-map)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; cache backend by Kenichi OKADA <okada@opaopa.org>
-;;
(eval-and-compile
(luna-define-class elmo-cache-folder (elmo-map-folder) (dir-name directory))
(luna-define-internal-accessors 'elmo-cache-folder))
(elmo-cache-folder-set-directory-internal
folder
(expand-file-name (elmo-match-string 2 name)
- (expand-file-name elmo-cache-dirname elmo-msgdb-dir)))
+ elmo-cache-directory))
folder))
(luna-define-method elmo-folder-expand-msgdb-path ((folder elmo-cache-folder))
(expand-file-name (elmo-cache-folder-dir-name-internal folder)
(expand-file-name "internal/cache"
- elmo-msgdb-dir)))
+ elmo-msgdb-directory)))
(luna-define-method elmo-map-folder-list-message-locations
((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)
(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)
+ t)))))
(luna-define-method elmo-map-folder-delete-messages ((folder elmo-cache-folder)
locations)
(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))