public SetProgress ( int completed, int total ) : void | ||
completed | int | |
total | int | |
return | void |
private void BypassRedirectsFunc() {//checks links to make them bypass redirects and (TODO) disambigs string link = ""; string article = ""; Regex wikiLinksOnly = new Regex("\\[\\[([^:|]*?)\\]\\]", RegexOptions.Compiled); Dictionary <string, string> knownLinks = new Dictionary <string, string>(); if (HasUI) { ui.Worker = Thread.CurrentThread; } try { if (HasUI) { ui.Status = "Loading links"; } MatchCollection simple = wikiLinksOnly.Matches(strParam); MatchCollection piped = WikiRegexes.PipedWikiLink.Matches(strParam); if (HasUI) { ui.Status = "Processing links"; ui.SetProgress(0, simple.Count + piped.Count); } int n = 0; foreach (Match m in simple) { //make link link = m.Value; article = m.Groups[1].Value; if (!knownLinks.ContainsKey(Tools.TurnFirstToUpper(article))) { //get text string text = ""; try { text = Tools.GetArticleText(article); } catch { continue; } string dest = article; //test if redirect if (Tools.IsRedirect(text)) { dest = HttpUtility.UrlDecode(Tools.RedirectTarget(text).Replace("_", " ")); string directLink = "[[" + dest + "|" + article + "]]"; strParam = strParam.Replace(link, directLink); } knownLinks.Add(Tools.TurnFirstToUpper(article), Tools.TurnFirstToUpper(dest)); } else if (knownLinks[Tools.TurnFirstToUpper(article)] != Tools.TurnFirstToUpper(article)) { string directLink = "[[" + knownLinks[Tools.TurnFirstToUpper(article)] + "|" + article + "]]"; strParam = strParam.Replace(link, directLink); } n++; if (HasUI) { ui.SetProgress(n, simple.Count + piped.Count); } } foreach (Match m in piped) { //make link link = m.Value; article = m.Groups[1].Value; string linkText = m.Groups[2].Value; if (!knownLinks.ContainsKey(Tools.TurnFirstToUpper(article))) { //get text string text = ""; try { text = Tools.GetArticleText(article); } catch { continue; } string dest = article; //test if redirect if (Tools.IsRedirect(text)) { dest = HttpUtility.UrlDecode(Tools.RedirectTarget(text).Replace("_", " ")); string directLink = "[[" + dest + "|" + linkText + "]]"; strParam = strParam.Replace(link, directLink); } knownLinks.Add(Tools.TurnFirstToUpper(article), Tools.TurnFirstToUpper(dest)); } else if (knownLinks[Tools.TurnFirstToUpper(article)] != Tools.TurnFirstToUpper(article)) { string directLink = "[[" + knownLinks[Tools.TurnFirstToUpper(article)] + "|" + linkText + "]]"; strParam = strParam.Replace(link, directLink); } n++; if (HasUI) { ui.SetProgress(n, simple.Count + piped.Count); } } Result = strParam; InvokeOnComplete(); //ui.Close(); } catch (Exception e) { //ui.Close(); Error = e; } }
/// <summary> /// checks wikilinks to make them bypass redirects /// </summary> private void BypassRedirectsFunc() { // checks links to make them bypass redirects and (TODO) disambigs Dictionary <string, string> knownLinks = new Dictionary <string, string>(); if (HasUI) { UI.Worker = Thread.CurrentThread; } IApiEdit editor = ObjParam1 as IApiEdit; if (editor == null) { Result = ""; InvokeOnError(); return; } try { if (HasUI) { UI.Status = "Loading links"; } MatchCollection links = WikiRegexes.WikiLinksOnlyPossiblePipe.Matches(StrParam); if (HasUI) { UI.Status = "Processing links"; UI.SetProgress(0, links.Count); } int n = 0; foreach (Match m in links) { string link = m.Value; string article = m.Groups[1].Value.TrimStart(new[] { ':' }); // if the link is unpiped, use the target as the new link's pipe text string linkText = (!string.IsNullOrEmpty(m.Groups[2].Value)) ? m.Groups[2].Value : article; string ftu = Tools.TurnFirstToUpper(article); string value; if (!knownLinks.TryGetValue(ftu, out value)) { // get text string text; try { text = editor.Open(article, false); //TODO:Resolve redirects betterer } catch { continue; } string dest = article; // test if redirect if (Tools.IsRedirect(text)) { dest = HttpUtility.UrlDecode(Tools.RedirectTarget(text).Replace("_", " ")); string directLink = "[[" + dest + "|" + linkText + "]]"; StrParam = StrParam.Replace(link, directLink); } knownLinks.Add(ftu, Tools.TurnFirstToUpper(dest)); } else if (value != ftu) { string directLink = "[[" + value + "|" + linkText + "]]"; StrParam = StrParam.Replace(link, directLink); } n++; if (HasUI) { UI.SetProgress(n, links.Count); } } Result = StrParam; InvokeOnComplete(); // UI.Close(); } catch (Exception e) { // UI.Close(); ErrorException = e; InvokeOnError(); } }