aboutsummaryrefslogtreecommitdiff
path: root/commands/account/recover.go
diff options
context:
space:
mode:
Diffstat (limited to 'commands/account/recover.go')
-rw-r--r--commands/account/recover.go56
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
}