From 59478d9c056136feda0e0d769e6c68c260f8d8fa Mon Sep 17 00:00:00 2001 From: Razmoth <32140579+Razmoth@users.noreply.github.com> Date: Mon, 22 Jan 2024 20:22:55 +0400 Subject: [PATCH] - [Core] Add option to toggle logger events [GUI/CLI] --- AssetStudio.CLI/Components/CommandLine.cs | 11 ++--- AssetStudio.CLI/Program.cs | 3 +- AssetStudio.GUI/App.config | 12 ++--- AssetStudio.GUI/GUILogger.cs | 7 ++- AssetStudio.GUI/MainForm.Designer.cs | 40 ++++++++--------- AssetStudio.GUI/MainForm.cs | 24 +++++++--- AssetStudio.GUI/MainForm.resx | 6 +-- .../Properties/Settings.Designer.cs | 24 +++++----- AssetStudio.GUI/Properties/Settings.settings | 6 +-- AssetStudio/ILogger.cs | 44 +++++++++++++------ AssetStudio/Logger.cs | 39 ++++++++-------- 11 files changed, 125 insertions(+), 91 deletions(-) diff --git a/AssetStudio.CLI/Components/CommandLine.cs b/AssetStudio.CLI/Components/CommandLine.cs index f0abcb9..bad49ad 100644 --- a/AssetStudio.CLI/Components/CommandLine.cs +++ b/AssetStudio.CLI/Components/CommandLine.cs @@ -21,7 +21,7 @@ namespace AssetStudio.CLI var rootCommand = new RootCommand() { optionsBinder.Silent, - optionsBinder.Verbose, + optionsBinder.LoggerFlags, optionsBinder.TypeFilter, optionsBinder.NameFilter, optionsBinder.ContainerFilter, @@ -49,7 +49,7 @@ namespace AssetStudio.CLI public class Options { public bool Silent { get; set; } - public bool Verbose { get; set; } + public LoggerEvent LoggerFlags { get; set; } public ClassIDType[] TypeFilter { get; set; } public Regex[] NameFilter { get; set; } public Regex[] ContainerFilter { get; set; } @@ -72,7 +72,7 @@ namespace AssetStudio.CLI public class OptionsBinder : BinderBase { public readonly Option Silent; - public readonly Option Verbose; + public readonly Option LoggerFlags; public readonly Option TypeFilter; public readonly Option NameFilter; public readonly Option ContainerFilter; @@ -94,7 +94,7 @@ namespace AssetStudio.CLI public OptionsBinder() { Silent = new Option("--silent", "Hide log messages."); - Verbose = new Option("--verbose", "Enable verbose logging."); + LoggerFlags = new Option("--logger_flags", "Flags to control toggle log events."); TypeFilter = new Option("--types", "Specify unity class type(s)") { AllowMultipleArgumentsPerToken = true, ArgumentHelpName = "Texture2D|Sprite|etc.." }; NameFilter = new Option("--names", result => result.Tokens.Select(x => new Regex(x.Value, RegexOptions.IgnoreCase)).ToArray(), false, "Specify name regex filter(s).") { AllowMultipleArgumentsPerToken = true }; ContainerFilter = new Option("--containers", result => result.Tokens.Select(x => new Regex(x.Value, RegexOptions.IgnoreCase)).ToArray(), false, "Specify container regex filter(s).") { AllowMultipleArgumentsPerToken = true }; @@ -152,6 +152,7 @@ namespace AssetStudio.CLI GameName.FromAmong(GameManager.GetGameNames()); + LoggerFlags.SetDefaultValue(LoggerEvent.Default); GroupAssetsType.SetDefaultValue(AssetGroupOption.ByType); AssetExportType.SetDefaultValue(ExportType.Convert); MapOp.SetDefaultValue(MapOpType.None); @@ -186,7 +187,7 @@ namespace AssetStudio.CLI new() { Silent = bindingContext.ParseResult.GetValueForOption(Silent), - Verbose = bindingContext.ParseResult.GetValueForOption(Verbose), + LoggerFlags = bindingContext.ParseResult.GetValueForOption(LoggerFlags), TypeFilter = bindingContext.ParseResult.GetValueForOption(TypeFilter), NameFilter = bindingContext.ParseResult.GetValueForOption(NameFilter), ContainerFilter = bindingContext.ParseResult.GetValueForOption(ContainerFilter), diff --git a/AssetStudio.CLI/Program.cs b/AssetStudio.CLI/Program.cs index 8559afe..a0069ca 100644 --- a/AssetStudio.CLI/Program.cs +++ b/AssetStudio.CLI/Program.cs @@ -39,8 +39,7 @@ namespace AssetStudio.CLI } Studio.Game = game; - Logger.Default = new ConsoleLogger(); - Logger.LogVerbose = o.Verbose; + Logger.Default = new ConsoleLogger() { Flags = o.LoggerFlags }; Logger.FileLogging = Settings.Default.enableFileLogging; AssetsHelper.Minimal = Settings.Default.minimalAssetMap; AssetsHelper.SetUnityVersion(o.UnityVersion); diff --git a/AssetStudio.GUI/App.config b/AssetStudio.GUI/App.config index e0883c6..522d918 100644 --- a/AssetStudio.GUI/App.config +++ b/AssetStudio.GUI/App.config @@ -106,18 +106,18 @@ True - - False - - - False - {} {"UV0":{"Item1":true,"Item2":0},"UV1":{"Item1":true,"Item2":1},"UV2":{"Item1":false,"Item2":0},"UV3":{"Item1":false,"Item2":0},"UV4":{"Item1":false,"Item2":0},"UV5":{"Item1":false,"Item2":0},"UV6":{"Item1":false,"Item2":0},"UV7":{"Item1":false,"Item2":0}} + + False + + + 30 + \ No newline at end of file diff --git a/AssetStudio.GUI/GUILogger.cs b/AssetStudio.GUI/GUILogger.cs index 2b0092a..63cff48 100644 --- a/AssetStudio.GUI/GUILogger.cs +++ b/AssetStudio.GUI/GUILogger.cs @@ -8,14 +8,17 @@ namespace AssetStudio.GUI public bool ShowErrorMessage = true; private Action action; + public bool Silent { get; set; } + public LoggerEvent Flags { get; set; } + public GUILogger(Action action) { this.action = action; } - public void Log(LoggerEvent loggerEvent, string message, bool silent = false) + public void Log(LoggerEvent loggerEvent, string message) { - if (silent) + if (!Flags.HasFlag(loggerEvent) || Silent) return; switch (loggerEvent) diff --git a/AssetStudio.GUI/MainForm.Designer.cs b/AssetStudio.GUI/MainForm.Designer.cs index 2b21c21..954e9a4 100644 --- a/AssetStudio.GUI/MainForm.Designer.cs +++ b/AssetStudio.GUI/MainForm.Designer.cs @@ -51,6 +51,7 @@ namespace AssetStudio.GUI toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); displayInfo = new System.Windows.Forms.ToolStripMenuItem(); enableResolveDependencies = new System.Windows.Forms.ToolStripMenuItem(); + allowDuplicates = new System.Windows.Forms.ToolStripMenuItem(); skipContainer = new System.Windows.Forms.ToolStripMenuItem(); toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem(); @@ -105,7 +106,7 @@ namespace AssetStudio.GUI enableConsole = new System.Windows.Forms.ToolStripMenuItem(); clearConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); enableFileLogging = new System.Windows.Forms.ToolStripMenuItem(); - enableVerbose = new System.Windows.Forms.ToolStripMenuItem(); + loggedEventsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); MapNameComboBox = new System.Windows.Forms.ToolStripComboBox(); buildMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -173,7 +174,6 @@ namespace AssetStudio.GUI exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem(); goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - allowDuplicates = new System.Windows.Forms.ToolStripMenuItem(); menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit(); splitContainer1.Panel1.SuspendLayout(); @@ -338,6 +338,15 @@ namespace AssetStudio.GUI enableResolveDependencies.ToolTipText = "Toggle the behaviour of loading assets.\r\nDisable to load file(s) without its dependencies."; enableResolveDependencies.CheckedChanged += enableResolveDependencies_CheckedChanged; // + // allowDuplicates + // + allowDuplicates.CheckOnClick = true; + allowDuplicates.Name = "allowDuplicates"; + allowDuplicates.Size = new System.Drawing.Size(225, 22); + allowDuplicates.Text = "Allow duplicates"; + allowDuplicates.ToolTipText = "Toggle the behaviour of exporting assets.\r\nEnable to allow assets with duplicate names to be exported."; + allowDuplicates.CheckedChanged += allowDuplicates_CheckedChanged; + // // skipContainer // skipContainer.CheckOnClick = true; @@ -660,13 +669,13 @@ namespace AssetStudio.GUI allToolStripMenuItem.CheckOnClick = true; allToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; allToolStripMenuItem.Name = "allToolStripMenuItem"; - allToolStripMenuItem.Size = new System.Drawing.Size(88, 22); + allToolStripMenuItem.Size = new System.Drawing.Size(180, 22); allToolStripMenuItem.Text = "All"; allToolStripMenuItem.Click += typeToolStripMenuItem_Click; // // debugMenuItem // - debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItem15, exportClassStructuresMenuItem, enableConsole, clearConsoleToolStripMenuItem, enableFileLogging, enableVerbose }); + debugMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItem15, exportClassStructuresMenuItem, enableConsole, clearConsoleToolStripMenuItem, enableFileLogging, loggedEventsMenuItem }); debugMenuItem.Name = "debugMenuItem"; debugMenuItem.Size = new System.Drawing.Size(54, 20); debugMenuItem.Text = "Debug"; @@ -715,13 +724,13 @@ namespace AssetStudio.GUI enableFileLogging.Text = "Enable file logging"; enableFileLogging.CheckedChanged += enableFileLogging_CheckedChanged; // - // enableVerbose + // loggedEventsMenuItem // - enableVerbose.CheckOnClick = true; - enableVerbose.Name = "enableVerbose"; - enableVerbose.Size = new System.Drawing.Size(191, 22); - enableVerbose.Text = "Enable Verbose"; - enableVerbose.CheckedChanged += enableVerbose_Click; + loggedEventsMenuItem.Name = "loggedEventsMenuItem"; + loggedEventsMenuItem.Size = new System.Drawing.Size(191, 22); + loggedEventsMenuItem.Text = "Logged events"; + loggedEventsMenuItem.DropDown.Closing += loggedEventsMenuItem_DropDownClosing; + loggedEventsMenuItem.DropDownClosed += loggedEventsMenuItem_DropDownClosed; // // miscToolStripMenuItem // @@ -1353,15 +1362,6 @@ namespace AssetStudio.GUI showOriginalFileToolStripMenuItem.Visible = false; showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click; // - // allowDuplicates - // - allowDuplicates.CheckOnClick = true; - allowDuplicates.Name = "allowDuplicates"; - allowDuplicates.Size = new System.Drawing.Size(225, 22); - allowDuplicates.Text = "Allow duplicates"; - allowDuplicates.ToolTipText = "Toggle the behaviour of exporting assets.\r\nEnable to allow assets with duplicate names to be exported."; - allowDuplicates.CheckedChanged += allowDuplicates_CheckedChanged; - // // MainForm // AllowDrop = true; @@ -1548,7 +1548,7 @@ namespace AssetStudio.GUI private System.Windows.Forms.ToolStripMenuItem specifyUnityCNKey; private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; private System.Windows.Forms.ToolStripMenuItem enableFileLogging; - private System.Windows.Forms.ToolStripMenuItem enableVerbose; + private System.Windows.Forms.ToolStripMenuItem loggedEventsMenuItem; private System.Windows.Forms.ToolStripMenuItem sceneHierarchy; private System.Windows.Forms.ToolStripMenuItem assetMapTypeMenuItem; private System.Windows.Forms.ToolStripMenuItem loadCABMapToolStripMenuItem; diff --git a/AssetStudio.GUI/MainForm.cs b/AssetStudio.GUI/MainForm.cs index d6bb836..ed60101 100644 --- a/AssetStudio.GUI/MainForm.cs +++ b/AssetStudio.GUI/MainForm.cs @@ -98,7 +98,6 @@ namespace AssetStudio.GUI { enableConsole.Checked = Properties.Settings.Default.enableConsole; enableFileLogging.Checked = Properties.Settings.Default.enableFileLogging; - enableVerbose.Checked = Properties.Settings.Default.enableVerbose; displayAll.Checked = Properties.Settings.Default.displayAll; displayInfo.Checked = Properties.Settings.Default.displayInfo; enablePreview.Checked = Properties.Settings.Default.enablePreview; @@ -130,7 +129,14 @@ namespace AssetStudio.GUI Logger.Default = logger; ConsoleHelper.ShowWindow(handle, ConsoleHelper.SW_HIDE); } - Logger.LogVerbose = enableVerbose.Checked; + var loggerEventType = (LoggerEvent)Properties.Settings.Default.loggerEventType; + var loggerEventTypes = Enum.GetValues().ToArray()[1..^2]; + foreach (var loggerEvent in loggerEventTypes) + { + var menuItem = new ToolStripMenuItem(loggerEvent.ToString()) { CheckOnClick = true, Checked = loggerEventType.HasFlag(loggerEvent), Tag = (int)loggerEvent }; + loggedEventsMenuItem.DropDownItems.Add(menuItem); + } + Logger.Default.Flags = loggerEventType; Logger.FileLogging = enableFileLogging.Checked; } @@ -2325,12 +2331,20 @@ namespace AssetStudio.GUI Logger.FileLogging = enableFileLogging.Checked; } - private void enableVerbose_Click(object sender, EventArgs e) + private void loggedEventsMenuItem_DropDownClosing(object sender, ToolStripDropDownClosingEventArgs e) { - Properties.Settings.Default.enableVerbose = enableVerbose.Checked; + if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked) + { + e.Cancel = true; + } + } + + private void loggedEventsMenuItem_DropDownClosed(object sender, EventArgs e) + { + Properties.Settings.Default.loggerEventType = loggedEventsMenuItem.DropDownItems.Cast().Select(x => x.Checked ? (int)x.Tag : 0).Sum(); Properties.Settings.Default.Save(); - Logger.LogVerbose = enableVerbose.Checked; + Logger.Default.Flags = (LoggerEvent)Properties.Settings.Default.loggerEventType; } private void abortStripMenuItem_Click(object sender, EventArgs e) diff --git a/AssetStudio.GUI/MainForm.resx b/AssetStudio.GUI/MainForm.resx index 5d03d27..acb8534 100644 --- a/AssetStudio.GUI/MainForm.resx +++ b/AssetStudio.GUI/MainForm.resx @@ -120,6 +120,9 @@ 312, 17 + + 432, 17 + abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ 1234567890.:,;'\"(!?)+-*/= @@ -138,9 +141,6 @@ The quick brown fox jumps over the lazy dog. 1234567890 The quick brown fox jumps over the lazy dog. 1234567890 - - 432, 17 - 553, 17 diff --git a/AssetStudio.GUI/Properties/Settings.Designer.cs b/AssetStudio.GUI/Properties/Settings.Designer.cs index 0bc1e7f..eb7c55c 100644 --- a/AssetStudio.GUI/Properties/Settings.Designer.cs +++ b/AssetStudio.GUI/Properties/Settings.Designer.cs @@ -431,18 +431,6 @@ namespace AssetStudio.GUI.Properties { } } - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool enableVerbose { - get { - return ((bool)(this["enableVerbose"])); - } - set { - this["enableVerbose"] = value; - } - } - [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("{}")] @@ -481,5 +469,17 @@ namespace AssetStudio.GUI.Properties { this["allowDuplicates"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("30")] + public int loggerEventType { + get { + return ((int)(this["loggerEventType"])); + } + set { + this["loggerEventType"] = value; + } + } } } diff --git a/AssetStudio.GUI/Properties/Settings.settings b/AssetStudio.GUI/Properties/Settings.settings index fdec7c4..5aa83b0 100644 --- a/AssetStudio.GUI/Properties/Settings.settings +++ b/AssetStudio.GUI/Properties/Settings.settings @@ -104,9 +104,6 @@ True - - False - {} @@ -116,5 +113,8 @@ False + + 30 + \ No newline at end of file diff --git a/AssetStudio/ILogger.cs b/AssetStudio/ILogger.cs index 474e479..9655a37 100644 --- a/AssetStudio/ILogger.cs +++ b/AssetStudio/ILogger.cs @@ -6,30 +6,40 @@ using System.Text; namespace AssetStudio { + [Flags] public enum LoggerEvent { - Verbose, - Debug, - Info, - Warning, - Error, + None = 0, + Verbose = 1, + Debug = 2, + Info = 4, + Warning = 8, + Error = 16, + Default = Debug | Info | Warning | Error, + All = Verbose | Debug | Info | Warning | Error, } public interface ILogger { - void Log(LoggerEvent loggerEvent, string message, bool silent = false); + public bool Silent { get; set; } + public LoggerEvent Flags { get; set; } + void Log(LoggerEvent loggerEvent, string message); } public sealed class DummyLogger : ILogger { - public void Log(LoggerEvent loggerEvent, string message, bool silent = false) { } + public bool Silent { get; set; } + public LoggerEvent Flags { get; set; } + public void Log(LoggerEvent loggerEvent, string message) { } } public sealed class ConsoleLogger : ILogger { - public void Log(LoggerEvent loggerEvent, string message, bool silent = false) + public bool Silent { get; set; } + public LoggerEvent Flags { get; set; } + public void Log(LoggerEvent loggerEvent, string message) { - if (silent) + if (!Flags.HasFlag(loggerEvent) || Silent) return; Console.WriteLine("[{0}] {1}", loggerEvent, message); @@ -41,9 +51,10 @@ namespace AssetStudio private const string LogFileName = "log.txt"; private const string PrevLogFileName = "log_prev.txt"; private readonly object LockWriter = new object(); + private StreamWriter Writer; - public StreamWriter Writer; - + public bool Silent { get; set; } + public LoggerEvent Flags { get; set; } public FileLogger() { var logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LogFileName); @@ -57,11 +68,11 @@ namespace AssetStudio } ~FileLogger() { - Writer?.Dispose(); + Dispose(); } - public void Log(LoggerEvent loggerEvent, string message, bool silent = false) + public void Log(LoggerEvent loggerEvent, string message) { - if (silent) + if (!Flags.HasFlag(loggerEvent) || Silent) return; lock (LockWriter) @@ -69,5 +80,10 @@ namespace AssetStudio Writer.WriteLine($"[{DateTime.Now}][{loggerEvent}] {message}"); } } + + public void Dispose() + { + Writer?.Dispose(); + } } } diff --git a/AssetStudio/Logger.cs b/AssetStudio/Logger.cs index a79695c..e6924a9 100644 --- a/AssetStudio/Logger.cs +++ b/AssetStudio/Logger.cs @@ -12,8 +12,12 @@ namespace AssetStudio public static ILogger Default = new DummyLogger(); public static ILogger File; - public static bool Silent = false; - public static bool LogVerbose = false; + + public static bool Silent + { + get => Default.Silent; + set => Default.Silent = value; + } public static bool FileLogging { @@ -36,7 +40,7 @@ namespace AssetStudio } else { - ((FileLogger)File)?.Writer?.Dispose(); + ((FileLogger)File)?.Dispose(); File = null; } } @@ -44,41 +48,38 @@ namespace AssetStudio public static void Verbose(string message) { - if (LogVerbose) + try { - try + var callerMethod = new StackTrace().GetFrame(1).GetMethod(); + var callerMethodClass = callerMethod.ReflectedType.Name; + if (!string.IsNullOrEmpty(callerMethodClass)) { - var callerMethod = new StackTrace().GetFrame(1).GetMethod(); - var callerMethodClass = callerMethod.ReflectedType.Name; - if (!string.IsNullOrEmpty(callerMethodClass)) - { - message = $"[{callerMethodClass}] {message}"; - } + message = $"[{callerMethodClass}] {message}"; } - catch (Exception) { } - if (FileLogging) File.Log(LoggerEvent.Verbose, message); - Default.Log(LoggerEvent.Verbose, message, Silent); } + catch (Exception) { } + if (FileLogging) File.Log(LoggerEvent.Verbose, message); + Default.Log(LoggerEvent.Verbose, message); } public static void Debug(string message) { if (FileLogging) File.Log(LoggerEvent.Debug, message); - Default.Log(LoggerEvent.Debug, message, Silent); + Default.Log(LoggerEvent.Debug, message); } public static void Info(string message) { if (FileLogging) File.Log(LoggerEvent.Info, message); - Default.Log(LoggerEvent.Info, message, Silent); + Default.Log(LoggerEvent.Info, message); } public static void Warning(string message) { if (FileLogging) File.Log(LoggerEvent.Warning, message); - Default.Log(LoggerEvent.Warning, message, Silent); + Default.Log(LoggerEvent.Warning, message); } public static void Error(string message) { if (FileLogging) File.Log(LoggerEvent.Error, message); - Default.Log(LoggerEvent.Error, message, Silent); + Default.Log(LoggerEvent.Error, message); } public static void Error(string message, Exception e) @@ -89,7 +90,7 @@ namespace AssetStudio message = sb.ToString(); if (FileLogging) File.Log(LoggerEvent.Error, message); - Default.Log(LoggerEvent.Error, message, Silent); + Default.Log(LoggerEvent.Error, message); } } }