commit fc3dece48d765866c67aa3fd010eeee278c44641
parent bfe40c05dc6dc2656a4dde11948ff617f2fa00d6
Author: Michael Stapelberg <michael@stapelberg.de>
Date: Wed, 30 Sep 2009 21:59:30 +0200
implement saving all attachments to a folder (keybinding A)
Diffstat:
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
@@ -470,7 +470,7 @@ EOS
end
end
- def ask_for_filename domain, question, default=nil
+ def ask_for_filename domain, question, default=nil, allow_directory=false
answer = ask domain, question, default do |s|
if s =~ /(~([^\s\/]*))/ # twiddle directory expansion
full = $1
@@ -495,7 +495,7 @@ EOS
answer =
if answer.empty?
spawn_modal "file browser", FileBrowserMode.new
- elsif File.directory?(answer)
+ elsif File.directory?(answer) && !allow_directory
spawn_modal "file browser", FileBrowserMode.new(answer)
else
File.expand_path answer
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -58,6 +58,7 @@ EOS
k.add :alias, "Edit alias/nickname for a person", 'i'
k.add :edit_as_new, "Edit message as new", 'D'
k.add :save_to_disk, "Save message/attachment to disk", 's'
+ k.add :save_all_to_disk, "Save all attachments to disk", 'A'
k.add :search, "Search for messages from particular people", 'S'
k.add :compose, "Compose message to person", 'm'
k.add :subscribe_to_list, "Subscribe to/unsubscribe from mailing list", "("
@@ -339,6 +340,19 @@ EOS
end
end
+ def save_all_to_disk
+ m = @message_lines[curpos] or return
+ default_dir = ($config[:default_attachment_save_dir] || ".")
+ folder = BufferManager.ask_for_filename :filename, "Save all attachment to folder: ", default_dir, true
+ return unless folder
+
+ m.chunks.each do |chunk|
+ next unless chunk.is_a?(Chunk::Attachment)
+ fn = File.join(folder, chunk.filename)
+ save_to_file(fn) { |f| f.print chunk.raw_content }
+ end
+ end
+
def edit_draft
m = @message_lines[curpos] or return
if m.is_draft?