about summary refs log tree commit diff stats
path: root/commands/msg/reply.go
diff options
context:
space:
mode:
authorLeszek CimaƂa <ernierasta@zori.cz>2019-12-06 15:28:34 +0100
committerDrew DeVault <sir@cmpwn.com>2019-12-07 14:30:20 -0500
commit30aa77c1c975e7fa25e202add14971d4077cc9e1 (patch)
treeb607c00361f967f76f884a2835f96ec9f3c2c244 /commands/msg/reply.go
parent0a1a75aed17e56c32cb0283e1b9f1978bd52fd7f (diff)
downloadaerc-30aa77c1c975e7fa25e202add14971d4077cc9e1.tar.gz
use correct headers for message part
Hello guys,
on the hunt for bugs related to wrong encoding. This patch is fixing
reply to non-utf8 messages.

We were using global message headers instead of part specific. In
practice header were often something like:

multipart; boundry=...

where there should be:

text/plain; charset=...

Fixed also missing SubType.

Have great weekend!

Leszek
Diffstat (limited to 'commands/msg/reply.go')
-rw-r--r--commands/msg/reply.go36
1 files changed, 32 insertions, 4 deletions
diff --git a/commands/msg/reply.go b/commands/msg/reply.go
index b13e254..359c5dd 100644
--- a/commands/msg/reply.go
+++ b/commands/msg/reply.go
@@ -157,10 +157,38 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
 
 		store.FetchBodyPart(msg.Uid, []int{1}, func(reader io.Reader) {
 			header := message.Header{}
-			header.SetText(
-				"Content-Transfer-Encoding", msg.BodyStructure.Encoding)
-			header.SetContentType(msg.BodyStructure.MIMEType, msg.BodyStructure.Params)
-			header.SetText("Content-Description", msg.BodyStructure.Description)
+			if len(msg.BodyStructure.Parts) > 0 {
+				partID := 0 // TODO: will we always choose first msg part?
+				header.SetText(
+					"Content-Transfer-Encoding", msg.BodyStructure.Parts[partID].Encoding)
+				if msg.BodyStructure.Parts[partID].MIMESubType == "" {
+					header.SetContentType(
+						msg.BodyStructure.Parts[partID].MIMEType,
+						msg.BodyStructure.Parts[partID].Params)
+				} else {
+					// include SubType if defined (text/plain, text/html, ...)
+					header.SetContentType(
+						fmt.Sprintf("%s/%s", msg.BodyStructure.Parts[partID].MIMEType,
+							msg.BodyStructure.Parts[partID].MIMESubType),
+						msg.BodyStructure.Parts[partID].Params)
+				}
+				header.SetText("Content-Description", msg.BodyStructure.Parts[partID].Description)
+			} else { // Parts has no headers, so we use global headers info
+				header.SetText(
+					"Content-Transfer-Encoding", msg.BodyStructure.Encoding)
+				if msg.BodyStructure.MIMESubType == "" {
+					header.SetContentType(
+						msg.BodyStructure.MIMEType,
+						msg.BodyStructure.Params)
+				} else {
+					// include SubType if defined (text/plain, text/html, ...)
+					header.SetContentType(
+						fmt.Sprintf("%s/%s", msg.BodyStructure.MIMEType,
+							msg.BodyStructure.MIMESubType),
+						msg.BodyStructure.Params)
+				}
+				header.SetText("Content-Description", msg.BodyStructure.Description)
+			}
 			entity, err := message.New(header, reader)
 			if err != nil {
 				// TODO: Do something with the error
>
f504aea ^
42277b1 ^

a73a882 ^

9fbb2eb ^





a73a882 ^

9955ddc ^
8e053b6 ^
42277b1 ^
a73a882 ^



e21d93b ^




a73a882 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54