mirror of
https://github.com/MetaCubeX/ClashMetaForAndroid.git
synced 2025-02-16 23:03:14 +03:00
optimize for meta
This commit is contained in:
parent
1de0c80e40
commit
41127e9312
@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func forEachProviders(rawCfg *config.RawConfig, fun func(index int, total int, key string, provider map[string]any)) {
|
||||
total := len(rawCfg.ProxyProvider)
|
||||
total := len(rawCfg.ProxyProvider) + len(rawCfg.RuleProvider)
|
||||
index := 0
|
||||
|
||||
for k, v := range rawCfg.ProxyProvider {
|
||||
@ -17,10 +17,20 @@ func forEachProviders(rawCfg *config.RawConfig, fun func(index int, total int, k
|
||||
|
||||
index++
|
||||
}
|
||||
|
||||
for k, v := range rawCfg.RuleProvider {
|
||||
fun(index, total, k, v)
|
||||
|
||||
index++
|
||||
}
|
||||
}
|
||||
|
||||
func destroyProviders(cfg *config.Config) {
|
||||
for _, p := range cfg.Providers {
|
||||
_ = p.(io.Closer).Close()
|
||||
}
|
||||
|
||||
for _, p := range cfg.RuleProviders {
|
||||
_ = p.(io.Closer).Close()
|
||||
}
|
||||
}
|
||||
|
@ -3,14 +3,18 @@
|
||||
package tunnel
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
P "github.com/Dreamacro/clash/adapter/provider"
|
||||
"github.com/Dreamacro/clash/constant/provider"
|
||||
"github.com/Dreamacro/clash/log"
|
||||
"github.com/Dreamacro/clash/tunnel"
|
||||
)
|
||||
|
||||
var ErrInvalidType = errors.New("invalid type")
|
||||
|
||||
type Provider struct {
|
||||
Name string `json:"name"`
|
||||
VehicleType string `json:"vehicleType"`
|
||||
@ -19,9 +23,18 @@ type Provider struct {
|
||||
}
|
||||
|
||||
func QueryProviders() []*Provider {
|
||||
r := tunnel.RuleProviders()
|
||||
p := tunnel.Providers()
|
||||
|
||||
providers := make([]provider.Provider, 0, len(p))
|
||||
providers := make([]provider.Provider, 0, len(r)+len(p))
|
||||
|
||||
for _, rule := range r {
|
||||
if rule.VehicleType() == provider.Compatible {
|
||||
continue
|
||||
}
|
||||
|
||||
providers = append(providers, rule)
|
||||
}
|
||||
|
||||
for _, proxy := range p {
|
||||
if proxy.VehicleType() == provider.Compatible {
|
||||
@ -51,11 +64,29 @@ func QueryProviders() []*Provider {
|
||||
return result
|
||||
}
|
||||
|
||||
func UpdateProvider(_ string, name string) error {
|
||||
p, ok := tunnel.Providers()[name]
|
||||
if !ok {
|
||||
return fmt.Errorf("%s not found", name)
|
||||
func UpdateProvider(t string, name string) error {
|
||||
err := ErrInvalidType
|
||||
|
||||
switch t {
|
||||
case "Rule":
|
||||
p := tunnel.RuleProviders()[name]
|
||||
if p == nil {
|
||||
return fmt.Errorf("%s not found", name)
|
||||
}
|
||||
|
||||
err = p.Update()
|
||||
case "Proxy":
|
||||
p := tunnel.Providers()[name]
|
||||
if p == nil {
|
||||
return fmt.Errorf("%s not found", name)
|
||||
}
|
||||
|
||||
err = p.Update()
|
||||
}
|
||||
|
||||
return p.Update()
|
||||
if err != nil {
|
||||
log.Warnln("Updating provider %s: %s", name, err.Error())
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
@ -17,6 +17,8 @@ data class Proxy(
|
||||
enum class Type(val group: Boolean) {
|
||||
Direct(false),
|
||||
Reject(false),
|
||||
Compatible(false),
|
||||
Pass(false),
|
||||
|
||||
Shadowsocks(false),
|
||||
ShadowsocksR(false),
|
||||
@ -24,7 +26,10 @@ data class Proxy(
|
||||
Socks5(false),
|
||||
Http(false),
|
||||
Vmess(false),
|
||||
Vless(false),
|
||||
Trojan(false),
|
||||
Hysteria(false),
|
||||
|
||||
|
||||
Relay(true),
|
||||
Selector(true),
|
||||
|
Loading…
x
Reference in New Issue
Block a user