diff --git a/build b/build index 1da3af43..10e9c7b6 100755 --- a/build +++ b/build @@ -58,10 +58,6 @@ build_meshctl() { } build_mesh_ui() { - #only UI should be built with windowsgui flag - if [ "$GOOS" == "windows" ]; then - LDFLAGS2=" -H windowsgui" - fi buildbin ./contrib/ui/mesh-ui } diff --git a/contrib/ui/mesh-ui/webview.go b/contrib/ui/mesh-ui/webview.go old mode 100755 new mode 100644 index 67487b00..b30620e4 --- a/contrib/ui/mesh-ui/webview.go +++ b/contrib/ui/mesh-ui/webview.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "errors" "fmt" "io/ioutil" "log" @@ -18,11 +19,34 @@ import ( "github.com/webview/webview" "github.com/RiV-chain/RiV-mesh/src/admin" + "github.com/docopt/docopt-go" ) +var usage = `Graphical interface for RiV mesh. +Usage: + mesh-ui [] [-c] + mesh-ui -h | --help + mesh-ui -v | --version + +Options: + Index file name [default: index.html]. + -c --console Show debug console window. + -h --help Show this screen. + -v --version Show version.` + +var confui struct { + IndexHtml string `docopt:""` + Console bool `docopt:"-c,--console"` +} +======= var uiVersion = "0.0.1" func main() { + opts, _ := docopt.ParseArgs(usage, os.Args[1:], uiVersion) + opts.Bind(&confui) + if !confui.Console { + Console(false) + } debug := true w := webview.New(debug) defer w.Destroy() @@ -67,18 +91,21 @@ func main() { } } } - var path string - if len(os.Args) > 1 { - path, err = filepath.Abs(filepath.Dir(os.Args[1])) - } else { - path, err = filepath.Abs(filepath.Dir(os.Args[0])) + if confui.IndexHtml == "" { + confui.IndexHtml = "index.html" } + confui.IndexHtml, err = filepath.Abs(confui.IndexHtml) if err != nil { - log.Fatal(err) + panic(errors.New("Index file not found: " + err.Error())) + } + + if stat, err := os.Stat(confui.IndexHtml); err != nil { + panic(errors.New("Index file not found or permissians denied: " + err.Error())) + } else if stat.IsDir() { + panic(errors.New(fmt.Sprintf("Index file %v not found", confui.IndexHtml))) } - log.Println(path) w.Bind("onLoad", func() { log.Println("page loaded") go run(w) @@ -105,10 +132,8 @@ func main() { w.Bind("ping", func(peer_list string) { go ping(w, peer_list) }) - //dat, err := ioutil.ReadFile(path+"/index.html") - //w.Navigate("data:text/html,"+url.QueryEscape(string(dat))) - //w.Navigate("data:text/html,"+""+path+"") - w.Navigate("file://" + path + "/index.html") + log.Printf("Opening: %v", confui.IndexHtml) + w.Navigate(confui.IndexHtml) w.Run() } diff --git a/contrib/ui/mesh-ui/webview_other.go b/contrib/ui/mesh-ui/webview_other.go index 782e0954..099b4f84 100644 --- a/contrib/ui/mesh-ui/webview_other.go +++ b/contrib/ui/mesh-ui/webview_other.go @@ -30,3 +30,6 @@ func run_command_with_arg(command string, arg string) []byte { } return out } + +func Console(show bool) { +} diff --git a/contrib/ui/mesh-ui/webview_windows.go b/contrib/ui/mesh-ui/webview_windows.go index 2b0fd730..4682ca6a 100755 --- a/contrib/ui/mesh-ui/webview_windows.go +++ b/contrib/ui/mesh-ui/webview_windows.go @@ -33,3 +33,19 @@ func run_command_with_arg(command string, arg string) []byte { } return out } + +func Console(show bool) { + var getWin = syscall.NewLazyDLL("kernel32.dll").NewProc("GetConsoleWindow") + var showWin = syscall.NewLazyDLL("user32.dll").NewProc("ShowWindow") + hwnd, _, _ := getWin.Call() + if hwnd == 0 { + return + } + if show { + var SW_RESTORE uintptr = 9 + showWin.Call(hwnd, SW_RESTORE) + } else { + var SW_HIDE uintptr = 0 + showWin.Call(hwnd, SW_HIDE) + } +} diff --git a/go.mod b/go.mod index ef843c08..ee1d4d0d 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( ) require ( + github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect github.com/getlantern/ema v0.0.0-20190620044903-5943d28f40e4 // indirect diff --git a/go.sum b/go.sum index 30f678f1..4c41cad8 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/o github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=