/// <summary> /// Do the actual checking for enabledness etc /// </summary> private static void UpdateFunc() { try { string text = Tools.GetHTML( "http://en.wikipedia.org/w/index.php?title=Wikipedia:AutoWikiBrowser/CheckPage/Version&action=raw"); GlobalVersionPage = text; int awbCurrentVersion = StringToVersion(Regex.Match(text, @"<!-- Current version: (.*?) -->").Groups[1].Value); int awbNewestVersion = StringToVersion(Regex.Match(text, @"<!-- Newest version: (.*?) -->").Groups[1].Value); if ((awbCurrentVersion > 4000) || (awbNewestVersion > 4000)) { int updaterVersion = StringToVersion(Regex.Match(text, @"<!-- Updater version: (.*?) -->").Groups[1].Value); FileVersionInfo awbVersionInfo = FileVersionInfo.GetVersionInfo(AWBDirectory + "AutoWikiBrowser.exe"); int awbFileVersion = StringToVersion(awbVersionInfo.FileVersion); Result = AWBEnabledStatus.Disabled; //Disabled till proven enabled if (awbFileVersion < awbCurrentVersion) { return; } foreach (Match m in EnabledVersions.Matches(text)) { if (StringToVersion(m.Groups[1].Value) == awbFileVersion) { Result = AWBEnabledStatus.Enabled; break; } } if (Result == AWBEnabledStatus.Disabled) { return; } if ((updaterVersion > 1400) && (updaterVersion > StringToVersion(FileVersionInfo.GetVersionInfo(AWBDirectory + "AWBUpdater.exe").FileVersion))) { Result |= AWBEnabledStatus.UpdaterUpdate; } if ((awbFileVersion >= awbCurrentVersion) && (awbFileVersion < awbNewestVersion)) { Result |= AWBEnabledStatus.OptionalUpdate; } } } catch { Result = AWBEnabledStatus.Error; } }
/// <summary> /// Checks to see if AWBUpdater.exe.new exists, if it does, replace it. /// If not, see if the version of AWB Updater is older than the version on the checkpage, and run AWBUpdater if so /// </summary> public static void UpdateAWB(Tools.SetProgress SetProgress) { SetProgress(22); Update(); SetProgress(29); }
public static void MakeLangSpecificRegexes() { NamespacesCaseInsensitive = new Dictionary <int, Regex>(); foreach (var p in Variables.NamespacesCaseInsensitive) { NamespacesCaseInsensitive[p.Key] = new Regex(p.Value, RegexOptions.Compiled); } TemplateStart = @"\{\{\s*(:?" + Variables.NamespacesCaseInsensitive[Namespace.Template] + ")?"; Category = new Regex(@"\[\[\s*" + Variables.NamespacesCaseInsensitive[Namespace.Category] + @"\s*(.*?)\s*(?:|\|([^\|\]]*))\s*\]\]", RegexOptions.Compiled); // Use allowed character list, then a file extension (these are mandatory on mediawiki), then optional closing ]] // this allows typo fixing and find&replace to operate on image descriptions // or, alternatively, an image filename has to have a pipe or ]] after it if using the [[Image: start, so just set first one to // @"[^\[\]\|\{\}]+\.[a-zA-Z]{3,4}\b(?:\s*(?:\]\]|\|)) // handles <gallery> and {{gallery}} too Images = new Regex( @"\[\[\s*" + Variables.NamespacesCaseInsensitive[Namespace.File] + @"[ \%\!""$&'\(\)\*,\-.\/0-9:;=\?@A-Z\\\^_`a-z~\x80-\xFF\+]+\.[a-zA-Z]{3,4}\b(?:\s*(?:\]\]|\|))?|<[Gg]allery\b([^>]*?)>[\s\S]*?</ ?[Gg]allery>|{{\s*[Gg]allery\s*(?:\|(?>[^\{\}]+|\{(?<DEPTH>)|\}(?<-DEPTH>))*(?(DEPTH)(?!)))?}}|\|\s*[a-zA-Z\d_ ]+\s*=[^\|{}]+?\.[a-zA-Z]{3,4}\s*(?=\||}})", RegexOptions.Compiled | RegexOptions.Singleline); FileNamespaceLink = new Regex(@"\[\[\s*" + Variables.NamespacesCaseInsensitive[Namespace.File] + @"((?>[^\[\]]+|\[\[(?<DEPTH>)|\]\](?<-DEPTH>))*(?(DEPTH)(?!)))\]\]", RegexOptions.Compiled); Stub = new Regex(@"{{.*?" + Variables.Stub + @"}}", RegexOptions.Compiled); PossiblyCommentedStub = new Regex( @"(<!-- ?\{\{[^}]*?" + Variables.Stub + @"\b\}\}.*?-->|\{\{[^}]*?" + Variables.Stub + @"\}\})", RegexOptions.Compiled); TemplateCall = new Regex(TemplateStart + @"\s*([^\]\|]*)\s*(.*)}}", RegexOptions.Compiled | RegexOptions.Singleline); LooseCategory = new Regex(@"\[\[[\s_]*" + Variables.NamespacesCaseInsensitive[Namespace.Category] + @"[\s_]*([^\|]*?)(|\|.*?)\]\]", RegexOptions.Compiled); LooseImage = new Regex(@"\[\[\s*?(" + Variables.NamespacesCaseInsensitive[Namespace.File] + @")\s*([^\|\]]+)(.*?)\]\]", RegexOptions.Compiled); Months = "(" + string.Join("|", Variables.MonthNames) + ")"; MonthsNoGroup = "(?:" + string.Join("|", Variables.MonthNames) + ")"; Dates = new Regex("^(0?[1-9]|[12][0-9]|3[01]) " + Months + "$", RegexOptions.Compiled); Dates2 = new Regex("^" + Months + " (0?[1-9]|[12][0-9]|3[01])$", RegexOptions.Compiled); InternationalDates = new Regex(@"\b([1-9]|[12][0-9]|3[01]) +" + Months + @" +([12]\d{3})\b", RegexOptions.Compiled); AmericanDates = new Regex(Months + @" +([1-9]|[12][0-9]|3[01]),? +([12]\d{3})\b", RegexOptions.Compiled); DayMonth = new Regex(@"\b([1-9]|[12][0-9]|3[01]) +" + Months + @"\b", RegexOptions.Compiled); MonthDay = new Regex(Months + @" +([1-9]|[12][0-9]|3[01])\b", RegexOptions.Compiled); DayMonthRangeSpan = new Regex(@"\b((?:[1-9]|[12][0-9]|3[01])(?:–|–|{{ndash}}|\/)(?:[1-9]|[12][0-9]|3[01])) " + Months + @"\b", RegexOptions.Compiled); MonthDayRangeSpan = new Regex(Months + @" ((?:[1-9]|[12][0-9]|3[01])(?:–|–|{{ndash}}|\/)(?:[1-9]|[12][0-9]|3[01]))\b", RegexOptions.Compiled); List <string> magic; string s = Variables.MagicWords.TryGetValue("redirect", out magic) ? string.Join("|", magic.ToArray()).Replace("#", "") : "REDIRECT"; Redirect = new Regex(@"#(?:" + s + @")\s*:?\s*\[\[\s*:?\s*([^\|\[\]]*?)\s*(\|.*?)?\]\]", RegexOptions.IgnoreCase); switch (Variables.LangCode) { case "ru": s = "([Dd]isambiguation|[Dd]isambig|[Нн]еоднозначность|[Мm]ногозначность)"; break; default: s = "([Dd]isamb(?:ig(?:uation)?)?|[Dd]ab|[Mm]athdab|[Ss]urname|(?:[Nn]umber|[Rr]oad?|[Hh]ospital|[Gg]eo|[Hh]n|[Ss]chool)dis|SIA|[Ll]etter-disambig|[Ss]hipindex|[Mm]ountainindex|[[Aa]irport disambig|[Cc]allsigndis|[Dd]isambig-cleanup)"; break; } Disambigs = new Regex(TemplateStart + s + @"\s*(?:\|[^{}]*?)?}}", RegexOptions.Compiled); if (Variables.MagicWords.TryGetValue("defaultsort", out magic)) { s = "(?i:" + string.Join("|", magic.ToArray()).Replace(":", "") + ")"; } else { s = (Variables.LangCode == "en") ? "(?:(?i:defaultsort(key|CATEGORYSORT)?))" : "(?i:defaultsort)"; } Defaultsort = new Regex(TemplateStart + s + @"\s*[:|](?<key>(?>[^\{\}]+|\{(?<DEPTH>)|\}(?<-DEPTH>))*(?(DEPTH)(?!))|[^\}\r\n]*?)(?:}}|\r|\n)", RegexOptions.Compiled | RegexOptions.ExplicitCapture); //if (Variables.URL == Variables.URLLong) // s = Regex.Escape(Variables.URL); //else //{ int pos = Tools.FirstDifference(Variables.URL, Variables.URLLong); s = Regex.Escape(Variables.URLLong.Substring(0, pos)); s += "(?:" + Regex.Escape(Variables.URLLong.Substring(pos)) + @"index\.php(?:\?title=|/)|" + Regex.Escape(Variables.URL.Substring(pos)) + "/wiki/" + ")"; //} ExtractTitle = new Regex("^" + s + "([^?&]*)$", RegexOptions.Compiled); string cat = Variables.NamespacesCaseInsensitive[Namespace.Category], img = Variables.NamespacesCaseInsensitive[Namespace.Image]; EmptyLink = new Regex("\\[\\[(:?" + cat + "|" + img + "|)(|" + img + "|" + cat + "|.*?)\\]\\]", RegexOptions.IgnoreCase | RegexOptions.Compiled); EmptyTemplate = new Regex(@"{{(" + Variables.NamespacesCaseInsensitive[Namespace.Template] + @")?[|\s]*}}", RegexOptions.IgnoreCase | RegexOptions.Compiled); // set orphan, wikify templates string orphantemplate = ""; switch (Variables.LangCode) { case "sv": orphantemplate = @"Föräldralös"; Wikify = new Regex(@"{{\s*Ickewiki(?:\s*\|\s*(date={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}|.*?))?}}", RegexOptions.Compiled | RegexOptions.IgnoreCase); break; default: orphantemplate = "Orphan"; Wikify = new Regex(@"({{\s*Wikify(?:\s*\|\s*(date={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}|.*?))?}}|(?<={{\s*(?:Article|Multiple)\s*issues\b[^{}]*?)\|\s*wikify\s*=[^{}\|]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase); break; } Orphan = new Regex(@"{{\s*" + orphantemplate + @"(?:\s*\|\s*(date={{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}|.*?))?}}", RegexOptions.Compiled | RegexOptions.IgnoreCase); }