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:
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