if no original file, then edit merges with nil and calls itself an inbox

master
Bel LaPointe 2023-11-07 06:10:36 -07:00
parent ead31e077b
commit ea904ea729
1 changed files with 23 additions and 18 deletions

View File

@ -12,6 +12,7 @@ import (
"syscall"
"time"
"github.com/google/uuid"
"gogs.inhome.blapointe.com/bel/pttodo/pttodo"
"gopkg.in/yaml.v2"
)
@ -50,28 +51,21 @@ func _edit(filepaths func() []string) error {
}
edits := map[string]string{}
originals := map[string]string{}
for _, editedFile := range editedFiles {
edits[path.Base(editedFile)] = editedFile
originalFile := func() string {
last := ""
for _, f := range filepaths() {
if path.Base(f) == path.Base(editedFile) {
return f
}
last = f
}
if last != "" {
return path.Join(path.Dir(last), path.Base(editedFile))
}
panic("how?")
}()
edited, err := pttodo.NewTodosFromFile(editedFile)
if err != nil {
return err
}
original, err := pttodo.NewRootFromFile(originalFile)
original, err := pttodo.NewRootFromFile(func() string {
for _, f := range filepaths() {
if path.Base(f) == path.Base(editedFile) {
return f
}
}
return "/dev/null"
}())
if err != nil {
return err
}
@ -94,8 +88,6 @@ func _edit(filepaths func() []string) error {
original.AutoMove()
if err := func() error {
originals[path.Base(editedFile)] = originalFile
f, err := os.Create(editedFile)
if err != nil {
return err
@ -108,14 +100,27 @@ func _edit(filepaths func() []string) error {
}
}
for _, f := range originals {
dir := ""
for _, f := range filepaths() {
if edited, ok := edits[path.Base(f)]; ok {
if err := os.Rename(edited, f); err != nil {
return err
}
delete(edits, path.Base(f))
} else if err := os.Remove(f); err != nil {
return err
}
dir = path.Dir(f)
}
for base, editedFile := range edits {
f := path.Join(dir, base)
if _, err := os.Stat(f); err == nil {
f = fmt.Sprintf("%s.todo.%s", f, uuid.New().String())
}
if err := os.Rename(editedFile, f); err != nil {
return err
}
}
return nil