public bool DownloadVersionSync(Mod thisMod, Version newVersion) { try { if (!ModManager.GlobalIndexFile.ContainsKey(thisMod.CurrentModData.ModID)) { throw new IndexFileException("Can't find index file entry for mod: " + thisMod.CurrentModData.ModID); } Dictionary <Version, IndexVersionData> allVerData = ModManager.GlobalIndexFile[thisMod.CurrentModData.ModID].AllVersions; if (!allVerData.ContainsKey(newVersion)) { throw new IndexFileException("Failed to find the requested version in the mod's index file: " + thisMod.CurrentModData.ModID + " v" + newVersion); } using (var wb = new WebClient()) { wb.Headers[HttpRequestHeader.UserAgent] = AMLUtils.UserAgent; string kosherFileName = AMLUtils.SanitizeFilename(allVerData[newVersion].Filename); string tempDownloadFolder = Path.Combine(Path.GetTempPath(), "AstroModLoader", "Downloads"); Directory.CreateDirectory(tempDownloadFolder); wb.DownloadFile(allVerData[newVersion].URL, Path.Combine(tempDownloadFolder, kosherFileName)); InstallModFromPath(Path.Combine(tempDownloadFolder, kosherFileName), out _, out int numMalformatted, out _); if (numMalformatted > 0) { throw new FormatException(numMalformatted + " mods were malformatted"); } ModManager.SortVersions(); ModManager.SortMods(); Directory.Delete(tempDownloadFolder, true); } } catch (Exception ex) { if (ex is WebException || ex is IOException || ex is IndexFileException) { Debug.WriteLine(ex.ToString()); return(false); } throw; } return(true); }