diff --git a/go.mod b/go.mod index a848763..6d60731 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,7 @@ require ( github.com/Dreamacro/clash v1.0.0 github.com/elazarl/go-bindata-assetfs v1.0.0 github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 // indirect - github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect github.com/getlantern/systray v0.0.0-20190727060347-6f0e5a3c556c - github.com/oschwald/maxminddb-golang v1.7.0 // indirect - github.com/zserge/webview v0.0.0-20200620192713-a087738b3256 - golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect - golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 // indirect + github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae ) diff --git a/go.sum b/go.sum index a1cd4ec..78737e2 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,6 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA= github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= -github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA= -github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= github.com/getlantern/systray v0.0.0-20190727060347-6f0e5a3c556c h1:okydU7ZqJYYR/N62kzsacryouZc2UBnVgktk3jlrfoU= github.com/getlantern/systray v0.0.0-20190727060347-6f0e5a3c556c/go.mod h1:7Splj4WBQSps8jODnMgrIV6goKL0N1HR+mhCAEVWlA0= github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= @@ -45,14 +43,14 @@ github.com/oschwald/geoip2-golang v1.4.0 h1:5RlrjCgRyIGDz/mBmPfnAF4h8k0IAcRv9Pvr github.com/oschwald/geoip2-golang v1.4.0/go.mod h1:8QwxJvRImBH+Zl6Aa6MaIcs5YdlZSTKtzmPGzQqi9ng= github.com/oschwald/maxminddb-golang v1.6.0 h1:KAJSjdHQ8Kv45nFIbtoLGrGWqHFajOIm7skTyz/+Dls= github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w= -github.com/oschwald/maxminddb-golang v1.7.0 h1:JmU4Q1WBv5Q+2KZy5xJI+98aUwTIrPPxZUkd5Cwr8Zc= -github.com/oschwald/maxminddb-golang v1.7.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA= +github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -60,29 +58,21 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/zserge/webview v0.0.0-20200620192713-a087738b3256 h1:wE6qrYeU+9NL18dfN9pgMvTUPAviQrgYitbjdNcaxVQ= -github.com/zserge/webview v0.0.0-20200620192713-a087738b3256/go.mod h1:qxc/5N3SOFrs3q+EAVHqaJ1oLbm+hHlDhfhRYg8x7wQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/main.go b/main.go index 416a812..96bc6bc 100644 --- a/main.go +++ b/main.go @@ -16,8 +16,8 @@ import ( "github.com/Dreamacro/clash/hub/executor" "github.com/Dreamacro/clash/log" - "github.com/imgk/TrayedClash/systray" - "github.com/imgk/TrayedClash/static" + _ "github.com/imgk/TrayedClash/systray" + _ "github.com/imgk/TrayedClash/static" ) var ( @@ -45,8 +45,6 @@ func init() { flag.Visit(func(f *flag.Flag) { flagset[f.Name] = true }) - - go static.ListenAndServe() } func main() { @@ -61,11 +59,6 @@ func main() { homeDir = filepath.Join(currentDir, homeDir) } C.SetHomeDir(homeDir) - } else { - if runtime.GOOS == "windows" { - currentDir, _ := os.Getwd() - C.SetHomeDir(currentDir) - } } if configFile != "" { @@ -110,9 +103,5 @@ func main() { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) - - systray.Run() - - sigCh <- syscall.SIGTERM <-sigCh } diff --git a/static/handler.go b/static/handler.go index 3b7738f..736f15c 100644 --- a/static/handler.go +++ b/static/handler.go @@ -5,18 +5,20 @@ package static import ( "log" "net/http" - "os" "github.com/elazarl/go-bindata-assetfs" ) -func ListenAndServe() { - var handler http.Handler - if info, err := os.Stat("static/gh-pages/"); err == nil && info.IsDir() { - handler = http.FileServer(http.Dir("static/gh-pages/")) - } else { - handler = http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "gh-pages"}) - } - - log.Fatal(http.ListenAndServe("127.0.0.1:8780", handler)) +func init() { + go func() { + handler := http.FileServer(&assetfs.AssetFS{ + Asset: Asset, + AssetDir: AssetDir, + AssetInfo: AssetInfo, + Prefix: "gh-pages", + }) + if err := http.ListenAndServe("127.0.0.1:8780", handler); err != nil { + log.Panicln(err) + } + }() } diff --git a/systray/systray.go b/systray/systray.go index e3a5241..f883afb 100644 --- a/systray/systray.go +++ b/systray/systray.go @@ -1,13 +1,16 @@ package systray import ( + "fmt" + "os" "runtime" "strconv" "time" "github.com/getlantern/systray" - "github.com/zserge/webview" + "github.com/skratchdot/open-golang/open" + C "github.com/Dreamacro/clash/constant" "github.com/Dreamacro/clash/proxy" "github.com/Dreamacro/clash/tunnel" @@ -16,12 +19,16 @@ import ( ) func init() { - runtime.LockOSThread() -} + if runtime.GOOS == "windows" { + currentDir, _ := os.Getwd() + C.SetHomeDir(currentDir) + } -// Run is ... -func Run() { - systray.Run(onReady, onExit) + go func() { + runtime.LockOSThread() + systray.Run(onReady, onExit) + runtime.UnlockOSThread() + }() } func onReady() { @@ -113,6 +120,7 @@ func onReady() { for { select { case <-mTitle.ClickedCh: + fmt.Println("Title Clicked") case <-mGlobal.ClickedCh: tunnel.SetMode(tunnel.Global) case <-mRule.ClickedCh: @@ -138,15 +146,7 @@ func onReady() { } } case <-mURL.ClickedCh: - go func(w webview.WebView) { - w.SetTitle("TrayedClash") - w.SetSize(900, 600, webview.HintNone) - w.Navigate("http://127.0.0.1:8780/") - - w.Run() - - w.Destroy() - }(webview.New(false)) + open.Run("http://127.0.0.1:8780/") case <-mQuit.ClickedCh: systray.Quit() return @@ -164,4 +164,6 @@ func onExit() { break } } + + os.Exit(1) }