|
6 | 6 | "fmt" |
7 | 7 | "github.com/metacubex/mihomo/adapter" |
8 | 8 | "github.com/metacubex/mihomo/adapter/outboundgroup" |
9 | | - "github.com/metacubex/mihomo/adapter/provider" |
10 | 9 | "github.com/metacubex/mihomo/common/observable" |
11 | 10 | "github.com/metacubex/mihomo/common/utils" |
12 | 11 | "github.com/metacubex/mihomo/component/updater" |
@@ -108,36 +107,43 @@ func handleGetProxies() string { |
108 | 107 | return string(data) |
109 | 108 | } |
110 | 109 |
|
111 | | -func handleChangeProxy(data string) bool { |
| 110 | +func handleChangeProxy(data string, fn func(string string)) { |
112 | 111 | runLock.Lock() |
113 | | - defer runLock.Unlock() |
114 | | - var params = &ChangeProxyParams{} |
115 | | - err := json.Unmarshal([]byte(data), params) |
116 | | - if err != nil { |
117 | | - log.Infoln("Unmarshal ChangeProxyParams %v", err) |
118 | | - } |
119 | | - groupName := *params.GroupName |
120 | | - proxyName := *params.ProxyName |
121 | | - proxies := tunnel.ProxiesWithProviders() |
122 | | - group, ok := proxies[groupName] |
123 | | - if !ok { |
124 | | - return false |
125 | | - } |
126 | | - adapterProxy := group.(*adapter.Proxy) |
127 | | - selector, ok := adapterProxy.ProxyAdapter.(outboundgroup.SelectAble) |
128 | | - if !ok { |
129 | | - return false |
130 | | - } |
131 | | - if proxyName == "" { |
132 | | - selector.ForceSet(proxyName) |
133 | | - } else { |
134 | | - err = selector.Set(proxyName) |
135 | | - } |
136 | | - if err == nil { |
137 | | - log.Infoln("[SelectAble] %s selected %s", groupName, proxyName) |
138 | | - return false |
139 | | - } |
140 | | - return true |
| 112 | + go func() { |
| 113 | + defer runLock.Unlock() |
| 114 | + var params = &ChangeProxyParams{} |
| 115 | + err := json.Unmarshal([]byte(data), params) |
| 116 | + if err != nil { |
| 117 | + fn(err.Error()) |
| 118 | + return |
| 119 | + } |
| 120 | + groupName := *params.GroupName |
| 121 | + proxyName := *params.ProxyName |
| 122 | + proxies := tunnel.ProxiesWithProviders() |
| 123 | + group, ok := proxies[groupName] |
| 124 | + if !ok { |
| 125 | + fn("Not found group") |
| 126 | + return |
| 127 | + } |
| 128 | + adapterProxy := group.(*adapter.Proxy) |
| 129 | + selector, ok := adapterProxy.ProxyAdapter.(outboundgroup.SelectAble) |
| 130 | + if !ok { |
| 131 | + fn("Group is not selectable") |
| 132 | + return |
| 133 | + } |
| 134 | + if proxyName == "" { |
| 135 | + selector.ForceSet(proxyName) |
| 136 | + } else { |
| 137 | + err = selector.Set(proxyName) |
| 138 | + } |
| 139 | + if err != nil { |
| 140 | + fn(err.Error()) |
| 141 | + return |
| 142 | + } |
| 143 | + |
| 144 | + fn("") |
| 145 | + return |
| 146 | + }() |
141 | 147 | } |
142 | 148 |
|
143 | 149 | func handleGetTraffic(onlyProxy bool) string { |
@@ -339,8 +345,6 @@ func handleUpdateGeoData(geoType string, geoName string, fn func(value string)) |
339 | 345 |
|
340 | 346 | func handleUpdateExternalProvider(providerName string, fn func(value string)) { |
341 | 347 | go func() { |
342 | | - runLock.Lock() |
343 | | - defer runLock.Unlock() |
344 | 348 | externalProvider, exist := externalProviders[providerName] |
345 | 349 | if !exist { |
346 | 350 | fn("external provider is not exist") |
@@ -401,7 +405,7 @@ func handleStopLog() { |
401 | 405 | } |
402 | 406 |
|
403 | 407 | func init() { |
404 | | - provider.HealthcheckHook = func(name string, delay uint16) { |
| 408 | + adapter.UrlTestHook = func(name string, delay uint16) { |
405 | 409 | delayData := &Delay{ |
406 | 410 | Name: name, |
407 | 411 | } |
|
0 commit comments