add pttodo.NewRootFromFile, pttodo.NewTodosFromFile
parent
4e69646e88
commit
760c822323
|
|
@ -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},
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue