public static async Task <Build> LoadBuild(string program, string buildConfigHash, string cdnConfigHash) { Logger.WriteLine("Loading build " + buildConfigHash + ".."); var build = new Build(); build.buildConfig = await Config.GetBuildConfig(buildConfigHash); build.cdnConfig = await Config.GetCDNConfig(cdnConfigHash); Logger.WriteLine("Loading encoding.."); if (build.buildConfig.encodingSize == null || build.buildConfig.encodingSize.Count() < 2) { await NGDP.GetEncoding(build.buildConfig.encoding[1].ToHexString(), 0); } else { await NGDP.GetEncoding(build.buildConfig.encoding[1].ToHexString(), int.Parse(build.buildConfig.encodingSize[1])); } Logger.WriteLine("Loading root.."); if (NGDP.encodingDictionary.TryGetValue(build.buildConfig.root, out var rootEntry)) { build.root_cdn = rootEntry; } else { throw new KeyNotFoundException("Root encoding key not found!"); } build.root = await NGDP.GetRoot(build.root_cdn.ToHexString().ToLower(), true); build.loadedAt = DateTime.Now; Logger.WriteLine("Loading indexes.."); NGDP.GetIndexes(Path.Combine(CDNCache.cacheDir, "tpr/wow"), build.cdnConfig.archives); Logger.WriteLine("Done loading build " + buildConfigHash); return(build); }
public static void LoadBuild(string program, string buildConfigHash, string cdnConfigHash) { Logger.WriteLine("Loading build " + buildConfigHash + ".."); var unloadList = new List <string>(); if (buildDictionary.Count > 15) { Logger.WriteLine("More than 15 builds loaded. Unloading all builds!"); buildDictionary.Clear(); } foreach (var loadedBuild in buildDictionary) { if (loadedBuild.Value.loadedAt < DateTime.Now.AddHours(-1)) { Logger.WriteLine("Unloading build " + loadedBuild.Key + " as it its been loaded over an hour ago."); unloadList.Add(loadedBuild.Key); } } foreach (var unloadBuild in unloadList) { buildDictionary.Remove(unloadBuild); } var build = new Build(); var cdnsFile = NGDP.GetCDNs(program); build.buildConfig = Config.GetBuildConfig(Path.Combine(CDN.cacheDir, cdnsFile.entries[0].path), buildConfigHash); build.cdnConfig = Config.GetCDNConfig(Path.Combine(CDN.cacheDir, cdnsFile.entries[0].path), cdnConfigHash); Logger.WriteLine("Loading encoding.."); if (build.buildConfig.encodingSize == null || build.buildConfig.encodingSize.Count() < 2) { build.encoding = NGDP.GetEncoding("http://" + cdnsFile.entries[0].hosts[0] + "/" + cdnsFile.entries[0].path + "/", build.buildConfig.encoding[1].ToHexString(), 0); } else { build.encoding = NGDP.GetEncoding("http://" + cdnsFile.entries[0].hosts[0] + "/" + cdnsFile.entries[0].path + "/", build.buildConfig.encoding[1].ToHexString(), int.Parse(build.buildConfig.encodingSize[1])); } Logger.WriteLine("Loading root.."); string rootHash; if (build.encoding.aEntries.TryGetValue(build.buildConfig.root, out var rootEntry)) { rootHash = rootEntry.eKey.ToHexString().ToLower(); } else { throw new KeyNotFoundException("Root encoding key not found!"); } build.root = NGDP.GetRoot("http://" + cdnsFile.entries[0].hosts[0] + "/" + cdnsFile.entries[0].path + "/", rootHash, true); build.loadedAt = DateTime.Now; Logger.WriteLine("Loading indexes.."); NGDP.GetIndexes(Path.Combine(CDN.cacheDir, cdnsFile.entries[0].path), build.cdnConfig.archives); if (buildDictionary.ContainsKey(buildConfigHash)) { Logger.WriteLine("Build was already loaded while this iteration was loading, not adding to cache!"); } else { buildDictionary.Add(buildConfigHash, build); Logger.WriteLine("Loaded build " + build.buildConfig.buildName + "!"); } }