This repository has been archived by the owner on Nov 3, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
28 changed files
with
1,283 additions
and
286 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,15 @@ | ||
module github.com/imgk/TrayedClash | ||
|
||
go 1.13 | ||
go 1.14 | ||
|
||
require ( | ||
github.com/Dreamacro/clash v0.19.0 | ||
github.com/Dreamacro/clash v0.20.1-0.20200508135217-3638b077cdc5 | ||
github.com/elazarl/go-bindata-assetfs v1.0.0 | ||
github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect | ||
github.com/getlantern/systray v0.0.0-20200324212034-d3ab4fd25d99 | ||
github.com/go-chi/chi v4.0.4+incompatible // indirect | ||
github.com/go-chi/cors v1.0.1 // indirect | ||
github.com/gorilla/websocket v1.4.2 // indirect | ||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect | ||
github.com/lxn/walk v0.0.0-20191128110447-55ccb3a9f5c1 // indirect | ||
github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 // indirect | ||
github.com/miekg/dns v1.1.29 // indirect | ||
github.com/sirupsen/logrus v1.5.0 | ||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 | ||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 // indirect | ||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect | ||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a // indirect | ||
golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 | ||
github.com/zserge/webview v0.0.0-20200410160118-50e4bcc420ab | ||
golang.org/x/sys v0.0.0-20200508214444-3aab700007d7 | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,71 +1,118 @@ | ||
package main | ||
|
||
import ( | ||
"flag" | ||
"fmt" | ||
"os" | ||
"path/filepath" | ||
"runtime" | ||
|
||
"github.com/Dreamacro/clash/config" | ||
C "github.com/Dreamacro/clash/constant" | ||
"github.com/Dreamacro/clash/hub" | ||
|
||
log "github.com/sirupsen/logrus" | ||
|
||
"github.com/imgk/TrayedClash/systray" | ||
) | ||
|
||
var ( | ||
version bool | ||
homeDir string | ||
configFile string | ||
) | ||
|
||
func init() { | ||
flag.StringVar(&homeDir, "d", "", "set configuration directory") | ||
flag.StringVar(&configFile, "f", "", "specify configuration file") | ||
flag.BoolVar(&version, "v", false, "show current version of clash") | ||
flag.Parse() | ||
} | ||
|
||
func main() { | ||
if version { | ||
fmt.Printf("Clash %s %s %s %s\n", C.Version, runtime.GOOS, runtime.GOARCH, C.BuildTime) | ||
return | ||
} | ||
|
||
if homeDir != "" { | ||
if !filepath.IsAbs(homeDir) { | ||
currentDir, _ := os.Getwd() | ||
homeDir = filepath.Join(currentDir, homeDir) | ||
} | ||
C.SetHomeDir(homeDir) | ||
} else { | ||
if runtime.GOOS == "windows" { | ||
currentDir, _ := os.Getwd() | ||
C.SetHomeDir(currentDir) | ||
} | ||
} | ||
|
||
if configFile != "" { | ||
if !filepath.IsAbs(configFile) { | ||
currentDir, _ := os.Getwd() | ||
configFile = filepath.Join(currentDir, configFile) | ||
} | ||
C.SetConfig(configFile) | ||
} else { | ||
configFile := filepath.Join(C.Path.HomeDir(), C.Path.Config()) | ||
C.SetConfig(configFile) | ||
} | ||
|
||
if err := config.Init(C.Path.HomeDir()); err != nil { | ||
log.Fatalf("Initial configuration directory error: %s", err.Error()) | ||
} | ||
|
||
if err := hub.Parse(); err != nil { | ||
log.Fatalf("Parse config error: %s", err.Error()) | ||
} | ||
|
||
systray.Run() | ||
} | ||
package main | ||
|
||
import ( | ||
"flag" | ||
"fmt" | ||
"os" | ||
"os/signal" | ||
"path/filepath" | ||
"runtime" | ||
"syscall" | ||
|
||
"github.com/Dreamacro/clash/config" | ||
"github.com/Dreamacro/clash/constant" | ||
C "github.com/Dreamacro/clash/constant" | ||
"github.com/Dreamacro/clash/hub" | ||
"github.com/Dreamacro/clash/hub/executor" | ||
"github.com/Dreamacro/clash/log" | ||
|
||
"github.com/imgk/TrayedClash/systray" | ||
"github.com/imgk/TrayedClash/static" | ||
) | ||
|
||
var ( | ||
flagset map[string]bool | ||
version bool | ||
testConfig bool | ||
homeDir string | ||
configFile string | ||
externalUI string | ||
externalController string | ||
secret string | ||
) | ||
|
||
func init() { | ||
flag.StringVar(&homeDir, "d", "", "set configuration directory") | ||
flag.StringVar(&configFile, "f", "", "specify configuration file") | ||
flag.StringVar(&externalUI, "ext-ui", "", "override external ui directory") | ||
flag.StringVar(&externalController, "ext-ctl", "", "override external controller address") | ||
flag.StringVar(&secret, "secret", "", "override secret for RESTful API") | ||
flag.BoolVar(&version, "v", false, "show current version of clash") | ||
flag.BoolVar(&testConfig, "t", false, "test configuration and exit") | ||
flag.Parse() | ||
|
||
flagset = map[string]bool{} | ||
flag.Visit(func(f *flag.Flag) { | ||
flagset[f.Name] = true | ||
}) | ||
|
||
go static.ListenAndServe() | ||
} | ||
|
||
func main() { | ||
if version { | ||
fmt.Printf("Clash %s %s %s %s\n", C.Version, runtime.GOOS, runtime.GOARCH, C.BuildTime) | ||
return | ||
} | ||
|
||
if homeDir != "" { | ||
if !filepath.IsAbs(homeDir) { | ||
currentDir, _ := os.Getwd() | ||
homeDir = filepath.Join(currentDir, homeDir) | ||
} | ||
C.SetHomeDir(homeDir) | ||
} else { | ||
if runtime.GOOS == "windows" { | ||
currentDir, _ := os.Getwd() | ||
C.SetHomeDir(currentDir) | ||
} | ||
} | ||
|
||
if configFile != "" { | ||
if !filepath.IsAbs(configFile) { | ||
currentDir, _ := os.Getwd() | ||
configFile = filepath.Join(currentDir, configFile) | ||
} | ||
C.SetConfig(configFile) | ||
} else { | ||
configFile := filepath.Join(C.Path.HomeDir(), C.Path.Config()) | ||
C.SetConfig(configFile) | ||
} | ||
|
||
if err := config.Init(C.Path.HomeDir()); err != nil { | ||
log.Fatalln("Initial configuration directory error: %s", err.Error()) | ||
} | ||
|
||
if testConfig { | ||
if _, err := executor.Parse(); err != nil { | ||
log.Errorln(err.Error()) | ||
fmt.Printf("configuration file %s test failed\n", constant.Path.Config()) | ||
os.Exit(1) | ||
} | ||
fmt.Printf("configuration file %s test is successful\n", constant.Path.Config()) | ||
return | ||
} | ||
|
||
var options []hub.Option | ||
if flagset["ext-ui"] { | ||
options = append(options, hub.WithExternalUI(externalUI)) | ||
} | ||
if flagset["ext-ctl"] { | ||
options = append(options, hub.WithExternalController(externalController)) | ||
} | ||
if flagset["secret"] { | ||
options = append(options, hub.WithSecret(secret)) | ||
} | ||
|
||
if err := hub.Parse(options...); err != nil { | ||
log.Fatalln("Parse config error: %s", err.Error()) | ||
} | ||
|
||
sigCh := make(chan os.Signal, 1) | ||
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) | ||
|
||
systray.Run() | ||
|
||
sigCh <- syscall.SIGTERM | ||
<-sigCh | ||
} |
Oops, something went wrong.