summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Amidon <keith@nicira.com>2009-11-27 05:30:14 -0800
committerCarl Worth <cworth@cworth.org>2009-11-27 21:23:58 -0800
commite593b6aacb273a798ebbe0084be3018303835f44 (patch)
tree64e79d2b5317fb3bed14bfa14adf93a75df9250c
parent07ce64e4352291fb5bd265f20c683c653ab81966 (diff)
Provide ability to save attachments
Previously the only way to save an attachment was to attempt to view it and then save it from within the viewer program.
-rw-r--r--notmuch.el41
1 files changed, 41 insertions, 0 deletions
diff --git a/notmuch.el b/notmuch.el
index 282932e..a1c98a5 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -300,6 +300,47 @@ buffer."
(with-current-notmuch-show-message
(mm-display-parts (mm-dissect-buffer))))
+(defun notmuch-foreach-mime-part (function mm-handle)
+ (cond ((stringp (car mm-handle))
+ (dolist (part (cdr mm-handle))
+ (notmuch-foreach-mime-part function part)))
+ ((bufferp (car mm-handle))
+ (funcall function mm-handle))
+ (t (dolist (part mm-handle)
+ (notmuch-foreach-mime-part function part)))))
+
+(defun notmuch-count-attachments (mm-handle)
+ (let ((count 0))
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (let ((disposition (mm-handle-disposition p)))
+ (and (listp disposition)
+ (equal (car disposition) "attachment")
+ (incf count))))
+ mm-handle)
+ count))
+
+(defun notmuch-save-attachments (mm-handle &optional queryp)
+ (notmuch-foreach-mime-part
+ (lambda (p)
+ (let ((disposition (mm-handle-disposition p)))
+ (and (listp disposition)
+ (equal (car disposition) "attachment")
+ (or (not queryp)
+ (y-or-n-p
+ (concat "Save '" (cdr (assq 'filename disposition)) "' ")))
+ (mm-save-part p))))
+ mm-handle))
+
+(defun notmuch-show-save-attachments ()
+ "Save the attachments to a message"
+ (interactive)
+ (with-current-notmuch-show-message
+ (let ((mm-handle (mm-dissect-buffer)))
+ (notmuch-save-attachments
+ mm-handle (> (notmuch-count-attachments mm-handle) 1))))
+ (message "Done"))
+
(defun notmuch-reply (query-string)
(switch-to-buffer (generate-new-buffer "notmuch-draft"))
(call-process notmuch-command nil t nil "reply" query-string)