if item in todo is scheduled for later, then move it
parent
8c050d1d89
commit
8276308d52
|
|
@ -113,26 +113,41 @@ func edit(dry bool, filepaths []string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
originals := map[string]pttodo.Root{}
|
||||
for _, target := range filepaths {
|
||||
var original pttodo.Root
|
||||
if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(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
|
||||
}
|
||||
originals[target] = original
|
||||
}
|
||||
if err := vimd(tempDir); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, target := range filepaths {
|
||||
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 {
|
||||
break
|
||||
}
|
||||
log.Printf("%v, press <Enter> to resume editing", err)
|
||||
log.Printf("%s, press <Enter> to resume editing", err)
|
||||
b := make([]byte, 1)
|
||||
if _, err := os.Stdin.Read(b); err != nil {
|
||||
break
|
||||
return err
|
||||
}
|
||||
if err := vimd(tempDir); err != nil {
|
||||
return err
|
||||
|
|
@ -143,12 +158,13 @@ func edit(dry bool, filepaths []string) error {
|
|||
return nil
|
||||
}
|
||||
for _, target := range filepaths {
|
||||
var todo pttodo.Root
|
||||
original := originals[target]
|
||||
if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil {
|
||||
return err
|
||||
} else if err := yaml.Unmarshal(b, &todo); err != nil {
|
||||
} else if err := yaml.Unmarshal(b, &original.Todo); err != nil {
|
||||
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
|
||||
} else if err := ioutil.WriteFile(target, c, os.ModePerm); err != nil {
|
||||
return err
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,5 +1,12 @@
|
|||
todo:
|
||||
- a
|
||||
- b
|
||||
- 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: []
|
||||
|
|
|
|||
|
|
@ -20,6 +20,23 @@ func (root Root) Equals(other Root) bool {
|
|||
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() {
|
||||
for i := len(root.Scheduled) - 1; i >= 0; i-- {
|
||||
if root.Scheduled[i].Triggered() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue