yggdrasil-go/contrib/ui/webview/ui.go
vadym 64dc990c50 1. added webview dependency
2. changed functions in ui.go
2021-09-11 22:45:38 +03:00

92 lines
2 KiB
Go
Executable file

package main
import (
"github.com/webview/webview"
"path/filepath"
"io/ioutil"
"net/url"
"runtime"
"strings"
"os/exec"
"log"
"os"
"fmt"
)
func main() {
debug := true
w := webview.New(debug)
defer w.Destroy()
w.SetTitle("RiV-mesh")
w.SetSize(465, 410, webview.HintNone)
path, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
log.Println(path)
w.Bind("onLoad", func() {
log.Println("page loaded")
go run(w)
})
dat, err := ioutil.ReadFile(path+"/index.html")
w.Navigate("data:text/html,"+url.QueryEscape(string(dat)))
w.Run()
}
func run(w webview.WebView){
if runtime.GOOS == "windows" {
program_path := "programfiles"
path, exists := os.LookupEnv(program_path)
if exists {
fmt.Println("Program path: %s", path)
riv_ctrl_path := fmt.Sprintf("%s\\RiV-mesh\\meshctl.exe", path)
get_self(w, riv_ctrl_path, "getSelf")
} else {
fmt.Println("could not find Program Files path")
}
} else {
riv_ctrl_path := fmt.Sprintf("meshctl")
get_self(w, riv_ctrl_path, "getSelf")
}
}
func run_command(riv_ctrl_path string, command string) []string{
cmd := exec.Command(riv_ctrl_path, command)
out, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
return nil
}
lines := strings.Split(string(out), "\n")
return lines
}
func get_self(w webview.WebView, riv_ctrl_path string, command string){
lines := run_command(riv_ctrl_path, command)
m := make(map[string]string)
for i, s := range lines {
p := strings.SplitN(s, ":", 2)
if len(p)>1 {
m[p[0]]=strings.TrimSpace(p[1])
fmt.Println(i)
}
}
if val, ok := m["IPv6 address"]; ok {
//found ipv6
fmt.Printf("IPv6: %s\n", val)
go setFieldValue(w, "ipv6", val)
}
if val, ok := m["IPv6 subnet"]; ok {
//found subnet
fmt.Printf("Subnet: %s\n", val)
go setFieldValue(w, "subnet", val)
}
}
func setFieldValue(p webview.WebView, id string, value string) {
p.Dispatch(func() {
p.Eval("setFieldValue('"+id+"','"+value+"');")
})
}