add pttodo.NewRootFromFile, pttodo.NewTodosFromFile

master
Bel LaPointe 2023-11-06 12:14:27 -07:00
parent 4e69646e88
commit 760c822323
2 changed files with 51 additions and 0 deletions

View File

@ -1,11 +1,41 @@
package pttodo package pttodo
import (
"os"
yaml "gopkg.in/yaml.v2"
)
type Root struct { type Root struct {
Todo []Todo Todo []Todo
Scheduled []Todo Scheduled []Todo
Done []Todo Done []Todo
} }
func VerifyRootFromFile(p string) error {
_, err := NewRootFromFile(p)
return err
}
func NewRootFromFile(p string) (Root, error) {
f, err := os.Open(p)
if os.IsNotExist(err) {
return Root{}, nil
}
if err != nil {
return Root{}, err
}
defer f.Close()
var result Root
if err := yaml.NewDecoder(f).Decode(&result); err != nil {
return Root{}, err
}
result.AutoMove()
return result, nil
}
func (root Root) Equals(other Root) bool { func (root Root) Equals(other Root) bool {
for i, slice := range [][2][]Todo{ for i, slice := range [][2][]Todo{
[2][]Todo{root.Todo, other.Todo}, [2][]Todo{root.Todo, other.Todo},

View File

@ -4,7 +4,10 @@ import (
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"hash/crc32" "hash/crc32"
"os"
"time" "time"
yaml "gopkg.in/yaml.v2"
) )
type Todo struct { type Todo struct {
@ -17,6 +20,24 @@ type Todo struct {
writeTS bool writeTS bool
} }
func NewTodosFromFile(p string) ([]Todo, error) {
f, err := os.Open(p)
if os.IsNotExist(err) {
return nil, nil
}
if err != nil {
return nil, err
}
defer f.Close()
var result []Todo
if err := yaml.NewDecoder(f).Decode(&result); err != nil {
return nil, err
}
return result, nil
}
func (todo Todo) ID() string { func (todo Todo) ID() string {
hash := crc32.NewIEEE() hash := crc32.NewIEEE()
fmt.Fprintf(hash, "%d:%s", 0, todo.Todo) fmt.Fprintf(hash, "%d:%s", 0, todo.Todo)