cli can read
parent
109c7c48bc
commit
78d17a2760
71
cli.go
71
cli.go
|
|
@ -1,10 +1,81 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"local/mytinytodoclient/mytinytodo"
|
||||||
"local/mytinytodoclient/mytinytodo/remote"
|
"local/mytinytodoclient/mytinytodo/remote"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
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()
|
conf, err := remote.NewConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
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()) {
|
func (buffer *Buffer) notDoneCallback(foo func()) {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,32 @@ func TestBufferNotDoneCallback(t *testing.T) {
|
||||||
close(b.done)
|
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) {
|
func mockBuffer(t *testing.T) (*Buffer, *httptest.Server) {
|
||||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue