private void DownloadCurse(Addon addon) { // Number of characters to seek past when parsing the download location of the zip file const int hrefPadding = 11; string download = "data-href"; string content; char c = 'a'; string url = addon.URL + "/download"; try { using (WebClient client = new WebClient()) { content = client.DownloadString(url); } } catch { MessageBox.Show($"{addon.Name} failed to download, skipping to next addon", "Addon Manager"); return; } int i = content.IndexOf(download) + hrefPadding; string test = content.Substring(i); StringBuilder sb = new StringBuilder(); while (true) { c = content[i]; if (c == '"') { break; } sb.Append(c); i++; } url = sb.ToString(); string pattern = @"(\d+\.\d+\.\d+)"; Regex re = new Regex(pattern); MatchCollection matches = re.Matches(url); string version; if (matches.Count > 0) { version = matches[0].ToString(); } else { version = String.Empty; } if (SkipUpdate(addon, version)) { return; } GetAddonZip(url, addon.Name); }