diff options
Diffstat (limited to 'tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs')
-rw-r--r-- | tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs b/tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs index 451db3e..8a57c9f 100644 --- a/tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs +++ b/tools/Crupest.SecretTool/Crupest.SecretTool/SurgeConfigGenerator.cs @@ -1,9 +1,9 @@ namespace Crupest.SecretTool; -public class SurgeConfigGenerator(ProxyFile proxyFile, GeoSiteData geoSiteData) +public class SurgeConfigGenerator(ProxyFile proxyFile, GeoSiteData geoData) { - public ProxyFile ProxyFile { get; } = proxyFile; - public GeoSiteData GeoSiteData { get; } = geoSiteData; + public ProxyFile ProxyFile => proxyFile; + public GeoSiteData GeoData => geoData; private static string ToSurgeRuleString(HostMatchKind kind, string value) { @@ -19,39 +19,35 @@ public class SurgeConfigGenerator(ProxyFile proxyFile, GeoSiteData geoSiteData) return $"{ruleType},{value}"; } - private static List<HostMatchKind> DomainMatcherKinds { get; } = [ - HostMatchKind.DomainFull, HostMatchKind.DomainKeyword, - HostMatchKind.DomainRegex, HostMatchKind.DomainSuffix, - ]; + public static string GenerateSurgeRuleSetString(List<RoutingRuleMatcher> rules) + { + return string.Join('\n', rules.Select(r => ToSurgeRuleString(r.MatchKind, r.MatchString))); + } public string GenerateChinaRuleSet() { - var geoSites = ProxyFile.Config.Items.Where(i => i.Kind == HostMatchKind.GeoSite).Select(i => i.MatchString).ToList(); - var cnRules = GeoSiteData.GetEntriesRecursive(geoSites, DomainMatcherKinds, ["cn"]).ToList(); - return string.Join('\n', cnRules.Select(r => ToSurgeRuleString(r.Kind, r.Value))); + return GenerateSurgeRuleSetString(proxyFile.GetChinaRulesByGeoSite(GeoData)); } public string GenerateGlobalRuleSet() { - var geoSites = ProxyFile.Config.Items.Where(i => i.Kind == HostMatchKind.GeoSite).Select(i => i.MatchString).ToList(); - var nonCnRules = GeoSiteData.GetEntriesRecursive(geoSites, DomainMatcherKinds).Where(e => !e.Attributes.Contains("cn")).ToList(); - var domainRules = ProxyFile.Config.Items.Where(i => DomainMatcherKinds.Contains(i.Kind)).ToList(); - return string.Join('\n', [ - ..nonCnRules.Select(r => ToSurgeRuleString(r.Kind, r.Value)), - ..domainRules.Select(r => ToSurgeRuleString(r.Kind, r.MatchString)) - ]); + return GenerateSurgeRuleSetString(proxyFile.GetRulesFlattenGeoSite(geoData, true)); } - public static SurgeConfigGenerator Create(string proxyFilePath, bool clean, bool silent) + public static void GenerateTo(ProxyFile proxyFile, GeoSiteData geoSiteData, string cnPath, string globalPath, bool silent) { - var proxyFile = new ProxyFile(proxyFilePath); - var geoSiteData = GeoDataManager.Instance.GetOrCreateGeoSiteData(clean, silent); - return new SurgeConfigGenerator(proxyFile, geoSiteData); + var generator = new SurgeConfigGenerator(proxyFile, geoSiteData); + File.WriteAllText(cnPath, generator.GenerateChinaRuleSet()); + if (!silent) Console.WriteLine($"China rule set written to {cnPath}."); + File.WriteAllText(globalPath, generator.GenerateGlobalRuleSet()); + if (!silent) Console.WriteLine($"Global rule set written to {globalPath}."); } - public static void GenerateTo(string proxyFilePath, string cnPath, string globalPath, bool clean, bool silent) + public static void GenerateTo(string directory, string cnPath, string globalPath, bool clean, bool silent) { - var generator = Create(proxyFilePath, clean, silent); + var geoSiteData = GeoDataManager.Instance.GetOrCreateGeoSiteData(clean, silent); + var proxyFile = new ProxyFile(Path.Combine(directory, ToolConfig.ProxyConfigFileName)); + var generator = new SurgeConfigGenerator(proxyFile, geoSiteData); File.WriteAllText(cnPath, generator.GenerateChinaRuleSet()); if (!silent) Console.WriteLine($"China rule set written to {cnPath}."); File.WriteAllText(globalPath, generator.GenerateGlobalRuleSet()); |