entity-map ; number, msg-id -> entity mapping.
flag-map ; number -> flag-list mapping
flag-count ; list of (FLAG . COUNT)
+ overview-handler ; instance of modb-entity-handler.
))
(luna-define-internal-accessors 'modb-standard))
(modb-standard-key number)
(modb-standard-entity-map-internal msgdb))))
(cond
- ((and ret (eq (car-safe ret) 'autoload))
- (cdr (cdr ret))) ; message-id.
- ((and ret (stringp (car-safe ret)))
- ;; Already loaded.
- (car ret))
((null ret)
;; Garbage entity.
(elmo-clear-hash-val (modb-standard-key number)
(modb-standard-entity-map-internal msgdb))
nil) ; return nil.
+ ((eq (car-safe ret) 'autoload)
+ (cdr (cdr ret))) ; message-id.
+ ((elmo-msgdb-message-entity-field (elmo-message-entity-handler ret)
+ ret 'message-id)) ; Already loaded.
(t (error "Internal error: invalid msgdb status")))))
(defun modb-standard-load-entity (modb path &optional section)
number msgid)
(cond ((eq (car objects) 'modb-standard-entity-handler)
;; (standard PARAMETERS ENTITY*)
- ;; PARAMETERS is nil (reserved for future extention).
(let ((handler (apply #'luna-make-entity
(car objects)
(car (cdr objects))))
(dolist (number (or (cdr section)
(modb-standard-number-list-internal modb)))
(when (setq entity (elmo-msgdb-message-entity modb number))
- (unless (eq (luna-class-name (elmo-message-entity-handler entity))
- (luna-class-name handler))
+ (unless (modb-entity-handler-equal-p
+ handler
+ (elmo-message-entity-handler entity))
(setq entity (elmo-msgdb-copy-message-entity
(elmo-message-entity-handler entity)
entity handler)))
(setq entities (cons (cdr (cdr entity)) entities))))
(if entities
(elmo-object-save filename
- (cons (luna-class-name handler) (cons nil entities))
- elmo-mime-charset)
+ (nconc
+ (list (luna-class-name handler)
+ (modb-entity-handler-dump-parameters handler))
+ entities))
(ignore-errors (delete-file filename)))))
+(defun modb-standard-cleanup-stale-entities (modb path)
+ (message "Removing stale entities...")
+ (let* ((entity-regex
+ (concat "^" modb-standard-entity-filename "-\\([0-9]+\\)"))
+ (entities (elmo-uniq-list
+ (mapcar
+ (lambda (x) (/ x modb-standard-divide-number))
+ (modb-standard-number-list-internal modb))))
+ (files (mapcar (lambda(x)
+ (when (string-match entity-regex x)
+ (string-to-number (match-string 1 x))))
+ (directory-files path nil entity-regex))))
+ (dolist (entity (car (elmo-list-diff-nonsortable files entities)))
+ (ignore-errors (delete-file
+ (expand-file-name
+ (modb-standard-entity-filename entity) path))))))
+
(defun modb-standard-save-entity (modb path)
(let ((modified (modb-generic-message-modified-internal modb)))
(cond ((listp modified)
(msg-id (elmo-msgdb-message-entity-field
(elmo-message-entity-handler entity) entity 'message-id))
duplicate)
- (when msg-id
+ (when (and number msg-id)
;; number-list
(modb-standard-set-number-list-internal
msgdb
((numberp key) (modb-standard-key key)))
'autoload)))
-(defvar modb-standard-default-entity-handler nil)
-
(luna-define-method elmo-msgdb-message-entity-handler ((msgdb modb-standard))
- (or modb-standard-default-entity-handler
- (setq modb-standard-default-entity-handler
- (luna-make-entity 'modb-standard-entity-handler))))
+ (or (modb-standard-overview-handler-internal msgdb)
+ (modb-standard-set-overview-handler-internal
+ msgdb
+ (luna-make-entity 'modb-standard-entity-handler
+ :mime-charset
+ (modb-generic-mime-charset-internal msgdb)))))
(require 'product)
(product-provide (provide 'modb-standard) (require 'elmo-version))