cli can read
parent
109c7c48bc
commit
78d17a2760
71
cli.go
71
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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue