From 95fb35b701486057c2aa127e5e94d65ddabeab88 Mon Sep 17 00:00:00 2001 From: Galen Abell Date: Thu, 2 Apr 2020 09:54:45 -0400 Subject: [PATCH] Try to open attachments with correct extension The temporary file created when opening an attachment is currently saved without an extension, which prevents matching on file ending with xdg-open. --- commands/msgview/open.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/commands/msgview/open.go b/commands/msgview/open.go index d4eacd4..44584f9 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -2,8 +2,10 @@ package msgview import ( "errors" + "fmt" "io" "io/ioutil" + "mime" "os" "time" @@ -35,7 +37,17 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { store := mv.Store() store.FetchBodyPart(p.Msg.Uid, p.Msg.BodyStructure, p.Index, func(reader io.Reader) { - tmpFile, err := ioutil.TempFile(os.TempDir(), "aerc-") + extension := "" + // try to determine the correct extension based on mimetype + if part, err := p.Msg.BodyStructure.PartAtIndex(p.Index); err == nil { + mimeType := fmt.Sprintf("%s/%s", part.MIMEType, part.MIMESubType) + + if exts, _ := mime.ExtensionsByType(mimeType); exts != nil && len(exts) > 0 { + extension = exts[0] + } + } + + tmpFile, err := ioutil.TempFile(os.TempDir(), "aerc-*"+extension) if err != nil { aerc.PushError(" " + err.Error()) return