lf/client.go

153 lines
2.4 KiB
Go
Raw Normal View History

2016-08-13 12:49:04 +00:00
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
2016-10-29 23:20:35 +00:00
"strings"
2016-08-13 12:49:04 +00:00
"github.com/nsf/termbox-go"
)
func client() {
logFile, err := os.Create(gLogPath)
if err != nil {
panic(err)
}
defer logFile.Close()
log.SetOutput(logFile)
log.Print("hi!")
if err := termbox.Init(); err != nil {
log.Fatalf("initializing termbox: %s", err)
}
defer termbox.Close()
app := newApp()
2016-08-13 12:49:04 +00:00
2016-10-16 11:19:19 +00:00
app.ui.loadFile(app.nav)
if _, err := os.Stat(gConfigPath); err == nil {
log.Printf("reading configuration file: %s", gConfigPath)
rcFile, err := os.Open(gConfigPath)
if err != nil {
msg := fmt.Sprintf("opening configuration file: %s", err)
app.ui.message = msg
log.Printf(msg)
}
defer rcFile.Close()
p := newParser(rcFile)
for p.parse() {
p.expr.eval(app, nil)
}
if p.err != nil {
app.ui.message = p.err.Error()
log.Print(p.err)
}
2016-08-13 12:49:04 +00:00
}
app.ui.draw(app.nav)
app.handleInp()
}
2016-10-29 23:20:35 +00:00
func readExpr(c net.Conn) chan Expr {
ch := make(chan Expr)
go func() {
fmt.Fprintf(c, "conn %d\n", gClientId)
2016-10-29 23:20:35 +00:00
s := bufio.NewScanner(c)
for s.Scan() {
log.Printf("recv: %s", s.Text())
2016-10-29 23:20:35 +00:00
p := newParser(strings.NewReader(s.Text()))
if p.parse() {
ch <- p.expr
}
}
c.Close()
}()
return ch
}
func saveFiles(list []string, copy bool) error {
2016-08-13 12:49:04 +00:00
c, err := net.Dial("unix", gSocketPath)
if err != nil {
return fmt.Errorf("dialing to save files: %s", err)
}
defer c.Close()
log.Printf("saving files: %v", list)
fmt.Fprint(c, "save ")
2016-08-13 12:49:04 +00:00
if copy {
fmt.Fprint(c, "copy ")
2016-08-13 12:49:04 +00:00
} else {
fmt.Fprint(c, "move ")
2016-08-13 12:49:04 +00:00
}
fmt.Fprintln(c, strings.Join(list, ":"))
2016-08-13 12:49:04 +00:00
return nil
}
func loadFiles() (list []string, copy bool, err error) {
2016-08-13 12:49:04 +00:00
c, e := net.Dial("unix", gSocketPath)
if e != nil {
err = fmt.Errorf("dialing to load files: %s", e)
return
}
defer c.Close()
fmt.Fprintln(c, "load")
s := bufio.NewScanner(c)
s.Scan()
word, rest := splitWord(s.Text())
log.Printf("load: %s", s.Text())
switch word {
case "copy":
copy = true
2016-08-13 12:49:04 +00:00
case "move":
copy = false
2016-08-13 12:49:04 +00:00
default:
err = fmt.Errorf("unexpected option to copy file(s): %s", word)
2016-08-13 12:49:04 +00:00
return
}
list = strings.Split(rest, ":")
2016-08-13 12:49:04 +00:00
if s.Err() != nil {
err = fmt.Errorf("scanning file list: %s", s.Err())
return
}
log.Printf("loading files: %v", list)
return
}
func sendServer(cmd string) error {
c, err := net.Dial("unix", gSocketPath)
if err != nil {
return fmt.Errorf("dialing to send server: %s", err)
}
defer c.Close()
fmt.Fprintln(c, "send sync")
return nil
}