private void http_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { try { File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), e.Result, Encoding.UTF8); List<string> lines = ParseResult(e.Result); if (File.Exists(PACServer.USER_RULE_FILE)) { string local = FileManager.NonExclusiveReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); using (var sr = new StringReader(local)) { foreach (var rule in sr.NonWhiteSpaceLines()) { if (rule.BeginWithAny(IgnoredLineBegins)) continue; lines.Add(rule); } } } string abpContent; if (File.Exists(PACServer.USER_ABP_FILE)) { abpContent = FileManager.NonExclusiveReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); } else { abpContent = Utils.UnGzip(Resources.abp_js); } abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); if (File.Exists(PACServer.PAC_FILE)) { string original = FileManager.NonExclusiveReadAllText(PACServer.PAC_FILE, Encoding.UTF8); if (original == abpContent) { UpdateCompleted(this, new ResultEventArgs(false)); return; } } File.WriteAllText(PACServer.PAC_FILE, abpContent, Encoding.UTF8); if (UpdateCompleted != null) { UpdateCompleted(this, new ResultEventArgs(true)); } } catch (Exception ex) { if (Error != null) { Error(this, new ErrorEventArgs(ex)); } } }
public static List<string> ParseResult(string response) { byte[] bytes = Convert.FromBase64String(response); string content = Encoding.ASCII.GetString(bytes); List<string> valid_lines = new List<string>(); using (var sr = new StringReader(content)) { foreach (var line in sr.NonWhiteSpaceLines()) { if (line.BeginWithAny(IgnoredLineBegins)) continue; valid_lines.Add(line); } } return valid_lines; }
private static void Init(string res) { using (var sr = new StringReader(res)) { foreach (var line in sr.NonWhiteSpaceLines()) { if (line[0] == '#') continue; var pos = line.IndexOf('='); if (pos < 1) continue; _strings[line.Substring(0, pos)] = line.Substring(pos + 1); } } }
static I18N() { Strings = new Dictionary<string, string>(); if (CultureInfo.CurrentCulture.IetfLanguageTag.StartsWith("zh", StringComparison.OrdinalIgnoreCase)) { using (var sr = new StringReader(Resources.cn)) { foreach (var line in sr.NonWhiteSpaceLines()) { if (line[0] == '#') continue; var pos = line.IndexOf('='); if (pos < 1) continue; Strings[line.Substring(0, pos)] = line.Substring(pos + 1); } } } }
private void pacServer_UserRuleFileChanged(object sender, EventArgs e) { // TODO: this is a dirty hack. (from code GListUpdater.http_DownloadStringCompleted()) if (!File.Exists(Utils.GetTempPath("gfwlist.txt"))) { UpdatePACFromGFWList(); return; } List<string> lines = GFWListUpdater.ParseResult(File.ReadAllText(Utils.GetTempPath("gfwlist.txt"))); if (File.Exists(PACServer.USER_RULE_FILE)) { string local = File.ReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); using (var sr = new StringReader(local)) { foreach (var rule in sr.NonWhiteSpaceLines()) { if (rule.BeginWithAny(IgnoredLineBegins)) continue; lines.Add(rule); } } } string abpContent; if (File.Exists(PACServer.USER_ABP_FILE)) { abpContent = File.ReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); } else { abpContent = Utils.UnGzip(Resources.abp_js); } abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); if (File.Exists(PACServer.PAC_FILE)) { string original = File.ReadAllText(PACServer.PAC_FILE, Encoding.UTF8); if (original == abpContent) { return; } } File.WriteAllText(PACServer.PAC_FILE, abpContent, Encoding.UTF8); }