/// <summary> /// Merge input list with part of EasyList and EasyPrivacy /// </summary> /// <param name="chinaList"></param> /// <param name="proxy"></param> /// <param name="patch"></param> /// <param name="lazyList"></param> public static void Merge(string chinaList, WebProxy proxy, bool patch, string lazyList = "adblock-lazy.txt") { if (!DownloadEasyList(proxy)) { return; } if (string.IsNullOrEmpty(lazyList)) { lazyList = "adblock-lazy.txt"; } // validate ChinaList to merge ChinaList cl = new ChinaList(chinaList); cl.Update(); if (cl.Validate() != 1) { return; } // load ChinaList content string chinaListContent = string.Empty; StringBuilder sBuilder = new StringBuilder(); using (StreamReader sr = new StreamReader(chinaList, Encoding.UTF8)) { chinaListContent = sr.ReadToEnd(); var headerIndex = chinaListContent.IndexOf(ChinaListConst.CHINALIST_LAZY_HEADER_MARK); chinaListContent = chinaListContent.Substring(headerIndex).Insert(0, ChinaListConst.CHINALIST_LAZY_HEADER); var index = chinaListContent.IndexOf(ChinaListConst.CHINALIST_END_MARK); chinaListContent = chinaListContent.Remove(index); sBuilder.Append(chinaListContent); } string easyListContent = TrimEasyList(); sBuilder.AppendLine("!-----------------------EasyList----------------------------"); sBuilder.AppendLine(easyListContent); string easyPrivacyContent = TrimEasyPrivacy(); sBuilder.AppendLine("!-----------------------EasyPrivacy----------------------------"); sBuilder.Append(easyPrivacyContent); //apply patch settings if (File.Exists(ChinaListConst.PATCH_FILE) && patch) { Console.WriteLine("use {0} to patch {1}", ChinaListConst.PATCH_FILE, lazyList); Configurations pConfig = GetConfigurations(); if (pConfig != null) { foreach (var item in pConfig.RemovedItems) { sBuilder.Replace(item + "\n", string.Empty); Console.WriteLine("remove filter {0}", item); } foreach (var item in pConfig.ModifyItems) { sBuilder.Replace(item.OldItem, item.NewItem); Console.WriteLine("replace filter {0} with {1}", item.OldItem, item.NewItem); } if (pConfig.NewItems.Count > 0) { sBuilder.AppendLine("!-----------------additional for ChinaList Lazy-------------"); } foreach (var item in pConfig.NewItems) { sBuilder.AppendLine(item); Console.WriteLine("add filter {0}", item); } // Merge ChinaList Privacy if (!string.IsNullOrEmpty(pConfig.Privacy)) { sBuilder.AppendLine("! *** adblock-privacy.txt"); var line = string.Empty; using (StreamReader sr = new StreamReader(pConfig.Privacy, Encoding.UTF8)) { while ((line = sr.ReadLine()) != null) { if (string.IsNullOrWhiteSpace(line) || line.StartsWith("!") || line.StartsWith("[")) { continue; } sBuilder.AppendLine(line); } } } } Console.WriteLine("Patch file end."); } sBuilder.AppendLine(string.Empty); sBuilder.AppendLine(ChinaListConst.CHINALIST_END_MARK); Console.WriteLine(string.Format("Merge {0}, {1} and {2}.", chinaList, ChinaListConst.EASYLIST, ChinaListConst.EASYPRIVACY)); Save(lazyList, sBuilder.ToString()); cl = new ChinaList(lazyList); cl.Update(); cl.Validate(); Console.WriteLine("End of merge and validate."); }
/// <summary> /// Merge input list with part of EasyList and EasyPrivacy /// </summary> /// <param name="chinaList"></param> /// <param name="proxy"></param> /// <param name="patch"></param> /// <param name="lazyList"></param> public static void Merge(string chinaList, WebProxy proxy, bool patch, string lazyList = "adblock-lazy.txt") { if (!DownloadEasyList(proxy)) return; if (string.IsNullOrEmpty(lazyList)) lazyList = "adblock-lazy.txt"; // validate ChinaList to merge ChinaList cl = new ChinaList(chinaList); cl.Update(); if (cl.Validate() != 1) return; // load ChinaList content string chinaListContent = string.Empty; StringBuilder sBuilder = new StringBuilder(); using (StreamReader sr = new StreamReader(chinaList, Encoding.UTF8)) { chinaListContent = sr.ReadToEnd(); var headerIndex = chinaListContent.IndexOf(ChinaListConst.CHINALIST_LAZY_HEADER_MARK); chinaListContent = chinaListContent.Substring(headerIndex).Insert(0, ChinaListConst.CHINALIST_LAZY_HEADER); var index = chinaListContent.IndexOf(ChinaListConst.CHINALIST_END_MARK); chinaListContent = chinaListContent.Remove(index); sBuilder.Append(chinaListContent); } string easyListContent = TrimEasyList(); sBuilder.AppendLine("!-----------------------EasyList----------------------------"); sBuilder.AppendLine(easyListContent); string easyPrivacyContent = TrimEasyPrivacy(); sBuilder.AppendLine("!-----------------------EasyPrivacy----------------------------"); sBuilder.Append(easyPrivacyContent); //apply patch settings if (File.Exists(ChinaListConst.PATCH_FILE) && patch) { Console.WriteLine("use {0} to patch {1}", ChinaListConst.PATCH_FILE, lazyList); Configurations pConfig = GetConfigurations(); if (pConfig != null) { foreach (var item in pConfig.RemovedItems) { sBuilder.Replace(item + "\n", string.Empty); Console.WriteLine("remove filter {0}", item); } foreach (var item in pConfig.ModifyItems) { sBuilder.Replace(item.OldItem, item.NewItem); Console.WriteLine("replace filter {0} with {1}", item.OldItem, item.NewItem); } if (pConfig.NewItems.Count > 0) sBuilder.AppendLine("!-----------------additional for ChinaList Lazy-------------"); foreach (var item in pConfig.NewItems) { sBuilder.AppendLine(item); Console.WriteLine("add filter {0}", item); } // Merge ChinaList Privacy if (!string.IsNullOrEmpty(pConfig.Privacy)) { sBuilder.AppendLine("! *** adblock-privacy.txt"); var line = string.Empty; using (StreamReader sr = new StreamReader(pConfig.Privacy, Encoding.UTF8)) { while ((line = sr.ReadLine()) != null) { if (string.IsNullOrWhiteSpace(line) || line.StartsWith("!") || line.StartsWith("[")) continue; sBuilder.AppendLine(line); } } } } Console.WriteLine("Patch file end."); } sBuilder.AppendLine(string.Empty); sBuilder.AppendLine(ChinaListConst.CHINALIST_END_MARK); Console.WriteLine(string.Format("Merge {0}, {1} and {2}.", chinaList, ChinaListConst.EASYLIST, ChinaListConst.EASYPRIVACY)); Save(lazyList, sBuilder.ToString()); cl = new ChinaList(lazyList); cl.Update(); cl.Validate(); Console.WriteLine("End of merge and validate."); }
private static void DispatcherTask(Arguments args) { if (args.IsTrue("help") || args.IsTrue("h")) { Console.WriteLine(ChinaListConst.HELP_INFO, DateTime.Now.ToString("yyyy")); } else if (args.IsTrue("version")) { Console.WriteLine("ABPUtils version: {0}", ChinaLists.GetVersion()); } else if (args.IsTrue("ns") || args.IsTrue("nslookup")) { var domain = args.Single("d"); if (string.IsNullOrEmpty(domain)) domain = args.Single("domain"); if (string.IsNullOrEmpty(domain)) { Console.WriteLine("wrong input domain."); return; } QueryResult result = null; if (string.IsNullOrEmpty(args.Single("dns"))) result = ChinaLists.DNSQuery(null, domain); else result = ChinaLists.DNSQuery(IPAddress.Parse(args.Single("dns")), domain); if (result == null) { Console.WriteLine("Query result is null."); } else { Console.Write(result.ToString()); } } else if (args.IsTrue("v") || args.IsTrue("validate")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) input = args.Single("input"); if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var chinaList = new ChinaList(input); chinaList.Validate(); } else if (args.IsTrue("u") || args.IsTrue("update")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) input = args.Single("input"); if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var chinaList = new ChinaList(input); chinaList.Update(); chinaList.Validate(); } else if (args.IsTrue("c") || args.IsTrue("check")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) input = args.Single("input"); if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var output = args.Single("o"); if (string.IsNullOrEmpty(output)) output = args.Single("output"); var dns = args.Single("dns"); if (string.IsNullOrEmpty(dns)) { ChinaLists.ValidateDomains(null, input, output); } else { ChinaLists.ValidateDomains(IPAddress.Parse(args.Single("dns")), input, output); } } else if (args.IsTrue("m") || args.IsTrue("merge")) { var input = string.Empty; input = args.Single("i"); if (string.IsNullOrEmpty(input)) input = args.Single("input"); if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } WebProxy proxy = null; var p = args.Single("p"); if (string.IsNullOrEmpty(p)) p = args.Single("proxy"); if (!string.IsNullOrEmpty(p)) { var temp = p.Split(':'); proxy = new WebProxy(temp[0], int.Parse(temp[1])); proxy.BypassProxyOnLocal = true; } var output = args.Single("o"); if (string.IsNullOrEmpty(output)) output = args.Single("output"); ChinaLists.Merge(input, proxy, args.IsTrue("patch"), output); } else if (args.IsTrue("conf")) { var input = string.Empty; input = args.Single("i"); if (string.IsNullOrEmpty(input)) input = args.Single("input"); if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } ChinaLists.CleanConfigurations(input, null); Console.WriteLine("Clean configuration file successful."); } else { Console.WriteLine("Wrong args"); } }
private static void DispatcherTask(Arguments args) { if (args.IsTrue("help") || args.IsTrue("h")) { Console.WriteLine(ChinaListConst.HELP_INFO, DateTime.Now.ToString("yyyy")); } else if (args.IsTrue("version")) { Console.WriteLine("ABPUtils version: {0}", ChinaLists.GetVersion()); } else if (args.IsTrue("ns") || args.IsTrue("nslookup")) { var domain = args.Single("d"); if (string.IsNullOrEmpty(domain)) { domain = args.Single("domain"); } if (string.IsNullOrEmpty(domain)) { Console.WriteLine("wrong input domain."); return; } QueryResult result = null; if (string.IsNullOrEmpty(args.Single("dns"))) { result = ChinaLists.DNSQuery(null, domain); } else { result = ChinaLists.DNSQuery(IPAddress.Parse(args.Single("dns")), domain); } if (result == null) { Console.WriteLine("Query result is null."); } else { Console.Write(result.ToString()); } } else if (args.IsTrue("v") || args.IsTrue("validate")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) { input = args.Single("input"); } if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var chinaList = new ChinaList(input); chinaList.Validate(); } else if (args.IsTrue("u") || args.IsTrue("update")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) { input = args.Single("input"); } if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var chinaList = new ChinaList(input); chinaList.Update(); chinaList.Validate(); } else if (args.IsTrue("c") || args.IsTrue("check")) { var input = args.Single("i"); if (string.IsNullOrEmpty(input)) { input = args.Single("input"); } if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } var output = args.Single("o"); if (string.IsNullOrEmpty(output)) { output = args.Single("output"); } var dns = args.Single("dns"); if (string.IsNullOrEmpty(dns)) { ChinaLists.ValidateDomains(null, input, output); } else { ChinaLists.ValidateDomains(IPAddress.Parse(args.Single("dns")), input, output); } } else if (args.IsTrue("m") || args.IsTrue("merge")) { var input = string.Empty; input = args.Single("i"); if (string.IsNullOrEmpty(input)) { input = args.Single("input"); } if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } WebProxy proxy = null; var p = args.Single("p"); if (string.IsNullOrEmpty(p)) { p = args.Single("proxy"); } if (!string.IsNullOrEmpty(p)) { var temp = p.Split(':'); proxy = new WebProxy(temp[0], int.Parse(temp[1])); proxy.BypassProxyOnLocal = true; } var output = args.Single("o"); if (string.IsNullOrEmpty(output)) { output = args.Single("output"); } ChinaLists.Merge(input, proxy, args.IsTrue("patch"), output); } else if (args.IsTrue("conf")) { var input = string.Empty; input = args.Single("i"); if (string.IsNullOrEmpty(input)) { input = args.Single("input"); } if (string.IsNullOrEmpty(input)) { Console.WriteLine("wrong input file."); return; } ChinaLists.CleanConfigurations(input, null); Console.WriteLine("Clean configuration file successful."); } else { Console.WriteLine("Wrong args"); } }