mirror of
https://github.com/MetaCubeX/Clash.Meta.git
synced 2025-04-20 01:00:56 +00:00
fix: group filter touch provider
This commit is contained in:
parent
e995003c27
commit
0a4570b55c
5 changed files with 16 additions and 26 deletions
|
@ -51,10 +51,9 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
|
|||
var proxies []C.Proxy
|
||||
for _, pd := range gb.providers {
|
||||
if touch {
|
||||
proxies = append(proxies, pd.ProxiesWithTouch()...)
|
||||
} else {
|
||||
proxies = append(proxies, pd.Proxies()...)
|
||||
pd.Touch()
|
||||
}
|
||||
proxies = append(proxies, pd.Proxies()...)
|
||||
}
|
||||
if len(proxies) == 0 {
|
||||
return append(proxies, tunnel.Proxies()["COMPATIBLE"])
|
||||
|
@ -63,13 +62,12 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
|
|||
}
|
||||
|
||||
for _, pd := range gb.providers {
|
||||
if pd.VehicleType() == types.Compatible {
|
||||
if touch {
|
||||
gb.proxies.Store(pd.Name(), pd.ProxiesWithTouch())
|
||||
} else {
|
||||
gb.proxies.Store(pd.Name(), pd.Proxies())
|
||||
}
|
||||
if touch {
|
||||
pd.Touch()
|
||||
}
|
||||
|
||||
if pd.VehicleType() == types.Compatible {
|
||||
gb.proxies.Store(pd.Name(), pd.Proxies())
|
||||
gb.versions.Store(pd.Name(), pd.Version())
|
||||
continue
|
||||
}
|
||||
|
@ -80,11 +78,7 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
|
|||
newProxies []C.Proxy
|
||||
)
|
||||
|
||||
if touch {
|
||||
proxies = pd.ProxiesWithTouch()
|
||||
} else {
|
||||
proxies = pd.Proxies()
|
||||
}
|
||||
proxies = pd.Proxies()
|
||||
|
||||
for _, p := range proxies {
|
||||
if mat, _ := gb.filter.FindStringMatch(p.Name()); mat != nil {
|
||||
|
|
|
@ -75,9 +75,11 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide
|
|||
providers = append(providers, pd)
|
||||
providersMap[groupName] = pd
|
||||
} else {
|
||||
if groupOption.URL == "" || groupOption.Interval == 0 {
|
||||
//return nil, errMissHealthCheck
|
||||
if groupOption.URL == "" {
|
||||
groupOption.URL = "http://www.gstatic.com/generate_204"
|
||||
}
|
||||
|
||||
if groupOption.Interval == 0 {
|
||||
groupOption.Interval = 300
|
||||
}
|
||||
|
||||
|
|
|
@ -32,9 +32,7 @@ func (hc *HealthCheck) process() {
|
|||
ticker := time.NewTicker(time.Duration(hc.interval) * time.Second)
|
||||
|
||||
go func() {
|
||||
t := time.NewTicker(30 * time.Second)
|
||||
<-t.C
|
||||
t.Stop()
|
||||
time.Sleep(30 * time.Second)
|
||||
hc.check()
|
||||
}()
|
||||
|
||||
|
|
|
@ -84,9 +84,8 @@ func (pp *proxySetProvider) Proxies() []C.Proxy {
|
|||
return pp.proxies
|
||||
}
|
||||
|
||||
func (pp *proxySetProvider) ProxiesWithTouch() []C.Proxy {
|
||||
func (pp *proxySetProvider) Touch() {
|
||||
pp.healthCheck.touch()
|
||||
return pp.Proxies()
|
||||
}
|
||||
|
||||
func (pp *proxySetProvider) setProxies(proxies []C.Proxy) {
|
||||
|
@ -178,9 +177,8 @@ func (cp *compatibleProvider) Proxies() []C.Proxy {
|
|||
return cp.proxies
|
||||
}
|
||||
|
||||
func (cp *compatibleProvider) ProxiesWithTouch() []C.Proxy {
|
||||
func (cp *compatibleProvider) Touch() {
|
||||
cp.healthCheck.touch()
|
||||
return cp.Proxies()
|
||||
}
|
||||
|
||||
func stopCompatibleProvider(pd *CompatibleProvider) {
|
||||
|
|
|
@ -66,9 +66,7 @@ type Provider interface {
|
|||
type ProxyProvider interface {
|
||||
Provider
|
||||
Proxies() []C.Proxy
|
||||
// ProxiesWithTouch is used to inform the provider that the proxy is actually being used while getting the list of proxies.
|
||||
// Commonly used in DialContext and DialPacketConn
|
||||
ProxiesWithTouch() []C.Proxy
|
||||
Touch()
|
||||
HealthCheck()
|
||||
Version() uint
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue