diff options
Diffstat (limited to 'commands/account/recover.go')
-rw-r--r-- | commands/account/recover.go | 56 |
1 files changed, 14 insertions, 42 deletions
diff --git a/commands/account/recover.go b/commands/account/recover.go index 9fdaa3e9..03eb857a 100644 --- a/commands/account/recover.go +++ b/commands/account/recover.go @@ -10,10 +10,14 @@ import ( "git.sr.ht/~rjarry/aerc/commands" "git.sr.ht/~rjarry/aerc/config" "git.sr.ht/~rjarry/aerc/widgets" - "git.sr.ht/~sircmpwn/getopt" ) -type Recover struct{} +type Recover struct { + Force bool `opt:"-f"` + Edit bool `opt:"-e"` + NoEdit bool `opt:"-E"` + File string `opt:"FILE"` +} func init() { register(Recover{}) @@ -40,31 +44,14 @@ func (r Recover) Complete(aerc *widgets.Aerc, args []string) []string { } func (r Recover) Execute(aerc *widgets.Aerc, args []string) error { - // Complete() expects to be passed only the arguments, not including the command name - if len(Recover{}.Complete(aerc, args[1:])) == 0 { - return errors.New("No messages to recover.") - } - - force := false - editHeaders := config.Compose.EditHeaders - - opts, optind, err := getopt.Getopts(args, r.Options()) + file, err := os.Open(r.File) if err != nil { return err } - for _, opt := range opts { - switch opt.Option { - case 'f': - force = true - case 'e': - editHeaders = true - case 'E': - editHeaders = false - } - } - - if len(args) <= optind { - return errors.New("Usage: recover [-f] [-E|-e] <file>") + defer file.Close() + data, err := io.ReadAll(file) + if err != nil { + return err } acct := aerc.SelectedAccount() @@ -72,22 +59,7 @@ func (r Recover) Execute(aerc *widgets.Aerc, args []string) error { return errors.New("No account selected") } - readData := func() ([]byte, error) { - recoverFile, err := os.Open(args[optind]) - if err != nil { - return nil, err - } - defer recoverFile.Close() - data, err := io.ReadAll(recoverFile) - if err != nil { - return nil, err - } - return data, nil - } - data, err := readData() - if err != nil { - return err - } + editHeaders := (config.Compose.EditHeaders || r.Edit) && !r.NoEdit composer, err := widgets.NewComposer(aerc, acct, acct.AccountConfig(), acct.Worker(), editHeaders, @@ -98,8 +70,8 @@ func (r Recover) Execute(aerc *widgets.Aerc, args []string) error { composer.Tab = aerc.NewTab(composer, "Recovered") // remove file if force flag is set - if force { - err = os.Remove(args[optind]) + if r.Force { + err = os.Remove(r.File) if err != nil { return err } |