- ;; Return cache-path of STRATEGY.
- (` (aref (, strategy) 3)))
-
-(luna-define-method elmo-find-fetch-strategy
- ((folder elmo-folder) entity &optional ignore-cache)
- (let (cache-file size message-id number)
- (setq size (elmo-message-entity-field entity 'size))
- (setq message-id (elmo-message-entity-field entity 'message-id))
- (setq number (elmo-message-entity-number entity))
- (setq cache-file (elmo-file-cache-get message-id))
- (setq ignore-cache (or ignore-cache
- (null (elmo-message-use-cache-p folder number))))
- (if (or ignore-cache
- (null (elmo-file-cache-status cache-file)))
- ;; No cache or ignore-cache.
- (if (and (not (elmo-folder-local-p folder))
- elmo-message-fetch-threshold
- (integerp size)
- (>= size elmo-message-fetch-threshold)
- (or (not elmo-message-fetch-confirm)
- (not (prog1 (y-or-n-p
- (format "Fetch entire message(%dbytes)? "
- size))
- (message "")))))
- ;; Don't fetch message at all.
- nil
- ;; Don't use existing cache and fetch entire message at once.
- (elmo-make-fetch-strategy
- 'entire nil
- (elmo-message-use-cache-p folder number)
- (elmo-file-cache-path cache-file)))
- ;; Cache exists.
- (if (not ignore-cache)
- (elmo-make-fetch-strategy
- 'entire
- ;; ...But ignore current section cache and re-fetch
- ;; if section cache.
- (not (eq (elmo-file-cache-status cache-file) 'section))
- ;; Save cache.
- (elmo-message-use-cache-p folder number)
- (elmo-file-cache-path cache-file))))))
+ "Return cache-path of STRATEGY."
+ `(aref ,strategy 3))
+
+(luna-define-method elmo-find-fetch-strategy ((folder elmo-folder) number
+ &optional
+ ignore-cache
+ require-entireness)
+ (let ((entity (elmo-message-entity folder number)))
+ (if (null entity)
+ (elmo-make-fetch-strategy 'entire)
+ (let* ((size (elmo-message-entity-field entity 'size))
+ (message-id (elmo-message-entity-field entity 'message-id))
+ (cache-file (elmo-file-cache-get message-id))
+ (use-cache (elmo-message-use-cache-p folder number)))
+ (if (and (not ignore-cache)
+ use-cache
+ (eq (elmo-file-cache-status cache-file) 'entire))
+ ;; Cache exists and use it.
+ (elmo-make-fetch-strategy
+ 'entire
+ t ; Use cache.
+ use-cache ; Save cache.
+ (elmo-file-cache-path cache-file))
+ ;; No cache or ignore-cache.
+ (if (and (not (elmo-folder-local-p folder))
+ (not require-entireness)
+ elmo-message-fetch-threshold
+ (integerp size)
+ (>= size elmo-message-fetch-threshold)
+ (or (not elmo-message-fetch-confirm)
+ (not (prog1
+ (y-or-n-p
+ (format "Fetch entire message(%dbytes)? "
+ size))
+ (message "")))))
+ ;; Don't fetch message at all.
+ nil
+ ;; Don't use existing cache and fetch entire message at once.
+ (elmo-make-fetch-strategy
+ 'entire
+ nil ; Don't use cache.
+ use-cache ; Save cache.
+ (elmo-file-cache-path cache-file))))))))