From 78d17a27601a496ab77420a636368da632ce52a1 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Sun, 3 Mar 2019 09:21:30 -0700 Subject: [PATCH] cli can read --- cli.go | 71 +++++++++++++++++++++++++++++++++++++++ mytinytodo/buffer.go | 12 +++++++ mytinytodo/buffer_test.go | 26 ++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/cli.go b/cli.go index f8a8913..3d9ff1f 100644 --- a/cli.go +++ b/cli.go @@ -1,10 +1,81 @@ package main import ( + "bufio" + "errors" + "fmt" + "local/mytinytodoclient/mytinytodo" "local/mytinytodoclient/mytinytodo/remote" + "log" + "os" + "strings" ) func main() { + conf, err := remote.NewConfig() + if err != nil { + panic(err) + } + buffer, err := mytinytodo.NewBuffer(&mytinytodo.Config{Config: conf}) + if err != nil { + panic(err) + } + log.Printf("config: %v", *conf) + for { + line := readLine() + first := strings.Split(line, " ")[0] + if err := doLine(buffer, first, line); err != nil { + log.Printf("err doing %s: %v", first, err) + } + } +} + +func readLine() string { + reader := bufio.NewReader(os.Stdin) + text, _ := reader.ReadString('\n') + return strings.TrimSpace(text) +} + +func doLine(buffer *mytinytodo.Buffer, key, line string) error { + defer func() { + if err := recover(); err != nil { + log.Printf("err on %s: %v", key, err) + } + }() + err := fmt.Errorf("unknown command %q", key) + switch key { + case "refresh": + buffer.RefreshLocal() + err = nil + case "dequeue": + buffer.Dequeue() + err = nil + case "enqueue": + err = errors.New("not impl") + case "lists": + var lists remote.Lists + lists, err = buffer.Lists() + if err == nil { + log.Printf("%s: %v", key, lists) + } + case "tasks": + var tasks remote.Tasks + id := strings.Split(line, " ")[1] + tasks, err = buffer.Tasks(remote.List{ID: id}) + if err == nil { + log.Printf("%s: %v", key, tasks) + } + case "quit": + fallthrough + case "exit": + fallthrough + case "q": + err = errors.New("not impl") + } + return err +} + +func oldMain() { conf, err := remote.NewConfig() if err != nil { panic(err) diff --git a/mytinytodo/buffer.go b/mytinytodo/buffer.go index cbb04e2..f1d35e0 100644 --- a/mytinytodo/buffer.go +++ b/mytinytodo/buffer.go @@ -164,6 +164,18 @@ func (buffer *Buffer) RefreshLocal() { } } +func (buffer *Buffer) Lists() (remote.Lists, error) { + var lists remote.Lists + err := buffer.db.Get(nsLists, keyLists, &lists) + return lists, err +} + +func (buffer *Buffer) Tasks(list remote.List) (remote.Tasks, error) { + var tasks remote.Tasks + err := buffer.db.Get(nsTasks, list.ID, &tasks) + return tasks, err +} + func (buffer *Buffer) notDoneCallback(foo func()) { for { select { diff --git a/mytinytodo/buffer_test.go b/mytinytodo/buffer_test.go index cbe5543..a92d668 100644 --- a/mytinytodo/buffer_test.go +++ b/mytinytodo/buffer_test.go @@ -84,6 +84,32 @@ func TestBufferNotDoneCallback(t *testing.T) { close(b.done) } +func TestBufferLists(t *testing.T) { + b, s := mockBuffer(t) + defer b.Close() + defer s.Close() + + b.RefreshLocal() + + if lists, err := b.Lists(); err != nil || lists.Length() != 1 { + t.Fatalf("err: buffer cannot lists(): %v (%d)", err, lists.Length()) + } +} + +func TestBufferTasks(t *testing.T) { + b, s := mockBuffer(t) + defer b.Close() + defer s.Close() + + b.RefreshLocal() + + if lists, err := b.Lists(); err != nil || lists.Length() != 1 { + t.Fatalf("err: buffer cannot lists(): %v (%d)", err, lists.Length()) + } else if tasks, err := b.Tasks(lists.ListArray()[0]); err != nil || tasks.Length() != 1 { + t.Fatalf("err: buffer cannot tasks(): %v (%d)", err, tasks.Length()) + } +} + func mockBuffer(t *testing.T) (*Buffer, *httptest.Server) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK)