diff --git a/commands/msg/pipe.go b/commands/msg/pipe.go index b33254d..b354341 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 3d62fe2..c276172 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 2a5eadf..8aedd42 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 diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index b41b57c..0e6af5b 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -290,6 +290,10 @@ func (mv *MessageViewer) SelectedAccount() *AccountView { return mv.acct } +func (mv *MessageViewer) MessageView() lib.MessageView { + return mv.msg +} + func (mv *MessageViewer) SelectedMessage() (*models.MessageInfo, error) { if mv.msg == nil { return nil, errors.New("no message selected")