MyTinyTodo2/cli.go

91 lines
1.7 KiB
Go

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)
}
remote, err := remote.NewClient(conf)
if err != nil {
panic(err)
}
if err := remote.ParseArgs(); err != nil {
panic(err)
}
}