* mmelmo-imap4-2.el (mmelmo-imap4-get-mime-entity):
[elisp/wanderlust.git] / elmo / mmelmo-2.el
1 ;;; mmelmo-2.el -- mm-backend (for FLIM 1.13.x) by ELMO.
2
3 ;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
4
5 ;; Author: Yuuichi Teranishi <teranisi@gohome.org>
6 ;; Keywords: mail, net news
7
8 ;; This file is part of ELMO (Elisp Library for Message Orchestration).
9
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14 ;;
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19 ;;
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24 ;;
25
26 ;;; Commentary:
27 ;; 
28
29 ;;; Code:
30 ;; 
31
32 (require 'mmelmo-imap4)
33 (require 'mmelmo)
34 (require 'mmbuffer)
35
36 (defvar mmelmo-force-reload nil)
37 (defvar mmelmo-sort-field-list nil)
38
39 (eval-and-compile
40   (luna-define-class mime-elmo-entity (mime-buffer-entity)
41                      (imap folder number msgdb size))
42   (luna-define-internal-accessors 'mime-elmo-entity))
43
44 (luna-define-method initialize-instance :after ((entity mime-elmo-entity)
45                                                 &rest init-args)
46   "The initialization method for elmo.
47 mime-elmo-entity has its own member variable,
48 `imap', `folder', `msgdb' and `size'.
49 imap:   boolean. if non-nil, entity becomes mime-elmo-imap4-entity class.
50 folder: string.  folder name.
51 msgdb:  msgdb of elmo.
52 size:   size of the entity."
53   (if (mime-elmo-entity-imap-internal entity)
54       ;; use imap part fetching.
55       ;; child mime-entity's class becomes `mime-elmo-imap4-entity'
56       ;; which implements `entity-buffer' method.
57       (progn
58         (let (new-entity)
59           (mime-buffer-entity-set-buffer-internal entity nil)
60           (setq new-entity
61                 (mmelmo-imap4-get-mime-entity
62                  (mime-elmo-entity-folder-internal entity) ; folder
63                  (mime-elmo-entity-number-internal entity) ; number
64                  (mime-elmo-entity-msgdb-internal entity)  ; msgdb
65                  ))
66           (mime-entity-set-content-type-internal
67            entity
68            (mime-entity-content-type-internal new-entity))
69           (mime-entity-set-encoding-internal
70            entity
71            (mime-entity-encoding-internal new-entity))
72           (mime-entity-set-children-internal
73            entity
74            (mime-entity-children-internal new-entity))
75           (mime-elmo-entity-set-size-internal
76            entity
77            (mime-elmo-entity-size-internal new-entity))
78           (mime-entity-set-representation-type-internal
79            entity 'mime-elmo-imap4-entity)
80           entity))
81     (set-buffer (mime-buffer-entity-buffer-internal entity))
82     (mmelmo-original-mode)
83     (when (mime-root-entity-p entity)
84       (let ((buffer-read-only nil)
85             header-end body-start)
86         (erase-buffer)
87         (elmo-read-msg-with-buffer-cache
88          (mime-elmo-entity-folder-internal entity)
89          (mime-elmo-entity-number-internal entity)
90          (current-buffer)
91          (mime-elmo-entity-msgdb-internal entity)
92          mmelmo-force-reload)
93         (goto-char (point-min))
94         (if (re-search-forward
95              (concat "^" (regexp-quote mail-header-separator) "$\\|^$" )
96              nil t)
97             (setq header-end (match-beginning 0)
98                   body-start (if (= (match-end 0) (point-max))
99                                  (point-max)
100                                (1+ (match-end 0))))
101           (setq header-end (point-min)
102                 body-start (point-min)))
103         (mime-buffer-entity-set-header-start-internal entity (point-min))
104         (mime-buffer-entity-set-header-end-internal entity header-end)
105         (mime-buffer-entity-set-body-start-internal entity body-start)
106         (mime-buffer-entity-set-body-end-internal entity (point-max))
107         (save-restriction
108           (narrow-to-region (mime-buffer-entity-header-start-internal entity)
109                             (mime-buffer-entity-header-end-internal entity))
110           (mime-entity-set-content-type-internal
111            entity
112            (let ((str (std11-fetch-field "Content-Type")))
113              (if str
114                  (mime-parse-Content-Type str)
115                ))))))
116     entity))
117
118 (luna-define-method mime-insert-header ((entity mime-elmo-entity)
119                                         &optional invisible-fields
120                                         visible-fields)
121   (mmelmo-insert-sorted-header-from-buffer
122    (mime-buffer-entity-buffer-internal entity)
123    (mime-buffer-entity-header-start-internal entity)
124    (mime-buffer-entity-header-end-internal entity)
125    invisible-fields visible-fields mmelmo-sort-field-list))
126
127 (luna-define-method mime-insert-text-content :around ((entity
128                                                        mime-elmo-entity))
129   (luna-call-next-method)
130   (run-hooks 'mmelmo-entity-content-inserted-hook))
131
132 ;(luna-define-method mime-entity-content ((entity mime-elmo-entity))
133 ;  (mime-decode-string
134 ;   (with-current-buffer (mime-buffer-entity-buffer-internal entity)
135 ;     (buffer-substring (mime-buffer-entity-body-start-internal entity)
136 ;                      (mime-buffer-entity-body-end-internal entity)))
137 ;   (mime-entity-encoding entity)))
138
139 (provide 'mmelmo-2)
140
141 ;;; mmelmo-2.el ends here