1;;; mime-partial.el --- Grabbing all MIME "message/partial"s.  -*- lexical-binding: t -*-
2
3;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
4
5;; Author: OKABE Yasuo @ Kyoto University
6;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
7;; Keywords: message/partial, MIME, multimedia, mail, news
8
9;; This file is part of SEMI (Suite of Emacs MIME Interfaces).
10
11;; This program is free software; you can redistribute it and/or
12;; modify it under the terms of the GNU General Public License as
13;; published by the Free Software Foundation; either version 2, or (at
14;; your option) any later version.
15
16;; This program is distributed in the hope that it will be useful, but
17;; WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19;; General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs; see the file COPYING.  If not, write to the
23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24;; Boston, MA 02110-1301, USA.
25
26;;; Code:
27
28(require 'mime-view)
29(require 'mime-play)
30
31(defun mime-combine-message/partial-pieces-automatically (entity situation)
32  "Internal method for mime-view to combine message/partial messages
33automatically."
34  (interactive)
35  (let* ((id (cdr (assoc "id" situation)))
36	 (target (cdr (assq 'major-mode situation)))
37	 (subject-buf (eval (cdr (assq 'summary-buffer-exp situation))))
38	 (mother (current-buffer))
39	 subject-id
40	 (root-dir (expand-file-name
41		    (concat "m-prts-" (user-login-name))
42		    temporary-file-directory))
43	 (request-partial-message-method
44	  (cdr (assq 'request-partial-message-method situation)))
45	 full-file)
46    (setq root-dir (concat root-dir "/" (replace-as-filename id)))
47    (setq full-file (concat root-dir "/FULL"))
48
49    (if (null target)
50	(error "%s is not supported. Sorry." target))
51
52    ;; if you can't parse the subject line, try simple decoding method
53    (if (or (file-exists-p full-file)
54	    (not (y-or-n-p "Merge partials?")))
55	(mime-store-message/partial-piece entity situation)
56      (setq subject-id (mime-entity-read-field entity 'Subject))
57      (if (string-match "[0-9\n]+" subject-id)
58	  (setq subject-id (substring subject-id 0 (match-beginning 0))))
59      ;; Do not use `with-current-buffer'.  Inner save-excursion(),
60      ;; the current buffer may be accessed.
61      (save-excursion
62	(set-buffer subject-buf)
63	(while (search-backward subject-id nil t))
64	(catch 'tag
65	  (while t
66	    (let* ((message
67		    ;; request message at the cursor in Subject buffer.
68		    (save-window-excursion
69		      (funcall request-partial-message-method)))
70		   (situation (mime-entity-situation message))
71		   (the-id (cdr (assoc "id" situation))))
72	      (when (string= the-id id)
73		(with-current-buffer mother
74		  (mime-store-message/partial-piece message situation))
75		(if (file-exists-p full-file)
76		    (throw 'tag nil)))
77	      (if (not (progn
78			 (end-of-line)
79			 (search-forward subject-id nil t)))
80		  (error "not found")))))))))
81
82
83;;; @ end
84;;;
85
86(provide 'mime-partial)
87
88(run-hooks 'mime-partial-load-hook)
89
90;;; mime-partial.el ends here
91