diff options
author | Vitaly Ovchinnikov <v@postbox.nz> | 2023-06-23 12:46:00 +0300 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-06-25 22:33:06 +0200 |
commit | d860e26629fd1d59539201a53f4af3eef9f14ccf (patch) | |
tree | 03304538530cdad8122ad6b58070f6c66d9b7eb0 | |
parent | fb99486ad073bb99ca526add707d774464159e8a (diff) | |
download | aerc-d860e26629fd1d59539201a53f4af3eef9f14ccf.tar.gz |
open: use the original attachment extension if possible
When opening an attachment with :open command we make a temporary file
and open it then. The file is named randomly, but the extension is
derived from the attachment parameters.
This patch checks if the attachment has a file name assigned and takes
the extension from there. Otherwise it rolls back to the original
mime-based extension generation.
Signed-off-by: Vitaly Ovchinnikov <v@postbox.nz>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | commands/msgview/open.go | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 479296be..a9db8acd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `:archive` now works on servers using a different delimiter - `:save -a` now works with multiple attachments with the same filename +- `:open` uses the attachment extension for temporary files, if possible ### Changed diff --git a/commands/msgview/open.go b/commands/msgview/open.go index 0380b51a..9ceccb5a 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -5,6 +5,7 @@ import ( "io" "mime" "os" + "path/filepath" "git.sr.ht/~rjarry/aerc/lib" "git.sr.ht/~rjarry/aerc/log" @@ -36,11 +37,16 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { extension := "" mimeType := "" - // try to determine the correct extension based on mimetype + // try to determine the correct extension if part, err := mv.MessageView().BodyStructure().PartAtIndex(p.Index); err == nil { mimeType = part.FullMIMEType() - if exts, _ := mime.ExtensionsByType(mimeType); len(exts) > 0 { - extension = exts[0] + // see if we can get extension directly from the attachment name + extension = filepath.Ext(part.FileName()) + // if there is no extension, try using the attachment mime type instead + if extension == "" { + if exts, _ := mime.ExtensionsByType(mimeType); len(exts) > 0 { + extension = exts[0] + } } } |