From d01a07aaf520c1c844d207f6e3d0bf974923b166 Mon Sep 17 00:00:00 2001 From: yanue Date: Mon, 24 Jun 2024 23:35:05 +0800 Subject: [PATCH] =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E5=8F=8A=E9=BB=98=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V2rayU/Base.lproj/PreferenceRouting.xib | 50 +++++++------- V2rayU/Preference/PreferencePac.swift | 13 ++++ V2rayU/v2ray/V2rayConfig.swift | 91 ++++++++++--------------- 3 files changed, 74 insertions(+), 80 deletions(-) diff --git a/V2rayU/Base.lproj/PreferenceRouting.xib b/V2rayU/Base.lproj/PreferenceRouting.xib index ddc48f4..9eb6963 100755 --- a/V2rayU/Base.lproj/PreferenceRouting.xib +++ b/V2rayU/Base.lproj/PreferenceRouting.xib @@ -1,8 +1,8 @@ - + - + @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -121,23 +121,23 @@ - + - + - - - + + + - - + + - - + + @@ -148,7 +148,7 @@ - + @@ -157,23 +157,23 @@ - + - + - - - + + + - - + + - - + + @@ -184,7 +184,7 @@ - + @@ -193,7 +193,7 @@ - + diff --git a/V2rayU/Preference/PreferencePac.swift b/V2rayU/Preference/PreferencePac.swift index 15b03cd..7ea2fba 100644 --- a/V2rayU/Preference/PreferencePac.swift +++ b/V2rayU/Preference/PreferencePac.swift @@ -30,7 +30,17 @@ final class PreferencePacViewController: NSViewController, PreferencePane { @IBOutlet var gfwPacListUrl: NSTextField! @IBOutlet var userRulesView: NSTextView! + + @objc private func configWindowWillClose(notification: Notification) { + print("configWindowWillClose-pac",notification) + guard let object = notification.object as? NSWindow else { + return + } + if object.title == "V2rayU" { + showDock(state: false) + } + } override func viewDidLoad() { super.viewDidLoad() // fix: https://github.com/sindresorhus/Preferences/issues/31 @@ -275,6 +285,9 @@ func getPacUserRules() -> String { if !userRuleTxt.contains("chat.openai.com") { userRuleTxt.append("\n||chat.openai.com") } + if !userRuleTxt.contains("chatgpt.com") { + userRuleTxt.append("\n||chatgpt.com") + } return userRuleTxt } diff --git a/V2rayU/v2ray/V2rayConfig.swift b/V2rayU/v2ray/V2rayConfig.swift index bdf2796..f952cbd 100644 --- a/V2rayU/v2ray/V2rayConfig.swift +++ b/V2rayU/v2ray/V2rayConfig.swift @@ -297,8 +297,8 @@ class V2rayConfig: NSObject { var rules: [V2rayRoutingSettingRule] = [] // rules - var ruleProxyDomain, ruleProxyIp, ruleDirectDomain, ruleDirectIp, ruleBlockDomain, ruleBlockIp: V2rayRoutingSettingRule? - + var ruleProxyDomain, ruleProxyIp, ruleDirectDomain, ruleDirectIp, ruleBlockDomain, ruleBlockIp, ruleDirectIpDefault, ruleDirectDomainDefault: V2rayRoutingSettingRule? + print("ruleBlockDomain",self.routingBlockDomains) // proxy if self.routingProxyDomains.count > 0 { ruleProxyDomain = getRoutingRule(outTag: "proxy", domain: self.routingProxyDomains, ip: nil, port: nil) @@ -317,7 +317,7 @@ class V2rayConfig: NSObject { // block if self.routingBlockDomains.count > 0 { - ruleBlockDomain = getRoutingRule(outTag: "block", domain: self.routingDirectDomains, ip: nil, port: nil) + ruleBlockDomain = getRoutingRule(outTag: "block", domain: self.routingBlockDomains, ip: nil, port: nil) } if self.routingBlockIps.count > 0 { ruleBlockIp = getRoutingRule(outTag: "block", domain: nil, ip: self.routingBlockIps, port: nil) @@ -327,79 +327,60 @@ class V2rayConfig: NSObject { case .RoutingRuleGlobal: break case .RoutingRuleLAN: - if ruleDirectIp == nil { - ruleDirectIp = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:private"], port: nil) - } else { - ruleDirectIp?.domain?.append("geoip:private") - } - if ruleDirectDomain == nil { - ruleDirectDomain = getRoutingRule(outTag: "direct", domain: ["localhost"], ip: nil, port: nil) - } else { - ruleDirectDomain?.domain?.append("localhost") - } + ruleDirectIpDefault = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:private"], port: nil) + ruleDirectDomainDefault = getRoutingRule(outTag: "direct", domain: ["localhost"], ip: nil, port: nil) break case .RoutingRuleCn: - if ruleDirectIp == nil { - ruleDirectIp = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:cn"], port: nil) - } else { - ruleDirectIp?.domain?.append("geoip:cn") - } - if ruleDirectDomain == nil { - ruleDirectDomain = getRoutingRule(outTag: "direct", domain: ["geosite:cn"], ip: nil, port: nil) - } else { - ruleDirectDomain?.domain?.append("geosite:cn") - } + ruleDirectIpDefault = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:cn"], port: nil) + ruleDirectDomainDefault = getRoutingRule(outTag: "direct", domain: ["geosite:cn"], ip: nil, port: nil) break case .RoutingRuleLANAndCn: - if ruleDirectIp == nil { - ruleDirectIp = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:cn","geoip:private"], port: nil) - } else { - ruleDirectIp?.ip?.append("geoip:private") - ruleDirectIp?.ip?.append("geoip:cn") - } - if ruleDirectDomain == nil { - ruleDirectDomain = getRoutingRule(outTag: "direct", domain: ["geosite:cn","localhost"], ip: nil, port: nil) - } else { - ruleDirectDomain?.domain?.append("geosite:cn") - ruleDirectDomain?.domain?.append("localhost") - } + ruleDirectIpDefault = getRoutingRule(outTag: "direct", domain: nil, ip: ["geoip:cn","geoip:private"], port: nil) + ruleDirectDomainDefault = getRoutingRule(outTag: "direct", domain: ["geosite:cn","localhost"], ip: nil, port: nil) break } - // 先block + // 域名阻断 -> 域名代理 -> 域名直连 -> IP阻断 -> IP代理 -> IP直连 的优先级进行匹配 + + // 域名阻断 if ruleBlockDomain != nil { ruleBlockDomain?.ip = nil rules.append(ruleBlockDomain!) } - if ruleBlockIp != nil { - ruleBlockIp?.domain = nil - rules.append(ruleBlockIp!) + // 域名代理 + if ruleProxyDomain != nil { + ruleProxyDomain?.ip = nil + rules.append(ruleProxyDomain!) } - // 然后直连 + // 域名直连 if ruleDirectDomain != nil { ruleDirectDomain!.ip = nil rules.append(ruleDirectDomain!) } + // IP阻断 + if ruleBlockIp != nil { + ruleBlockIp!.domain = nil + rules.append(ruleBlockIp!) + } + // IP代理 + if ruleProxyIp != nil { + ruleProxyIp!.domain = nil + rules.append(ruleProxyIp!) + } + // IP直连 if ruleDirectIp != nil { ruleDirectIp!.domain = nil rules.append(ruleDirectIp!) } - // 最后代理 - if ruleProxyDomain != nil { - ruleProxyDomain?.ip = nil - rules.append(ruleProxyDomain!) + // 如果匹配失败,则私有地址和大陆境内地址直连,否则走代理。 + if ruleDirectIpDefault != nil { + ruleDirectIpDefault!.domain = nil + rules.append(ruleDirectIpDefault!) } - if ruleProxyIp != nil { - ruleProxyIp?.domain = nil - rules.append(ruleProxyIp!) + if ruleDirectDomainDefault != nil { + ruleDirectDomainDefault!.ip = nil + rules.append(ruleDirectDomainDefault!) } - - // 默认按端口全部代理 - var ruleProxyPort = getRoutingRule(outTag: "proxy", domain: nil, ip: nil, port: "0-65535") - ruleProxyPort.outboundTag = "proxy" - ruleProxyPort.type = "field" - ruleProxyPort.port = "0-65535" -// rules.append(ruleProxyPort) - + // 默认全部代理, 无需设置规则 // 代理规则 self.routing.settings.rules = rules // set v2ray routing