aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Ovchinnikov <v@postbox.nz>2023-06-23 12:46:00 +0300
committerRobin Jarry <robin@jarry.cc>2023-06-25 22:33:06 +0200
commitd860e26629fd1d59539201a53f4af3eef9f14ccf (patch)
tree03304538530cdad8122ad6b58070f6c66d9b7eb0
parentfb99486ad073bb99ca526add707d774464159e8a (diff)
downloadaerc-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.md1
-rw-r--r--commands/msgview/open.go12
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]
+ }
}
}