sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 0b9356089cc837e7007434c1ccc41224f0f7a11a
parent fc3dece48d765866c67aa3fd010eeee278c44641
Author: William Morgan <wmorgan-sup@masanjin.net>
Date:   Thu,  1 Oct 2009 13:29:55 -0400

tweak multi-attachment behavior to be a little more friendly

Diffstat:
M lib/sup/mode.rb | 15 +++++++++++----
M lib/sup/modes/thread-view-mode.rb | 17 +++++++++++++++--
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/lib/sup/mode.rb b/lib/sup/mode.rb
@@ -74,15 +74,22 @@ EOS
 
 ### helper functions
 
-  def save_to_file fn
+  def save_to_file fn, talk=true
     if File.exists? fn
-      return unless BufferManager.ask_yes_or_no "File exists. Overwrite?"
+      unless BufferManager.ask_yes_or_no "File \"#{fn}\" exists. Overwrite?"
+        info "Not overwriting #{fn}"
+        return
+      end
     end
     begin
       File.open(fn, "w") { |f| yield f }
-      BufferManager.flash "Successfully wrote #{fn}."
+      BufferManager.flash "Successfully wrote #{fn}." if talk
+      true
     rescue SystemCallError, IOError => e
-      BufferManager.flash "Error writing to file: #{e.message}"
+      m = "Error writing file: #{e.message}"
+      info m
+      BufferManager.flash m
+      false
     end
   end
 
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -343,13 +343,26 @@ EOS
   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
+    folder = BufferManager.ask_for_filename :filename, "Save all attachments to folder: ", default_dir, true
     return unless folder
 
+    num = 0
+    num_errors = 0
     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 }
+      num_errors += 1 unless save_to_file(fn, false) { |f| f.print chunk.raw_content }
+      num += 1
+    end
+
+    if num == 0
+      BufferManager.flash "Didn't find any attachments!"
+    else
+      if num_errors == 0
+        BufferManager.flash "Wrote #{num.pluralize 'attachment'} to #{folder}."
+      else
+        BufferManager.flash "Wrote #{(num - num_errors).pluralize 'attachment'} to #{folder}; couldn't write #{num_errors} of them (see log)."
+      end
     end
   end