/// <summary> /// Downloads all files asynchronously. /// </summary> public async Task DownloadAllAsync() { var skillTreeTask = DownloadSkillTreeToFileAsync(); var treeString = await skillTreeTask; var inTree = new PassiveTreeViewModel(treeString); var spritesTask = DownloadSkillNodeSpritesAsync(inTree); var assetsTask = DownloadAssetsAsync(inTree); await Task.WhenAll(spritesTask, assetsTask); }
/// <summary> /// Downloads the asset images mentioned in the provided tree asynchronously. /// Existing files are not overriden. /// </summary> /// <param name="inTree"></param> /// <param name="reportProgress">If specified, it is called to set this method's progress as a value /// from 0 to 1.</param> /// <returns></returns> internal async Task DownloadAssetsAsync(PassiveTreeViewModel inTree, Action <double>?reportProgress = null) { Directory.CreateDirectory(_tempAssetsPath); var zoomLevel = inTree.ImageZoomLevels[inTree.MaxImageZoomLevelIndex].ToString(CultureInfo.InvariantCulture); var perAssetProgress = 1.0 / inTree.Assets.Count; var progress = 0.0; foreach (var asset in inTree.Assets) { var path = _tempAssetsPath + asset.Key + ".png"; var url = asset.Value.GetValueOrDefault(zoomLevel, () => asset.Value.Values.First()); await DownloadAsync(url, path); progress += perAssetProgress; reportProgress?.Invoke(progress); } }
/// <summary> /// Downloads the node sprite images mentioned in the provided tree asynchronously. /// Existing files are not overriden. /// </summary> /// <param name="inTree"></param> /// <param name="reportProgress">If specified, it is called to set this method's progress as a value /// from 0 to 1.</param> /// <returns></returns> internal async Task DownloadSkillNodeSpritesAsync(PassiveTreeViewModel inTree, Action <double>?reportProgress = null) { Directory.CreateDirectory(_tempAssetsPath); var perSpriteProgress = 1.0 / inTree.SkillSprites.Count; var progress = 0.0; foreach (var obj in inTree.SkillSprites) { var sprite = obj.Value[inTree.MaxImageZoomLevelIndex]; var path = _tempAssetsPath + sprite.FileName; var url = SpriteUrl + sprite.FileName; if (path.Contains('?')) { path = path.Remove(path.IndexOf('?')); } await DownloadAsync(url, path); progress += perSpriteProgress; reportProgress?.Invoke(progress); } }