diff options
| -rw-r--r-- | cmds.go | 12 | ||||
| -rw-r--r-- | main.go | 19 |
2 files changed, 29 insertions, 2 deletions
@@ -43,7 +43,7 @@ func (ctrl controller) cmdAdd(task string) error { }) } -func (ctrl controller) cmdDo(taskIndex int) error { +func (ctrl controller) toggleDo(taskIndex int, status bool) error { return ctrl.db.Update(func(tx *bbolt.Tx) error { taskBucket := tx.Bucket(ctrl.tasksBucketName) ttBytes := taskBucket.Get(itob(uint64(taskIndex))) @@ -53,7 +53,7 @@ func (ctrl controller) cmdDo(taskIndex int) error { return fmt.Errorf("can't unmarshal: %w", err) } - tt.Done = true + tt.Done = status buf, err := json.Marshal(tt) if err != nil { @@ -64,6 +64,14 @@ func (ctrl controller) cmdDo(taskIndex int) error { }) } +func (ctrl controller) cmdDo(taskIndex int) error { + return ctrl.toggleDo(taskIndex, true) +} + +func (ctrl controller) cmdUndo(taskIndex int) error { + return ctrl.toggleDo(taskIndex, false) +} + func (ctrl controller) cmdList() error { return ctrl.db.View(func(tx *bbolt.Tx) error { // Assume bucket exists and has keys @@ -82,6 +82,25 @@ func main() { }, }, { + Name: "undo", + Aliases: []string{"u"}, + Usage: "reset a task on the list", + Arguments: []cli.Argument{ + &cli.IntArg{ + Name: "taskIndex", + }, + }, + Action: func(ctx context.Context, cmd *cli.Command) error { + taskIndex := cmd.IntArg("taskIndex") + + if taskIndex <= 0 { + return fmt.Errorf("invalid 'undo' argument: %d", taskIndex) + } + + return ctrl.cmdUndo(taskIndex) + }, + }, + { Name: "list", Aliases: []string{"l"}, Usage: "list pending tasks", |
