(mm-dissect-archive): Add support for zip files.
authorLars Ingebrigtsen <larsi@gnus.org>
Wed, 1 Feb 2012 01:44:01 +0000 (02:44 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 1 Feb 2012 01:44:01 +0000 (02:44 +0100)
lisp/ChangeLog
lisp/mm-archive.el

index 6a0a306..b1a3ecb 100644 (file)
@@ -2,6 +2,7 @@
 
        * mm-archive.el (mm-dissect-archive): Use it to get all file names.
        Use recursive deletion.
+       (mm-dissect-archive): Add support for zip files.
 
        * gnus-util.el (gnus-recursive-directory-files): New function.
 
index d8f47df..69cbfb7 100644 (file)
@@ -24,6 +24,7 @@
 
 (defvar mm-archive-decoders
   '(("application/ms-tnef" "tnef" "-f" "-" "-C")
+    ("application/zip" "unzip" "-j" "-x" "%f" "-d")
     ("application/x-gtar-compressed" "tar" "xzf" "-" "-C")
     ("application/x-tar" "tar" "xf" "-" "-C")))
 
        (progn
          (mm-with-unibyte-buffer
            (mm-insert-part handle)
-           (apply 'call-process-region (point-min) (point-max) (car decoder)
-                  nil (get-buffer-create "*tnef*")
-                  nil (append (cdr decoder) (list dir))))
+           (if (member "%f" decoder)
+               (let ((file (expand-file-name "mail.zip" dir)))
+                 (write-region (point-min) (point-max) file nil 'silent)
+                 (setq decoder (copy-sequence decoder))
+                 (setcar (member "%f" decoder) file)
+                 (apply 'call-process (car decoder) nil nil nil
+                        (append (cdr decoder) (list dir)))
+                 (delete-file file))
+             (apply 'call-process-region (point-min) (point-max) (car decoder)
+                    nil (get-buffer-create "*tnef*")
+                    nil (append (cdr decoder) (list dir)))))
          `("multipart/mixed"
            ,handle
            ,@(mm-archive-list-files (gnus-recursive-directory-files dir))))