X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmm-partial.el;h=017b604e9bb6fc47b198e1477313423f93d22999;hb=4bc04db8ab265897888955269bb5c7934624be79;hp=4d60a85138e018f4b7a6434f70693d512a314cb7;hpb=e4ff3f5469aad1eb2f22101fe18708b06e75838d;p=gnus diff --git a/lisp/mm-partial.el b/lisp/mm-partial.el index 4d60a8513..017b604e9 100644 --- a/lisp/mm-partial.el +++ b/lisp/mm-partial.el @@ -1,53 +1,50 @@ ;;; mm-partial.el --- showing message/partial -;; Copyright (C) 2000 Free Software Foundation, Inc. + +;; Copyright (C) 2000-2011 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: message partial ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published -;; by the Free Software Foundation; either version 2, or (at your -;; option) any later version. +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. -;; GNU Emacs is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: ;;; Code: -(eval-when-compile - (require 'cl)) +(eval-when-compile (require 'cl)) (require 'gnus-sum) (require 'mm-util) (require 'mm-decode) (defun mm-partial-find-parts (id &optional art) - (let ((headers (save-excursion - (set-buffer gnus-summary-buffer) + (let ((headers (with-current-buffer gnus-summary-buffer gnus-newsgroup-headers)) - phandles handles header) + phandles header) (while (setq header (pop headers)) (unless (eq (aref header 0) art) (mm-with-unibyte-buffer - (gnus-request-article-this-buffer (aref header 0) + (gnus-request-article-this-buffer (aref header 0) gnus-newsgroup-name) (when (search-forward id nil t) - (let ((nhandles (mm-dissect-buffer)) nid) - (setq handles gnus-article-mime-handles) + (let ((nhandles (mm-dissect-buffer + nil gnus-article-loose-mime)) nid) (if (consp (car nhandles)) (mm-destroy-parts nhandles) - (setq nid (cdr (assq 'id + (setq nid (cdr (assq 'id (cdr (mm-handle-type nhandles))))) (if (not (equal id nid)) (mm-destroy-parts nhandles) @@ -57,50 +54,45 @@ ;;;###autoload (defun mm-inline-partial (handle &optional no-display) "Show the partial part of HANDLE. -This function replaces the buffer of HANDLE with a buffer contains +This function replaces the buffer of HANDLE with a buffer contains the entire message. If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." - (let ((id (cdr (assq 'id (cdr (mm-handle-type handle))))) + (let ((id (cdr (assq 'id (cdr (mm-handle-type handle))))) phandles (b (point)) (n 1) total phandle nn ntotal gnus-displaying-mime handles buffer) (unless (mm-handle-cache handle) (unless id - (error "Can not find message/partial id.")) + (error "Can not find message/partial id")) (setq phandles - (sort (cons handle + (sort (cons handle (mm-partial-find-parts - id - (save-excursion - (set-buffer gnus-summary-buffer) + id + (with-current-buffer gnus-summary-buffer (gnus-summary-article-number)))) #'(lambda (a b) - (let ((anumber (string-to-number - (cdr (assq 'number + (let ((anumber (string-to-number + (cdr (assq 'number (cdr (mm-handle-type a)))))) - (bnumber (string-to-number - (cdr (assq 'number + (bnumber (string-to-number + (cdr (assq 'number (cdr (mm-handle-type b))))))) (< anumber bnumber))))) (setq gnus-article-mime-handles - (append (if (listp (car gnus-article-mime-handles)) - gnus-article-mime-handles - (list gnus-article-mime-handles)) - phandles)) - (save-excursion - (set-buffer (generate-new-buffer "*mm*")) + (mm-merge-handles gnus-article-mime-handles phandles)) + (with-current-buffer (generate-new-buffer " *mm*") (while (setq phandle (pop phandles)) - (setq nn (string-to-number - (cdr (assq 'number + (setq nn (string-to-number + (cdr (assq 'number (cdr (mm-handle-type phandle)))))) - (setq ntotal (string-to-number - (cdr (assq 'total + (setq ntotal (string-to-number + (cdr (assq 'total (cdr (mm-handle-type phandle)))))) (if ntotal (if total - (unless (eq total ntotal) - (error "The numbers of total are different.")) + (unless (eq total ntotal) + (error "The numbers of total are different")) (setq total ntotal))) (unless (< nn n) (unless (eq nn n) @@ -118,6 +110,13 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." (if (<= n total) (error "Missing part %d" n)) (kill-buffer (mm-handle-buffer handle)) + (goto-char (point-min)) + (let ((point (if (search-forward "\n\n" nil t) + (1- (point)) + (point-max)))) + (goto-char (point-min)) + (unless (re-search-forward "^mime-version:" point t) + (insert "MIME-Version: 1.0\n"))) (setcar handle (current-buffer)) (mm-handle-set-cache handle t))) (unless no-display @@ -132,11 +131,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." (when handles ;; It is in article buffer. (setq gnus-article-mime-handles - (nconc (if (listp (car gnus-article-mime-handles)) - gnus-article-mime-handles - (list gnus-article-mime-handles)) - (if (listp (car handles)) - handles (list handles))))) + (mm-merge-handles gnus-article-mime-handles handles))) (mm-handle-set-undisplayer handle `(lambda () @@ -150,4 +145,6 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing." (error nil)) (delete-region ,(point-min-marker) ,(point-max-marker)))))))))) -;; mm-partial.el ends here +(provide 'mm-partial) + +;;; mm-partial.el ends here