diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-06-23 11:26:19 -0500 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-06-24 21:08:21 +0200 |
commit | 8f9bb2b289af34581b43e0777b2376ab0617aecd (patch) | |
tree | ad89fdf43896e34fec883d16bcae7bd61a8f1049 /commands | |
parent | e9b01867827aac29f11b376debaf2209e8e7c9b4 (diff) | |
download | aerc-8f9bb2b289af34581b43e0777b2376ab0617aecd.tar.gz |
pgp: fix pipe|open|save command behavior
Signed and/or encrypted PGP messages did not behave properly for pipe,
open, and save commands. Specifically, the proper Message Part would not
be passed to the command in the MessageViewer. This is due to the
encapsulation of the body structure. This patch fixes the behavior for
piping|opening|saving of message parts.
Fixes: https://todo.sr.ht/~rjarry/aerc/47
Reported-by: ~ph14nix
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Tested-by: Moritz Poldrack <moritz@poldrack.dev>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'commands')
-rw-r--r-- | commands/msg/pipe.go | 7 | ||||
-rw-r--r-- | commands/msgview/open.go | 3 | ||||
-rw-r--r-- | commands/msgview/save.go | 11 |
3 files changed, 10 insertions, 11 deletions
diff --git a/commands/msg/pipe.go b/commands/msg/pipe.go index b33254d7..b354341c 100644 --- a/commands/msg/pipe.go +++ b/commands/msg/pipe.go @@ -182,12 +182,15 @@ func (Pipe) Execute(aerc *widgets.Aerc, args []string) error { } }() } else if pipePart { + mv, ok := provider.(*widgets.MessageViewer) + if !ok { + return fmt.Errorf("can only pipe message part from a message view") + } p := provider.SelectedMessagePart() if p == nil { return fmt.Errorf("could not fetch message part") } - store := provider.Store() - store.FetchBodyPart(p.Msg.Uid, p.Index, func(reader io.Reader) { + mv.MessageView().FetchBodyPart(p.Index, func(reader io.Reader) { if background { doExec(reader) } else { diff --git a/commands/msgview/open.go b/commands/msgview/open.go index 3d62fe22..c2761729 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -49,8 +49,7 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { return nil } - store := mv.Store() - store.FetchBodyPart(p.Msg.Uid, p.Index, func(reader io.Reader) { + mv.MessageView().FetchBodyPart(p.Index, func(reader io.Reader) { extension := "" // try to determine the correct extension based on mimetype if part, err := p.Msg.BodyStructure.PartAtIndex(p.Index); err == nil { diff --git a/commands/msgview/save.go b/commands/msgview/save.go index 2a5eadf9..8aedd428 100644 --- a/commands/msgview/save.go +++ b/commands/msgview/save.go @@ -13,7 +13,6 @@ import ( "github.com/mitchellh/go-homedir" "git.sr.ht/~rjarry/aerc/commands" - "git.sr.ht/~rjarry/aerc/lib" "git.sr.ht/~rjarry/aerc/logging" "git.sr.ht/~rjarry/aerc/models" "git.sr.ht/~rjarry/aerc/widgets" @@ -105,8 +104,6 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error { return fmt.Errorf("SelectedTab is not a MessageViewer") } - store := mv.Store() - if params.attachments { parts := mv.AttachmentParts() if len(parts) == 0 { @@ -114,7 +111,7 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error { } params.trailingSlash = true for _, pi := range parts { - if err := savePart(pi, path, store, aerc, ¶ms); err != nil { + if err := savePart(pi, path, mv, aerc, ¶ms); err != nil { return err } } @@ -122,13 +119,13 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error { } pi := mv.SelectedMessagePart() - return savePart(pi, path, store, aerc, ¶ms) + return savePart(pi, path, mv, aerc, ¶ms) } func savePart( pi *widgets.PartInfo, path string, - store *lib.MessageStore, + mv *widgets.MessageViewer, aerc *widgets.Aerc, params *saveParams, ) error { @@ -151,7 +148,7 @@ func savePart( } ch := make(chan error, 1) - store.FetchBodyPart(pi.Msg.Uid, pi.Index, func(reader io.Reader) { + mv.MessageView().FetchBodyPart(pi.Index, func(reader io.Reader) { f, err := os.Create(path) if err != nil { ch <- err |