about summary refs log tree commit diff stats
path: root/commands/msg
diff options
context:
space:
mode:
Diffstat (limited to 'commands/msg')
-rw-r--r--commands/msg/forward.go4
-rw-r--r--commands/msg/reply.go29
2 files changed, 22 insertions, 11 deletions
diff --git a/commands/msg/forward.go b/commands/msg/forward.go
index edade6d..ec89bfa 100644
--- a/commands/msg/forward.go
+++ b/commands/msg/forward.go
@@ -147,6 +147,10 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error {
 			part = lib.FindFirstNonMultipart(msg.BodyStructure, nil)
 			// if it's still nil here, we don't have a multipart msg, that's fine
 		}
+		err = addMimeType(msg, part, &original)
+		if err != nil {
+			return err
+		}
 		store.FetchBodyPart(msg.Uid, part, func(reader io.Reader) {
 			buf := new(bytes.Buffer)
 			buf.ReadFrom(reader)
diff --git a/commands/msg/reply.go b/commands/msg/reply.go
index 778c0ef..2e4a21a 100644
--- a/commands/msg/reply.go
+++ b/commands/msg/reply.go
@@ -207,21 +207,16 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
 			// broken (containers only)
 			part = lib.FindFirstNonMultipart(msg.BodyStructure, nil)
 		}
+
+		err = addMimeType(msg, part, &original)
+		if err != nil {
+			return err
+		}
+
 		store.FetchBodyPart(msg.Uid, part, func(reader io.Reader) {
 			buf := new(bytes.Buffer)
 			buf.ReadFrom(reader)
 			original.Text = buf.String()
-			if len(msg.BodyStructure.Parts) == 0 {
-				original.MIMEType = fmt.Sprintf("%s/%s",
-					msg.BodyStructure.MIMEType, msg.BodyStructure.MIMESubType)
-			} else {
-				// TODO: still will be "multipart/mixed" for mixed mails with
-				// attachments, fix this after aerc could handle responding to
-				// such mails
-				original.MIMEType = fmt.Sprintf("%s/%s",
-					msg.BodyStructure.Parts[0].MIMEType,
-					msg.BodyStructure.Parts[0].MIMESubType)
-			}
 			addTab()
 		})
 		return nil
@@ -275,3 +270,15 @@ func setReferencesHeader(target, parent *mail.Header) error {
 	target.SetMsgIDList("references", refs)
 	return nil
 }
+
+// addMimeType adds the proper mime type of the part to the originalMail struct
+func addMimeType(msg *models.MessageInfo, part []int,
+	orig *models.OriginalMail) error {
+	// caution, :forward uses the code as well, keep that in mind when modifying
+	bs, err := msg.BodyStructure.PartAtIndex(part)
+	if err != nil {
+		return err
+	}
+	orig.MIMEType = fmt.Sprintf("%s/%s", bs.MIMEType, bs.MIMESubType)
+	return nil
+}