+2001-09-10 Yuuichi Teranishi <teranisi@gohome.org>
+
+ * mmimap.el (mime-imap-entity::requested): New slot.
+ (mime-imap-location-fetch-entity-p): New generic function.
+ (mime-decode-parameters): Define using `defun-maybe'.
+ (mmimap-make-mime-entity): Use `make-mime-content-type' to make
+ content-type structure.
+ (mime-entity-body): Return empty body if
+ `mime-imap-location-fetch-entity-p' returns nil in the first request.
+
+ * elmo.el (elmo-message-displaying): New variable.
+
+ * elmo-mime.el (elmo-mime-message-display): Bind
+ elmo-message-displaying as t.
+
+ * elmo-imap4.el (mime-imap-location-fetch-entity-p): Define.
+
2001-08-31 Yuuichi Teranishi <teranisi@gohome.org>
* acap.el (acap-open): erase buffer before starting network process.
(eval-and-compile
(luna-define-class mime-imap-entity (mime-entity)
- (size header-string body-string new))
+ (size header-string body-string new requested))
(luna-define-internal-accessors 'mime-imap-entity))
;;; @ MIME IMAP location
"Return a parsed bodystructure of LOCATION.
`NIL' should be converted to nil, `astring' should be converted to a string.")
+(luna-define-generic mime-imap-location-fetch-entity-p (location entity)
+ "Return non-nil when LOCATION may fetch the ENTITY.")
+
;;; @ Subroutines
;;
(reverse node-id)
"."))))
-(static-if (fboundp 'mime-decode-parameters)
- (defalias 'mmimap-parse-parameters-from-list 'mime-decode-parameters)
- (defun mmimap-parse-parameters-from-list (attrlist)
- "Parse parameters from ATTRLIST."
+(eval-and-compile
+ (defun-maybe mime-decode-parameters (attrlist)
(let (ret-val)
(while attrlist
(setq ret-val (append ret-val
:location location
:node-id (if (eq number 0)
node-id
- (nconc (list number) node-id))
- ))
+ (nconc (list number) node-id))))
(while (and (setq curp (car bodystructure))
(listp curp))
(setq children
(setq num (+ num 1))
(setq bodystructure (cdr bodystructure)))
(mime-entity-set-children-internal entity children)
- (setq content-type (list (cons 'type 'multipart)))
- (if (car bodystructure)
- (setq content-type (nconc content-type
- (list (cons 'subtype
- (intern
- (downcase
- (car
- bodystructure))))))))
- (setq content-type (append content-type
- (mmimap-parse-parameters-from-list
- (nth 1 bodystructure))))
- (mime-entity-set-content-type-internal entity content-type)
+ (mime-entity-set-content-type-internal
+ entity
+ (make-mime-content-type 'multipart
+ (if (car bodystructure)
+ (intern (downcase
+ (car bodystructure))))
+ (mime-decode-parameters
+ (nth 1 bodystructure))))
entity))
(t ; singlepart
(let (content-type entity)
- (setq content-type
- (list (cons 'type (intern (downcase (car bodystructure))))))
- (if (nth 1 bodystructure)
- (setq content-type (append content-type
- (list
- (cons 'subtype
- (intern
- (downcase
- (nth 1 bodystructure))))))))
- (if (nth 2 bodystructure)
- (setq content-type (append content-type
- (mmimap-parse-parameters-from-list
- (nth 2 bodystructure)))))
(setq node-id (nconc (list number) node-id))
(setq entity
(luna-make-entity
:location location
:parent parent
:node-id node-id))
- (mime-entity-set-content-type-internal entity content-type)
+ (mime-entity-set-content-type-internal
+ entity
+ (make-mime-content-type (intern (downcase (car bodystructure)))
+ (if (nth 1 bodystructure)
+ (intern (downcase
+ (nth 1 bodystructure))))
+ (mime-decode-parameters
+ (nth 2 bodystructure))))
(mime-entity-set-encoding-internal entity
(and (nth 5 bodystructure)
(downcase
(luna-define-method mime-entity-body ((entity mime-imap-entity))
(or (mime-imap-entity-body-string-internal entity)
- (mime-imap-entity-set-body-string-internal
- entity
- (mime-imap-location-section-body
- (mime-entity-location-internal entity)
- (mmimap-entity-section
- (mime-entity-node-id-internal entity))))))
+ (if (or (mime-imap-entity-requested-internal entity) ; second time.
+ (mime-imap-location-fetch-entity-p
+ (mime-entity-location-internal entity)
+ entity))
+ (mime-imap-entity-set-body-string-internal
+ entity
+ (mime-imap-location-section-body
+ (mime-entity-location-internal entity)
+ (mmimap-entity-section
+ (mime-entity-node-id-internal entity))))
+ (mime-imap-entity-set-requested-internal entity t)
+ "")))
(luna-define-method mime-insert-entity-body ((entity mime-imap-entity))
(insert (mime-entity-body entity)))