diff --git a/cmd/pttodo-cli/cli.go b/cmd/pttodo-cli/cli.go index 70fc527..e853e45 100644 --- a/cmd/pttodo-cli/cli.go +++ b/cmd/pttodo-cli/cli.go @@ -27,13 +27,15 @@ const ( ) type config struct { - targets []string - mergeme string - root string - tags []string - search string - edit bool - dry bool + targets []string + mergeme string + root string + tags []string + search string + edit bool + dry bool + add string + addSchedule string } func main() { @@ -49,6 +51,14 @@ func _main() error { return err } } + if config.add != "" { + if err := add(config.dry, config.targets, pttodo.Todo{ + Todo: config.add, + Schedule: pttodo.Schedule(config.addSchedule), + }); err != nil { + return err + } + } if config.edit { if err := edit(config.dry, config.targets); err != nil { return err @@ -73,6 +83,8 @@ func getConfig() config { flag.StringVar(&config.search, "search", "", "fts case insensitive") flag.BoolVar(&config.edit, "e", false, "edit file") flag.BoolVar(&config.dry, "dry", false, "dry run") + flag.StringVar(&config.add, "add", "", "todo to add") + flag.StringVar(&config.addSchedule, "add-schedule", "", "todo to add schedule") flag.Parse() config.tags = strings.Split(tagss, ",") @@ -109,6 +121,34 @@ func verifyFile(path string) error { return nil } +func add(dry bool, filepaths []string, todo pttodo.Todo) error { + target := filepaths[0] + var original pttodo.Root + + b, err := ioutil.ReadFile(target) + if err != nil && !os.IsNotExist(err) { + return err + } + if err := yaml.Unmarshal(b, &original); err != nil { + return err + } + + original.Todo = append([]pttodo.Todo{todo}, original.Todo...) + original.AutoMove() + + c, err := yaml.Marshal(original) + if err != nil { + return err + } else if dry { + log.Printf("wouldve written...\n%s", c) + return nil + } else if err := ioutil.WriteFile(target, c, os.ModePerm); err != nil { + return err + } + + return nil +} + func edit(dry bool, filepaths []string) error { tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo-*") if err != nil { diff --git a/cmd/pttodo-cli/pttodo-cli b/cmd/pttodo-cli/pttodo-cli new file mode 100755 index 0000000..a1b93e0 Binary files /dev/null and b/cmd/pttodo-cli/pttodo-cli differ diff --git a/cmd/pttodo-cli/testdata/test.yaml b/cmd/pttodo-cli/testdata/test.yaml index f83af4c..657fa00 100755 --- a/cmd/pttodo-cli/testdata/test.yaml +++ b/cmd/pttodo-cli/testdata/test.yaml @@ -1,45 +1,10 @@ todo: -- todo: b - ts: Thu Mar 24 09:03:24 MDT 2022 -scheduled: -- todo: due - schedule: "2022-05-01" - ts: Thu Mar 24 09:16:21 MDT 2022 +- hi20890 +- hi +- b - todo: loop schedule: 10s - ts: Thu Mar 24 09:17:11 MDT 2022 -done: -- todo: abc - schedule: "2022-05-01" - ts: Wed Mar 23 08:03:45 MDT 2022 -- todo: def - schedule: "2022-05-01" - ts: Wed Mar 23 08:04:05 MDT 2022 -- todo: other - ts: Wed Mar 23 09:44:57 MDT 2022 -- todo: b - ts: Wed Mar 23 09:45:13 MDT 2022 -- todo: a - ts: Wed Mar 23 09:45:15 MDT 2022 -- todo: a - ts: Wed Mar 23 09:45:24 MDT 2022 -- todo: a - ts: Wed Mar 23 09:45:31 MDT 2022 -- todo: looper - schedule: 15s - ts: Thu Mar 24 09:01:41 MDT 2022 -- todo: looper - schedule: 15s - ts: Thu Mar 24 09:04:51 MDT 2022 -- todo: loop - schedule: 10s - ts: Thu Mar 24 09:06:59 MDT 2022 -- todo: due - schedule: "2022-02-01" - ts: Thu Mar 24 09:15:42 MDT 2022 -- todo: due - schedule: "2022-02-01" - ts: Thu Mar 24 09:16:53 MDT 2022 -- todo: due - schedule: "2022-03-01" - ts: Thu Mar 24 09:17:07 MDT 2022 +- todo: past + schedule: "2000-01-02" +scheduled: [] +done: []