sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit e7a1e8537955b42f93855b7c4a5bb7a61dcf9263
parent 7f2f6eba54ac3d122c91b783a67ab4da73bb8c2e
Author: Matthieu Rakotojaona <matthieu.rakotojaona@gmail.com>
Date:   Sat, 26 Sep 2015 16:16:31 +0200

Add location to warning message when parsing a message fails

Example output, from the tests:

```
[2015-09-26 16:18:18 +0200] WARNING: problem reading message sup-faked-b4f27f6a974091c7c1c67484b827eb61
[2015-09-26 16:18:18 +0200] WARNING: Message is in sup-test://test_messages at 0
```

Solves #480

Diffstat:
M lib/sup/message.rb | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -264,14 +264,14 @@ class Message
         parse_header rmsg.header
         message_to_chunks rmsg
       rescue SourceError, SocketError, RMail::EncodingUnsupportedError => e
-        warn "problem reading message #{id}"
+        warn_with_location "problem reading message #{id}"
         debug "could not load message: #{location.inspect}, exception: #{e.inspect}"
 
         [Chunk::Text.new(error_message.split("\n"))]
 
       rescue Exception => e
 
-        warn "problem reading message #{id}"
+        warn_with_location "problem reading message #{id}"
         debug "could not load message: #{location.inspect}, exception: #{e.inspect}"
 
         raise e
@@ -404,19 +404,19 @@ private
 
   def multipart_signed_to_chunks m
     if m.body.size != 2
-      warn "multipart/signed with #{m.body.size} parts (expecting 2)"
+      warn_with_location "multipart/signed with #{m.body.size} parts (expecting 2)"
       return
     end
 
     payload, signature = m.body
     if signature.multipart?
-      warn "multipart/signed with payload multipart #{payload.multipart?} and signature multipart #{signature.multipart?}"
+      warn_with_location "multipart/signed with payload multipart #{payload.multipart?} and signature multipart #{signature.multipart?}"
       return
     end
 
     ## this probably will never happen
     if payload.header.content_type && payload.header.content_type.downcase == "application/pgp-signature"
-      warn "multipart/signed with payload content type #{payload.header.content_type}"
+      warn_with_location "multipart/signed with payload content type #{payload.header.content_type}"
       return
     end
 
@@ -431,23 +431,23 @@ private
 
   def multipart_encrypted_to_chunks m
     if m.body.size != 2
-      warn "multipart/encrypted with #{m.body.size} parts (expecting 2)"
+      warn_with_location "multipart/encrypted with #{m.body.size} parts (expecting 2)"
       return
     end
 
     control, payload = m.body
     if control.multipart?
-      warn "multipart/encrypted with control multipart #{control.multipart?} and payload multipart #{payload.multipart?}"
+      warn_with_location "multipart/encrypted with control multipart #{control.multipart?} and payload multipart #{payload.multipart?}"
       return
     end
 
     if payload.header.content_type && payload.header.content_type.downcase != "application/octet-stream"
-      warn "multipart/encrypted with payload content type #{payload.header.content_type}"
+      warn_with_location "multipart/encrypted with payload content type #{payload.header.content_type}"
       return
     end
 
     if control.header.content_type && control.header.content_type.downcase != "application/pgp-encrypted"
-      warn "multipart/encrypted with control content type #{signature.header.content_type}"
+      warn_with_location "multipart/encrypted with control content type #{signature.header.content_type}"
       return
     end
 
@@ -751,6 +751,11 @@ private
     end
     chunks
   end
+
+  def warn_with_location msg
+    warn msg
+    warn "Message is in #{location.source.uri} at #{location.info}"
+  end
 end
 
 class Location