cli can read

master
Bel LaPointe 2019-03-03 09:21:30 -07:00
parent 109c7c48bc
commit 78d17a2760
3 changed files with 109 additions and 0 deletions

71
cli.go
View File

@ -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)

View File

@ -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 {

View File

@ -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)