From e1d883adf6099b9b910d0ccd73fb0bf00634ae4e Mon Sep 17 00:00:00 2001 From: VaDiM Date: Thu, 3 Aug 2023 15:39:10 +0300 Subject: [PATCH] [CLI] Refactor - Made some classes static --- AssetStudioCLI/CLILogger.cs | 10 +- AssetStudioCLI/Exporter.cs | 38 ++++---- AssetStudioCLI/Options/CLIOptions.cs | 133 ++++++++++++++------------- AssetStudioCLI/Program.cs | 39 ++++---- AssetStudioCLI/Studio.cs | 110 ++++++++++------------ 5 files changed, 163 insertions(+), 167 deletions(-) diff --git a/AssetStudioCLI/CLILogger.cs b/AssetStudioCLI/CLILogger.cs index 1fb473c..e74f29d 100644 --- a/AssetStudioCLI/CLILogger.cs +++ b/AssetStudioCLI/CLILogger.cs @@ -1,9 +1,9 @@ using AssetStudio; +using AssetStudioCLI.Options; using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; -using AssetStudioCLI.Options; namespace AssetStudioCLI { @@ -21,16 +21,16 @@ namespace AssetStudioCLI public string LogName; public string LogPath; - public CLILogger(CLIOptions options) + public CLILogger() { - logOutput = options.o_logOutput.Value; - logMinLevel = options.o_logLevel.Value; + logOutput = CLIOptions.o_logOutput.Value; + logMinLevel = CLIOptions.o_logLevel.Value; LogName = $"AssetStudioCLI_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log"; LogPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LogName); var ver = typeof(Program).Assembly.GetName().Version; LogToFile(LoggerEvent.Verbose, $"---AssetStudioCLI v{ver} | Logger launched---\n" + - $"CMD Args: {string.Join(" ", options.cliArgs)}"); + $"CMD Args: {string.Join(" ", CLIOptions.cliArgs)}"); } private static string ColorLogLevel(LoggerEvent logLevel) diff --git a/AssetStudioCLI/Exporter.cs b/AssetStudioCLI/Exporter.cs index c074def..77cc99a 100644 --- a/AssetStudioCLI/Exporter.cs +++ b/AssetStudioCLI/Exporter.cs @@ -9,12 +9,12 @@ namespace AssetStudioCLI { internal static class Exporter { - public static bool ExportTexture2D(AssetItem item, string exportPath, CLIOptions options) + public static bool ExportTexture2D(AssetItem item, string exportPath) { var m_Texture2D = (Texture2D)item.Asset; - if (options.convertTexture) + if (CLIOptions.convertTexture) { - var type = options.o_imageFormat.Value; + var type = CLIOptions.o_imageFormat.Value; if (!TryExportFile(exportPath, item, "." + type.ToString().ToLower(), out var exportFullPath)) return false; var image = m_Texture2D.ConvertToImage(flip: true); @@ -43,7 +43,7 @@ namespace AssetStudioCLI } } - public static bool ExportAudioClip(AssetItem item, string exportPath, CLIOptions options) + public static bool ExportAudioClip(AssetItem item, string exportPath) { string exportFullPath; var m_AudioClip = (AudioClip)item.Asset; @@ -54,7 +54,7 @@ namespace AssetStudioCLI return false; } var converter = new AudioClipConverter(m_AudioClip); - if (options.o_audioFormat.Value != AudioFormat.None && converter.IsSupport) + if (CLIOptions.o_audioFormat.Value != AudioFormat.None && converter.IsSupport) { if (!TryExportFile(exportPath, item, ".wav", out exportFullPath)) return false; @@ -132,12 +132,12 @@ namespace AssetStudioCLI return true; } - public static bool ExportTextAsset(AssetItem item, string exportPath, CLIOptions options) + public static bool ExportTextAsset(AssetItem item, string exportPath) { var m_TextAsset = (TextAsset)item.Asset; var extension = ".txt"; var assetExtension = Path.GetExtension(m_TextAsset.m_Name); - if (!options.f_notRestoreExtensionName.Value) + if (!CLIOptions.f_notRestoreExtensionName.Value) { if (!string.IsNullOrEmpty(assetExtension)) { @@ -160,7 +160,7 @@ namespace AssetStudioCLI return true; } - public static bool ExportMonoBehaviour(AssetItem item, string exportPath, AssemblyLoader assemblyLoader) + public static bool ExportMonoBehaviour(AssetItem item, string exportPath) { if (!TryExportFile(exportPath, item, ".json", out var exportFullPath)) return false; @@ -168,7 +168,7 @@ namespace AssetStudioCLI var type = m_MonoBehaviour.ToType(); if (type == null) { - var m_Type = m_MonoBehaviour.ConvertToTypeTree(assemblyLoader); + var m_Type = m_MonoBehaviour.ConvertToTypeTree(Studio.assemblyLoader); type = m_MonoBehaviour.ToType(m_Type); } if (type != null) @@ -202,9 +202,9 @@ namespace AssetStudioCLI return false; } - public static bool ExportSprite(AssetItem item, string exportPath, CLIOptions options) + public static bool ExportSprite(AssetItem item, string exportPath) { - var type = options.o_imageFormat.Value; + var type = CLIOptions.o_imageFormat.Value; var alphaMask = SpriteMaskMode.On; if (!TryExportFile(exportPath, item, "." + type.ToString().ToLower(), out var exportFullPath)) return false; @@ -234,14 +234,14 @@ namespace AssetStudioCLI return true; } - public static bool ExportDumpFile(AssetItem item, string exportPath, AssemblyLoader assemblyLoader) + public static bool ExportDumpFile(AssetItem item, string exportPath) { if (!TryExportFile(exportPath, item, ".txt", out var exportFullPath)) return false; var str = item.Asset.Dump(); if (str == null && item.Asset is MonoBehaviour m_MonoBehaviour) { - var m_Type = m_MonoBehaviour.ConvertToTypeTree(assemblyLoader); + var m_Type = m_MonoBehaviour.ConvertToTypeTree(Studio.assemblyLoader); str = m_MonoBehaviour.Dump(m_Type); } if (str != null) @@ -369,14 +369,14 @@ namespace AssetStudioCLI return true; } - public static bool ExportConvertFile(AssetItem item, string exportPath, CLIOptions options, AssemblyLoader assemblyLoader) + public static bool ExportConvertFile(AssetItem item, string exportPath) { switch (item.Type) { case ClassIDType.Texture2D: - return ExportTexture2D(item, exportPath, options); + return ExportTexture2D(item, exportPath); case ClassIDType.AudioClip: - return ExportAudioClip(item, exportPath, options); + return ExportAudioClip(item, exportPath); case ClassIDType.VideoClip: return ExportVideoClip(item, exportPath); case ClassIDType.MovieTexture: @@ -384,13 +384,13 @@ namespace AssetStudioCLI case ClassIDType.Shader: return ExportShader(item, exportPath); case ClassIDType.TextAsset: - return ExportTextAsset(item, exportPath, options); + return ExportTextAsset(item, exportPath); case ClassIDType.MonoBehaviour: - return ExportMonoBehaviour(item, exportPath, assemblyLoader); + return ExportMonoBehaviour(item, exportPath); case ClassIDType.Font: return ExportFont(item, exportPath); case ClassIDType.Sprite: - return ExportSprite(item, exportPath, options); + return ExportSprite(item, exportPath); case ClassIDType.Mesh: return ExportMesh(item, exportPath); default: diff --git a/AssetStudioCLI/Options/CLIOptions.cs b/AssetStudioCLI/Options/CLIOptions.cs index a6c5b6d..8b61294 100644 --- a/AssetStudioCLI/Options/CLIOptions.cs +++ b/AssetStudioCLI/Options/CLIOptions.cs @@ -57,57 +57,83 @@ namespace AssetStudioCLI.Options internal class GroupedOption : Option { - public GroupedOption(T optionDefaultValue, string optionName, string optionDescription, HelpGroups optionHelpGroup, bool isFlag = false) : base(optionDefaultValue, optionName, optionDescription, optionHelpGroup, isFlag) + internal GroupedOption(T optionDefaultValue, string optionName, string optionDescription, HelpGroups optionHelpGroup, bool isFlag = false) : base(optionDefaultValue, optionName, optionDescription, optionHelpGroup, isFlag) { - CLIOptions.OptionGrouping(optionName, optionDescription, optionHelpGroup, isFlag); + CLIOptions._OptionGrouping(optionName, optionDescription, optionHelpGroup, isFlag); } } - internal class CLIOptions + internal static class CLIOptions { - public bool isParsed; - public bool showHelp; - public string[] cliArgs; - public string inputPath; - public FilterBy filterBy; + public static bool isParsed; + public static bool showHelp; + public static string[] cliArgs; + public static string inputPath; + public static FilterBy filterBy; private static Dictionary optionsDict; private static Dictionary flagsDict; private static Dictionary> optionGroups; - private List supportedAssetTypes; + private static List supportedAssetTypes; //general - public Option o_workMode; - public Option> o_exportAssetTypes; - public Option o_groupAssetsBy; - public Option o_outputFolder; - public Option o_displayHelp; + public static Option o_workMode; + public static Option> o_exportAssetTypes; + public static Option o_groupAssetsBy; + public static Option o_outputFolder; + public static Option o_displayHelp; //logger - public Option o_logLevel; - public Option o_logOutput; + public static Option o_logLevel; + public static Option o_logOutput; //convert - public bool convertTexture; - public Option o_imageFormat; - public Option o_audioFormat; + public static bool convertTexture; + public static Option o_imageFormat; + public static Option o_audioFormat; //advanced - public Option o_exportAssetList; - public Option> o_filterByName; - public Option> o_filterByContainer; - public Option> o_filterByPathID; - public Option> o_filterByText; - public Option o_assemblyPath; - public Option o_unityVersion; - public Option f_notRestoreExtensionName; + public static Option o_exportAssetList; + public static Option> o_filterByName; + public static Option> o_filterByContainer; + public static Option> o_filterByPathID; + public static Option> o_filterByText; + public static Option o_assemblyPath; + public static Option o_unityVersion; + public static Option f_notRestoreExtensionName; - public CLIOptions(string[] args) + static CLIOptions() { - cliArgs = args; InitOptions(); - ParseArgs(args); } - private void InitOptions() + internal static void _OptionGrouping(string name, string desc, HelpGroups group, bool isFlag) //TODO + { + if (string.IsNullOrEmpty(name)) + { + return; + } + + var optionDict = new Dictionary() { { name, desc } }; + if (!optionGroups.ContainsKey(group)) + { + optionGroups.Add(group, optionDict); + } + else + { + optionGroups[group].Add(name, desc); + } + + if (isFlag) + { + flagsDict.Add(name, desc); + } + else + { + optionsDict.Add(name, desc); + } + } + + private static void InitOptions() { isParsed = false; showHelp = false; + cliArgs = null; inputPath = ""; filterBy = FilterBy.None; optionsDict = new Dictionary(); @@ -303,35 +329,10 @@ namespace AssetStudioCLI.Options #endregion } - internal static void OptionGrouping(string name, string desc, HelpGroups group, bool isFlag) + public static void ParseArgs(string[] args) { - if (string.IsNullOrEmpty(name)) - { - return; - } + cliArgs = args; - var optionDict = new Dictionary() { { name, desc } }; - if (!optionGroups.ContainsKey(group)) - { - optionGroups.Add(group, optionDict); - } - else - { - optionGroups[group].Add(name, desc); - } - - if (isFlag) - { - flagsDict.Add(name, desc); - } - else - { - optionsDict.Add(name, desc); - } - } - - private void ParseArgs(string[] args) - { var brightYellow = CLIAnsiColors.BrightYellow; var brightRed = CLIAnsiColors.BrightRed; @@ -658,6 +659,7 @@ namespace AssetStudioCLI.Options if (Directory.Exists(value)) { o_assemblyPath.Value = value; + Studio.assemblyLoader.Load(value); } else { @@ -703,8 +705,13 @@ namespace AssetStudioCLI.Options return; } } - isParsed = true; #endregion + + if (!Studio.assemblyLoader.Loaded) + { + Studio.assemblyLoader.Loaded = true; + } + isParsed = true; } private static string[] ValueSplitter(string value) @@ -713,7 +720,7 @@ namespace AssetStudioCLI.Options return value.Split(separator); } - private bool TryShowOptionDescription(string option, Dictionary descDict) + private static bool TryShowOptionDescription(string option, Dictionary descDict) { var optionDesc = descDict.Where(x => x.Key.Contains(option)); if (optionDesc.Any()) @@ -728,7 +735,7 @@ namespace AssetStudioCLI.Options return false; } - public void ShowHelp(bool showUsageOnly = false) + public static void ShowHelp(bool showUsageOnly = false) { const int indent = 22; var helpMessage = new StringBuilder(); @@ -766,7 +773,7 @@ namespace AssetStudioCLI.Options } } - private string ShowCurrentFilter() + private static string ShowCurrentFilter() { switch (filterBy) { @@ -785,7 +792,7 @@ namespace AssetStudioCLI.Options } } - public void ShowCurrentOptions() + public static void ShowCurrentOptions() { var sb = new StringBuilder(); sb.AppendLine("[Current Options]"); diff --git a/AssetStudioCLI/Program.cs b/AssetStudioCLI/Program.cs index 5e0f094..a7d6f01 100644 --- a/AssetStudioCLI/Program.cs +++ b/AssetStudioCLI/Program.cs @@ -8,52 +8,51 @@ namespace AssetStudioCLI { public static void Main(string[] args) { - var options = new CLIOptions(args); - if (options.isParsed) + CLIOptions.ParseArgs(args); + if (CLIOptions.isParsed) { - CLIRun(options); + CLIRun(); } - else if (options.showHelp) + else if (CLIOptions.showHelp) { - options.ShowHelp(); + CLIOptions.ShowHelp(); } else { Console.WriteLine(); - options.ShowHelp(showUsageOnly: true); + CLIOptions.ShowHelp(showUsageOnly: true); } } - private static void CLIRun(CLIOptions options) + private static void CLIRun() { - var cliLogger = new CLILogger(options); + var cliLogger = new CLILogger(); Logger.Default = cliLogger; - var studio = new Studio(options); - options.ShowCurrentOptions(); + CLIOptions.ShowCurrentOptions(); try { - if (studio.LoadAssets()) + if (Studio.LoadAssets()) { - studio.ParseAssets(); - if (options.filterBy != FilterBy.None && options.o_workMode.Value != WorkMode.ExportLive2D) + Studio.ParseAssets(); + if (CLIOptions.filterBy != FilterBy.None && CLIOptions.o_workMode.Value != WorkMode.ExportLive2D) { - studio.FilterAssets(); + Studio.FilterAssets(); } - if (options.o_exportAssetList.Value != ExportListType.None) + if (CLIOptions.o_exportAssetList.Value != ExportListType.None) { - studio.ExportAssetList(); + Studio.ExportAssetList(); } - switch (options.o_workMode.Value) + switch (CLIOptions.o_workMode.Value) { case WorkMode.Info: - studio.ShowExportableAssetsInfo(); + Studio.ShowExportableAssetsInfo(); break; case WorkMode.ExportLive2D: - studio.ExportLive2D(); + Studio.ExportLive2D(); break; default: - studio.ExportAssets(); + Studio.ExportAssets(); break; } } diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index b4e7c9e..6c56b15 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -11,40 +11,30 @@ using Ansi = AssetStudioCLI.CLIAnsiColors; namespace AssetStudioCLI { - internal class Studio + internal static class Studio { - public AssetsManager assetsManager = new AssetsManager(); - public List parsedAssetsList = new List(); + public static AssetsManager assetsManager = new AssetsManager(); + public static List parsedAssetsList = new List(); + public static AssemblyLoader assemblyLoader = new AssemblyLoader(); private static Dictionary containers = new Dictionary(); - private static AssemblyLoader assemblyLoader = new AssemblyLoader(); - private readonly CLIOptions options; - public Studio(CLIOptions cliOptions) + static Studio() { Progress.Default = new Progress(ShowCurProgressValue); - options = cliOptions; - if (options.o_assemblyPath.Value != "") - { - assemblyLoader.Load(options.o_assemblyPath.Value); - } - else - { - assemblyLoader.Loaded = true; - } } - private void ShowCurProgressValue(int value) + private static void ShowCurProgressValue(int value) { Console.Write($"[{value:000}%]\r"); } - public bool LoadAssets() + public static bool LoadAssets() { var isLoaded = false; - assetsManager.SpecifyUnityVersion = options.o_unityVersion.Value; - assetsManager.SetAssetFilter(options.o_exportAssetTypes.Value); + assetsManager.SpecifyUnityVersion = CLIOptions.o_unityVersion.Value; + assetsManager.SetAssetFilter(CLIOptions.o_exportAssetTypes.Value); - assetsManager.LoadFilesAndFolders(options.inputPath); + assetsManager.LoadFilesAndFolders(CLIOptions.inputPath); if (assetsManager.assetsFileList.Count == 0) { Logger.Warning("No Unity file can be loaded."); @@ -57,7 +47,7 @@ namespace AssetStudioCLI return isLoaded; } - public void ParseAssets() + public static void ParseAssets() { Logger.Info("Parse assets..."); @@ -141,7 +131,7 @@ namespace AssetStudioCLI assetItem.Text = assetItem.TypeString + assetItem.UniqueID; } - isExportable = options.o_exportAssetTypes.Value.Contains(asset.type); + isExportable = CLIOptions.o_exportAssetTypes.Value.Contains(asset.type); if (isExportable) { fileAssetsList.Add(assetItem); @@ -158,7 +148,7 @@ namespace AssetStudioCLI } parsedAssetsList.AddRange(fileAssetsList); fileAssetsList.Clear(); - if (options.o_workMode.Value != WorkMode.ExportLive2D) + if (CLIOptions.o_workMode.Value != WorkMode.ExportLive2D) { containers.Clear(); } @@ -170,14 +160,14 @@ namespace AssetStudioCLI { m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => y.classID != (int)ClassIDType.Shader - && options.o_exportAssetTypes.Value.Any(k => (int)k == y.classID)) + && CLIOptions.o_exportAssetTypes.Value.Any(k => (int)k == y.classID)) ); } else { - m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => options.o_exportAssetTypes.Value.Any(k => (int)k == y.classID))); + m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => CLIOptions.o_exportAssetTypes.Value.Any(k => (int)k == y.classID))); } - var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.LongCount(y => options.o_exportAssetTypes.Value.Any(k => k == y.type))); + var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.LongCount(y => CLIOptions.o_exportAssetTypes.Value.Any(k => k == y.type))); if (m_ObjectsCount != objectsCount) { log += $" and {m_ObjectsCount - objectsCount} assets failed to read"; @@ -185,7 +175,7 @@ namespace AssetStudioCLI Logger.Info(log); } - public void ShowExportableAssetsInfo() + public static void ShowExportableAssetsInfo() { var exportableAssetsCountDict = new Dictionary(); string info = ""; @@ -218,7 +208,7 @@ namespace AssetStudioCLI info += "No exportable assets found."; } - if (options.o_logLevel.Value > LoggerEvent.Info) + if (CLIOptions.o_logLevel.Value > LoggerEvent.Info) { Console.WriteLine(info); } @@ -228,53 +218,53 @@ namespace AssetStudioCLI } } - public void FilterAssets() + public static void FilterAssets() { var assetsCount = parsedAssetsList.Count; var filteredAssets = new List(); - switch(options.filterBy) + switch(CLIOptions.filterBy) { case FilterBy.Name: - filteredAssets = parsedAssetsList.FindAll(x => options.o_filterByName.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); + filteredAssets = parsedAssetsList.FindAll(x => CLIOptions.o_filterByName.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); Logger.Info( $"Found [{filteredAssets.Count}/{assetsCount}] asset(s) " + - $"that contain {$"\"{string.Join("\", \"", options.o_filterByName.Value)}\"".Color(Ansi.BrightYellow)} in their Names." + $"that contain {$"\"{string.Join("\", \"", CLIOptions.o_filterByName.Value)}\"".Color(Ansi.BrightYellow)} in their Names." ); break; case FilterBy.Container: - filteredAssets = parsedAssetsList.FindAll(x => options.o_filterByContainer.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); + filteredAssets = parsedAssetsList.FindAll(x => CLIOptions.o_filterByContainer.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); Logger.Info( $"Found [{filteredAssets.Count}/{assetsCount}] asset(s) " + - $"that contain {$"\"{string.Join("\", \"", options.o_filterByContainer.Value)}\"".Color(Ansi.BrightYellow)} in their Containers." + $"that contain {$"\"{string.Join("\", \"", CLIOptions.o_filterByContainer.Value)}\"".Color(Ansi.BrightYellow)} in their Containers." ); break; case FilterBy.PathID: - filteredAssets = parsedAssetsList.FindAll(x => options.o_filterByPathID.Value.Any(y => x.m_PathID.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); + filteredAssets = parsedAssetsList.FindAll(x => CLIOptions.o_filterByPathID.Value.Any(y => x.m_PathID.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0)); Logger.Info( $"Found [{filteredAssets.Count}/{assetsCount}] asset(s) " + - $"that contain {$"\"{string.Join("\", \"", options.o_filterByPathID.Value)}\"".Color(Ansi.BrightYellow)} in their PathIDs." + $"that contain {$"\"{string.Join("\", \"", CLIOptions.o_filterByPathID.Value)}\"".Color(Ansi.BrightYellow)} in their PathIDs." ); break; case FilterBy.NameOrContainer: filteredAssets = parsedAssetsList.FindAll(x => - options.o_filterByText.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) || - options.o_filterByText.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) + CLIOptions.o_filterByText.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) || + CLIOptions.o_filterByText.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) ); Logger.Info( $"Found [{filteredAssets.Count}/{assetsCount}] asset(s) " + - $"that contain {$"\"{string.Join("\", \"", options.o_filterByText.Value)}\"".Color(Ansi.BrightYellow)} in their Names or Contaniers." + $"that contain {$"\"{string.Join("\", \"", CLIOptions.o_filterByText.Value)}\"".Color(Ansi.BrightYellow)} in their Names or Contaniers." ); break; case FilterBy.NameAndContainer: filteredAssets = parsedAssetsList.FindAll(x => - options.o_filterByName.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) && - options.o_filterByContainer.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) + CLIOptions.o_filterByName.Value.Any(y => x.Text.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) && + CLIOptions.o_filterByContainer.Value.Any(y => x.Container.ToString().IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0) ); Logger.Info( $"Found [{filteredAssets.Count}/{assetsCount}] asset(s) " + - $"that contain {$"\"{string.Join("\", \"", options.o_filterByContainer.Value)}\"".Color(Ansi.BrightYellow)} in their Containers " + - $"and {$"\"{string.Join("\", \"", options.o_filterByName.Value)}\"".Color(Ansi.BrightYellow)} in their Names." + $"that contain {$"\"{string.Join("\", \"", CLIOptions.o_filterByContainer.Value)}\"".Color(Ansi.BrightYellow)} in their Containers " + + $"and {$"\"{string.Join("\", \"", CLIOptions.o_filterByName.Value)}\"".Color(Ansi.BrightYellow)} in their Names." ); break; } @@ -282,13 +272,13 @@ namespace AssetStudioCLI parsedAssetsList = filteredAssets; } - public void ExportAssets() + public static void ExportAssets() { - var savePath = options.o_outputFolder.Value; + var savePath = CLIOptions.o_outputFolder.Value; var toExportCount = parsedAssetsList.Count; var exportedCount = 0; - var groupOption = options.o_groupAssetsBy.Value; + var groupOption = CLIOptions.o_groupAssetsBy.Value; foreach (var asset in parsedAssetsList) { string exportPath; @@ -330,25 +320,25 @@ namespace AssetStudioCLI exportPath += Path.DirectorySeparatorChar; try { - switch (options.o_workMode.Value) + switch (CLIOptions.o_workMode.Value) { case WorkMode.ExportRaw: - Logger.Debug($"{options.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); + Logger.Debug($"{CLIOptions.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); if (ExportRawFile(asset, exportPath)) { exportedCount++; } break; case WorkMode.Dump: - Logger.Debug($"{options.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); - if (ExportDumpFile(asset, exportPath, assemblyLoader)) + Logger.Debug($"{CLIOptions.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); + if (ExportDumpFile(asset, exportPath)) { exportedCount++; } break; case WorkMode.Export: - Logger.Debug($"{options.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); - if (ExportConvertFile(asset, exportPath, options, assemblyLoader)) + Logger.Debug($"{CLIOptions.o_workMode}: {asset.Type} : {asset.Container} : {asset.Text}"); + if (ExportConvertFile(asset, exportPath)) { exportedCount++; } @@ -369,11 +359,11 @@ namespace AssetStudioCLI } else if (toExportCount > exportedCount) { - Logger.Default.Log(LoggerEvent.Info, $"Finished exporting {exportedCount} asset(s) to \"{options.o_outputFolder.Value.Color(Ansi.BrightYellow)}\".", ignoreLevel: true); + Logger.Default.Log(LoggerEvent.Info, $"Finished exporting {exportedCount} asset(s) to \"{CLIOptions.o_outputFolder.Value.Color(Ansi.BrightYellow)}\".", ignoreLevel: true); } else { - Logger.Default.Log(LoggerEvent.Info, $"Finished exporting {exportedCount} asset(s) to \"{options.o_outputFolder.Value.Color(Ansi.BrightGreen)}\".", ignoreLevel: true); + Logger.Default.Log(LoggerEvent.Info, $"Finished exporting {exportedCount} asset(s) to \"{CLIOptions.o_outputFolder.Value.Color(Ansi.BrightGreen)}\".", ignoreLevel: true); } if (toExportCount > exportedCount) @@ -382,11 +372,11 @@ namespace AssetStudioCLI } } - public void ExportAssetList() + public static void ExportAssetList() { - var savePath = options.o_outputFolder.Value; + var savePath = CLIOptions.o_outputFolder.Value; - switch (options.o_exportAssetList.Value) + switch (CLIOptions.o_exportAssetList.Value) { case ExportListType.XML: var filename = Path.Combine(savePath, "assets.xml"); @@ -413,9 +403,9 @@ namespace AssetStudioCLI Logger.Info($"Finished exporting asset list with {parsedAssetsList.Count} items."); } - public void ExportLive2D() + public static void ExportLive2D() { - var baseDestPath = Path.Combine(options.o_outputFolder.Value, "Live2DOutput"); + var baseDestPath = Path.Combine(CLIOptions.o_outputFolder.Value, "Live2DOutput"); var useFullContainerPath = false; Progress.Reset(); @@ -481,7 +471,7 @@ namespace AssetStudioCLI Progress.Report(modelCounter, (int)totalModelCount); } var status = modelCounter > 0 ? - $"Finished exporting [{modelCounter}/{totalModelCount}] Live2D model(s) to \"{options.o_outputFolder.Value.Color(Ansi.BrightCyan)}\"" : + $"Finished exporting [{modelCounter}/{totalModelCount}] Live2D model(s) to \"{CLIOptions.o_outputFolder.Value.Color(Ansi.BrightCyan)}\"" : "Nothing exported."; Logger.Default.Log(LoggerEvent.Info, status, ignoreLevel: true); }