~sircmpwn/aerc

413fc431f76585b09845d6b2555f7d85d5667ee3 — Reto Brunner 2 years ago f746057
add mimeType to OriginalMail struct for both forward and reply
3 files changed, 23 insertions(+), 12 deletions(-)

M commands/msg/forward.go
M commands/msg/reply.go
M doc/aerc-templates.7.scd
M commands/msg/forward.go => commands/msg/forward.go +4 -0
@@ 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)

M commands/msg/reply.go => commands/msg/reply.go +18 -11
@@ 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
}

M doc/aerc-templates.7.scd => doc/aerc-templates.7.scd +1 -1
@@ 71,7 71,7 @@ available always.
	{{.Subject}}

*MIME Type*
	MIME Type is available for quoted reply.
	MIME Type is available for quoted reply and forward.

	- OriginalMIMEType: MIME type info of quoted mail part. Usually
	  "text/plain" or "text/html".