commit 0daa8672bfe50b7c469d8f75effe0dfd42ac92e7
parent cdcc2c6287fad41b4d5247d713ceb5ec935ab8a7
Author: Peter Harkins <ph@malaprop.org>
Date: Fri, 5 Feb 2010 11:13:51 -0600
Recover if a draft message is deleted from the filesystem. (issue 61)
Signed-off-by: Hamish Downer
Diffstat:
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/sup/draft.rb b/lib/sup/draft.rb
@@ -23,7 +23,7 @@ class DraftManager
def discard m
raise ArgumentError, "not a draft: source id #{m.source.id.inspect}, should be #{DraftManager.source_id.inspect} for #{m.id.inspect}" unless m.source.id.to_i == DraftManager.source_id
Index.delete m.id
- File.delete @source.fn_for_offset(m.source_info)
+ File.delete @source.fn_for_offset(m.source_info) rescue Errono::ENOENT
UpdateManager.relay self, :single_message_deleted, m
end
end
@@ -72,6 +72,7 @@ class DraftLoader < Source
end
def load_message offset
+ raise SourceError, "Draft not found" unless File.exists? 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)
diff --git a/lib/sup/modes/resume-mode.rb b/lib/sup/modes/resume-mode.rb
@@ -9,6 +9,9 @@ class ResumeMode < EditMessageMode
header.delete "Date"
super :header => header, :body => body, :have_signature => true
+ rescue Errno::ENOENT
+ DraftManager.discard @m
+ BufferManager.flash "Draft deleted outside of sup."
end
def unsaved?; !@safe end