diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index b29613f..ac871e8 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -53,19 +53,53 @@ namespace AssetStudio SetAssetFilter(classIDType); } - public void LoadFiles(params string[] files) + public void LoadFilesAndFolders(params string[] path) { - var path = Path.GetDirectoryName(Path.GetFullPath(files[0])); - MergeSplitAssets(path); - var toReadFile = ProcessingSplitFiles(files.ToList()); - Load(toReadFile); + List pathList = new List(); + pathList.AddRange(path); + LoadFilesAndFolders(out _, pathList); } - public void LoadFolder(string path) + public void LoadFilesAndFolders(out string parentPath, params string[] path) { - MergeSplitAssets(path, true); - var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).ToList(); - var toReadFile = ProcessingSplitFiles(files); + List pathList = new List(); + pathList.AddRange(path); + LoadFilesAndFolders(out parentPath, pathList); + } + + public void LoadFilesAndFolders(out string parentPath, List pathList) + { + List fileList = new List(); + bool filesInPath = false; + parentPath = ""; + foreach (var path in pathList) + { + var fullPath = Path.GetFullPath(path); + if (Directory.Exists(fullPath)) + { + var parent = Directory.GetParent(fullPath).FullName; + if (!filesInPath && (parentPath == "" || parentPath.Length > parent.Length)) + { + parentPath = parent; + } + MergeSplitAssets(fullPath, true); + fileList.AddRange(Directory.GetFiles(fullPath, "*.*", SearchOption.AllDirectories)); + } + else + { + parentPath = Path.GetDirectoryName(fullPath); + fileList.Add(fullPath); + filesInPath = true; + } + } + if (filesInPath) + { + MergeSplitAssets(parentPath); + } + var toReadFile = ProcessingSplitFiles(fileList); + fileList.Clear(); + pathList.Clear(); + Load(toReadFile); } diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index 9732ce2..8bc6c63 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -33,14 +33,7 @@ namespace AssetStudioCLI assetsManager.SpecifyUnityVersion = options.o_unityVersion.Value; assetsManager.SetAssetFilter(options.o_exportAssetTypes.Value); - if (Directory.Exists(options.inputPath)) - { - assetsManager.LoadFolder(options.inputPath); - } - else - { - assetsManager.LoadFiles(options.inputPath); - } + assetsManager.LoadFilesAndFolders(options.inputPath); if (assetsManager.assetsFileList.Count == 0) { Logger.Warning("No Unity file can be loaded."); diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index 1f8dcc3..8828543 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -143,14 +143,8 @@ namespace AssetStudioGUI { ResetForm(); assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text; - if (paths.Length == 1 && Directory.Exists(paths[0])) - { - await Task.Run(() => assetsManager.LoadFolder(paths[0])); - } - else - { - await Task.Run(() => assetsManager.LoadFiles(paths)); - } + await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, paths)); + saveDirectoryBackup = openDirectoryBackup; BuildAssetStructures(); } } @@ -161,9 +155,8 @@ namespace AssetStudioGUI if (openFileDialog1.ShowDialog(this) == DialogResult.OK) { ResetForm(); - openDirectoryBackup = Path.GetDirectoryName(openFileDialog1.FileNames[0]); assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text; - await Task.Run(() => assetsManager.LoadFiles(openFileDialog1.FileNames)); + await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFileDialog1.FileNames)); BuildAssetStructures(); } } @@ -175,9 +168,8 @@ namespace AssetStudioGUI if (openFolderDialog.ShowDialog(this) == DialogResult.OK) { ResetForm(); - openDirectoryBackup = openFolderDialog.Folder; assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text; - await Task.Run(() => assetsManager.LoadFolder(openFolderDialog.Folder)); + await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFolderDialog.Folder)); BuildAssetStructures(); } }