From 460826b1eeff96742354a913dacbceee864f466e Mon Sep 17 00:00:00 2001 From: Space Time Date: Wed, 27 Nov 2024 21:45:08 +0800 Subject: [PATCH] =?UTF-8?q?1.1.3=20->=201.1.4=20=E7=AC=AC19=E6=AC=A1?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Consts/MainMultilangConst.zh.resx | 6 ++-- Wins/MainWin.xaml.cs | 48 +++++++++++++++++-------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/Consts/MainMultilangConst.zh.resx b/Consts/MainMultilangConst.zh.resx index 3e86524..7e55c83 100644 --- a/Consts/MainMultilangConst.zh.resx +++ b/Consts/MainMultilangConst.zh.resx @@ -256,7 +256,7 @@ 浏览器 - 配置文件中含有语法错误,配置无法识别 + 配置文件含有语法错误,部分配置无法识别 就知道你会点,但其实什么事情都不会发生的。嘻嘻 @@ -280,7 +280,7 @@ 不,求你杀了我,我...控制不住了... - 伪造规则中含有语法错误,部分规则无法识别,是否仍然继续? + 伪造规则含有语法错误,部分规则无法识别,是否仍然继续? 启动前将关闭所选浏览器的所有进程,是否继续? @@ -295,7 +295,7 @@ 本地 80 端口被占用,这可能导致 http 连接无法自动跳转到 https,是否继续? - 本地 443 端口被占用,这可能导致全局伪造无法正常生效,是否继续? + 本地 443 端口被占用,这可能导致全局伪造无法正常工作,是否继续? 上游规则有更新可用,需要更新吗?否则只为你打开上游规则网页 diff --git a/Wins/MainWin.xaml.cs b/Wins/MainWin.xaml.cs index 22179ac..92c6549 100644 --- a/Wins/MainWin.xaml.cs +++ b/Wins/MainWin.xaml.cs @@ -47,8 +47,6 @@ public partial class MainWin : Window private static string? MihomoConfs; private static string? ExtraMihomoConfs; - private static bool IsCealHostError = false; - private static int NginxHttpPort = 80; private static int NginxHttpsPort = 443; private static int MihomoMixedPort = 7880; @@ -158,7 +156,7 @@ public partial class MainWin : Window { HoldButtonTimer?.Stop(); - if ((IsCealHostError && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || + if ((CealHostRulesDict.ContainsValue(null!) && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || (MessageBox.Show(MainConst._KillBrowserProcessPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes)) return; @@ -190,7 +188,7 @@ public partial class MainWin : Window if (!MainPres!.IsNginxRunning) { - if ((IsCealHostError && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || + if ((CealHostRulesDict.ContainsValue(null!) && MessageBox.Show(MainConst._HostErrorPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || (NginxHttpPort != 80 && MessageBox.Show(MainConst._NginxHttpPortOccupiedPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || (NginxHttpsPort != 443 && MessageBox.Show(MainConst._NginxHttpsPortOccupiedPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || (MessageBox.Show(MainConst._LaunchProxyPrompt, string.Empty, MessageBoxButton.YesNo) != MessageBoxResult.Yes) || @@ -366,12 +364,21 @@ public partial class MainWin : Window private void EditConfButton_Click(object sender, RoutedEventArgs e) { Button? senderButton = sender as Button; + string confPath; - string confPath = senderButton == EditHostsConfButton ? MainConst.HostsConfPath : - senderButton == EditNginxConfButton ? MainConst.NginxConfPath : MainConst.MihomoConfPath; + if (senderButton == EditHostsConfButton) + { + confPath = MainConst.HostsConfPath; - if (!File.Exists(confPath)) - File.Create(confPath).Dispose(); + File.SetAttributes(MainConst.HostsConfPath, File.GetAttributes(MainConst.HostsConfPath) & ~FileAttributes.ReadOnly); + } + else + { + confPath = senderButton == EditNginxConfButton ? MainConst.NginxConfPath : MainConst.MihomoConfPath; + + if (!File.Exists(confPath)) + File.Create(confPath).Dispose(); + } ProcessStartInfo processStartInfo = new(confPath) { UseShellExecute = true }; Process.Start(processStartInfo); @@ -490,10 +497,12 @@ public partial class MainWin : Window try { CealHostRulesDict[cealHostName] = []; - string cealHostRulesFragments = string.Empty; - string cealHostResolverRulesFragments = string.Empty; using FileStream cealHostStream = new(e.FullPath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete); + + if (cealHostStream.Length == 0) + return; + JsonDocumentOptions cealHostOptions = new() { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip }; JsonElement cealHostArray = JsonDocument.Parse(cealHostStream, cealHostOptions).RootElement; @@ -517,25 +526,19 @@ public partial class MainWin : Window if (cealHostDomainPairs.Count != 0) CealHostRulesDict[cealHostName].Add((cealHostDomainPairs, cealHostSni, cealHostIp)); } - - IsCealHostError = false; - } - catch - { - CealHostRulesDict.Remove(cealHostName); - - IsCealHostError = true; } + catch { CealHostRulesDict[cealHostName] = null!; } finally { string hostRules = string.Empty; string hostResolverRules = string.Empty; int nullSniNum = 0; - foreach (List<(List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp)> cealHostRules in CealHostRulesDict.Values) - foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules) + foreach (KeyValuePair cealHostDomainPairs, string? cealHostSni, string cealHostIp)>> cealHostRulesPair in CealHostRulesDict) + { + foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRulesPair.Value ?? []) { - string cealHostSniWithoutNull = cealHostSni ?? $"{cealHostName}{CealHostRulesDict[cealHostName].Count + ++nullSniNum}"; + string cealHostSniWithoutNull = cealHostSni ?? $"{cealHostRulesPair.Key}{(cealHostRulesPair.Value ?? []).Count + ++nullSniNum}"; bool isValidCealHostDomainExist = false; foreach ((string cealHostIncludeDomain, string cealHostExcludeDomain) in cealHostDomainPairs) @@ -550,6 +553,7 @@ public partial class MainWin : Window if (isValidCealHostDomainExist) hostResolverRules += $"MAP {cealHostSniWithoutNull} {cealHostIp},"; } + } CealArgs = @$"--host-rules=""{hostRules.TrimEnd(',')}"" --host-resolver-rules=""{hostResolverRules.TrimEnd(',')}"" --test-type --ignore-certificate-errors"; @@ -600,7 +604,7 @@ public partial class MainWin : Window .AddOrUpdate($"http:server[{serverIndex}]:return", "https://$host$request_uri"); foreach (List<(List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp)> cealHostRules in CealHostRulesDict.Values) - foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules) + foreach ((List<(string cealHostIncludeDomain, string cealHostExcludeDomain)> cealHostDomainPairs, string? cealHostSni, string cealHostIp) in cealHostRules ?? []) { string serverName = "~";