if item in todo is scheduled for later, then move it

Bel LaPointe 2022-03-23 08:04:35 -06:00
parent 8c050d1d89
commit 8276308d52
4 changed files with 48 additions and 8 deletions

View File

@ -113,26 +113,41 @@ func edit(dry bool, filepaths []string) error {
if err != nil { if err != nil {
return err return err
} }
originals := map[string]pttodo.Root{}
for _, target := range filepaths { for _, target := range filepaths {
var original pttodo.Root
if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(err) { if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(err) {
return err return err
} else if err := ioutil.WriteFile(path.Join(tempDir, path.Base(target)), b, os.ModePerm); err != nil { } else if err := yaml.Unmarshal(b, &original); err != nil {
return err
} else if c, err := yaml.Marshal(original.Todo); err != nil {
return err
} else if err := ioutil.WriteFile(path.Join(tempDir, path.Base(target)), c, os.ModePerm); err != nil {
return err return err
} }
originals[target] = original
} }
if err := vimd(tempDir); err != nil { if err := vimd(tempDir); err != nil {
return err return err
} }
for _, target := range filepaths { for _, target := range filepaths {
for { for {
err := verifyFile(path.Join(tempDir, path.Base(target))) err := func() error {
var todos []pttodo.Todo
if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil {
return err
} else if err := yaml.Unmarshal(b, &todos); err != nil {
return err
}
return nil
}()
if err == nil { if err == nil {
break break
} }
log.Printf("%v, press <Enter> to resume editing", err) log.Printf("%s, press <Enter> to resume editing", err)
b := make([]byte, 1) b := make([]byte, 1)
if _, err := os.Stdin.Read(b); err != nil { if _, err := os.Stdin.Read(b); err != nil {
break return err
} }
if err := vimd(tempDir); err != nil { if err := vimd(tempDir); err != nil {
return err return err
@ -143,12 +158,13 @@ func edit(dry bool, filepaths []string) error {
return nil return nil
} }
for _, target := range filepaths { for _, target := range filepaths {
var todo pttodo.Root original := originals[target]
if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil { if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil {
return err return err
} else if err := yaml.Unmarshal(b, &todo); err != nil { } else if err := yaml.Unmarshal(b, &original.Todo); err != nil {
return err return err
} else if c, err := yaml.Marshal(todo); err != nil { } else if original.AutoMove(); false {
} else if c, err := yaml.Marshal(original); err != nil {
return err return err
} else if err := ioutil.WriteFile(target, c, os.ModePerm); err != nil { } else if err := ioutil.WriteFile(target, c, os.ModePerm); err != nil {
return err return err

Binary file not shown.

View File

@ -1,5 +1,12 @@
todo: todo:
- a - a
- b
- a - a
scheduled: [] scheduled:
- 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
done: [] done: []

View File

@ -20,6 +20,23 @@ func (root Root) Equals(other Root) bool {
return true return true
} }
func (root *Root) AutoMove() {
root.MoveScheduledToTodo()
root.MoveTodoToScheduled()
}
func (root *Root) MoveTodoToScheduled() {
for i := len(root.Todo) - 1; i >= 0; i-- {
if root.Todo[i].Schedule != "" && !root.Todo[i].Triggered() {
root.Scheduled = append(root.Scheduled, root.Todo[i])
for j := i; j < len(root.Todo)-1; j++ {
root.Todo[j] = root.Todo[j+1]
}
root.Todo = root.Todo[:len(root.Todo)-1]
}
}
}
func (root *Root) MoveScheduledToTodo() { func (root *Root) MoveScheduledToTodo() {
for i := len(root.Scheduled) - 1; i >= 0; i-- { for i := len(root.Scheduled) - 1; i >= 0; i-- {
if root.Scheduled[i].Triggered() { if root.Scheduled[i].Triggered() {