private void Window_Loaded(object sender, RoutedEventArgs e) { PushCursor(Cursors.Wait); HideAllViewers(); new Thread(() => { _assetIndex = new AssetIndex(_poeDirectory); var assetFiles = _assetIndex.FindFiles(x => true); foreach (var assetFile in assetFiles) { var exploded = assetFile.Name.Split(Path.AltDirectorySeparatorChar); if (exploded.Length > 1) { _fileDirectories[RootNodeName].Add(exploded[0]); } for (int i = 0; i < exploded.Length; i++) { var dir = string.Join(Path.AltDirectorySeparatorChar, exploded[..i]);
/// <summary> /// リストからアセットをダウンロードします。 /// </summary> /// <param name="index">ダウンロードするアセットのリスト</param> /// <param name="assetsDirectory">アセットディレクトリの場所</param> /// <param name="onProgressChanged">進捗状況が変化したときのイベントハンドラ</param> public static void DownloadAssets(this AssetIndex index, string assetsDirectory, MinecraftProgressEventHandler onProgressChanged = null) { var objects = index.Objects; var keys = objects.Keys.ToArray(); for (var i = 0; i < objects.Count; i++) { var name = keys[i]; var obj = objects[name]; var hash = obj.Hash; onProgressChanged?.Invoke( new MinecraftProgressEventArgs( objects.Count, i + 1, name ) ); var hashHeader = hash.Substring(0, 2); var path = hashHeader + "/" + hash; var directoryBase = assetsDirectory + "/objects/"; var directory = directoryBase + hashHeader; var file = directoryBase + path; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } if (File.Exists(file)) { continue; } DownloadFile(AssetsUrlBase + path, file); } }