sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit ccfaadf2740009b6adeb8d70ee472c225ffe72bf
parent a0a496fa0fd6cbda3c9768bf0b8ad18b8f9013ce
Author: Dan Callaghan <djc@djc.id.au>
Date:   Sat,  3 May 2025 21:10:46 +1000

parse drafts as individual messages, not mboxes

As far as I can see they were always being written with one message per
file and no From envelope (maildir style) so there is no reason to try
iterating the draft as if it were an mbox.

Fixes the pathological case of trying to load an empty file as a draft.

Diffstat:
M lib/sup/draft.rb | 6 +-----
M test/integration/test_draft.rb | 5 +++++
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/lib/sup/draft.rb b/lib/sup/draft.rb
@@ -76,11 +76,7 @@ class DraftLoader < Source
 
   def load_message offset
     raise SourceError, "Draft not found" unless File.exist? fn_for_offset(offset)
-    File.open fn_for_offset(offset) do |f|
-      RMail::Mailbox::MBoxReader.new(f).each_message do |input|
-        return RMail::Parser.read(input)
-      end
-    end
+    File.open(fn_for_offset(offset)) { |f| RMail::Parser.read f }
   end
 
   def fallback_date_for_message offset
diff --git a/test/integration/test_draft.rb b/test/integration/test_draft.rb
@@ -93,5 +93,10 @@ EOS
     PollManager.poll_from @draft_source
     messages_in_index = Index.instance.enum_for(:each_message).to_a
     assert_equal "", messages_in_index[0].subj
+
+    File.write (File.join @draft_dir, "2"), ""
+    PollManager.poll_from @draft_source
+    messages_in_index = Index.instance.enum_for(:each_message).to_a
+    assert_equal "", messages_in_index[0].subj
   end
 end