diff --git a/installer/DesktopMagic-Installer.exe b/installer/DesktopMagic-Installer.exe index eb12afc..279bb1a 100644 Binary files a/installer/DesktopMagic-Installer.exe and b/installer/DesktopMagic-Installer.exe differ diff --git a/installer/Installer.iss b/installer/Installer.iss index c1de1ef..71a2c34 100644 --- a/installer/Installer.iss +++ b/installer/Installer.iss @@ -4,7 +4,7 @@ #expr Exec('cmd.exe /C ', 'dotnet build -o "' + SourcePath + '\publish" -c Release ' + SourcePath + '..\src\DesktopMagic\') #define MyAppName "DesktopMagic" -#define MyAppVersion GetVersionNumbersString("/publish/DesktopMagic.exe") +#define MyAppVersion GetStringFileInfo("/publish/DesktopMagic.exe","ProductVersion") #define MyAppPublisher "Stone_Red" #define MyAppExeName "DesktopMagic.exe" diff --git a/src/DesktopMagic/App.xaml b/src/DesktopMagic/App.xaml index fd07349..e943dca 100644 --- a/src/DesktopMagic/App.xaml +++ b/src/DesktopMagic/App.xaml @@ -8,8 +8,10 @@ - + + + diff --git a/src/DesktopMagic/App.xaml.cs b/src/DesktopMagic/App.xaml.cs index 25ce5ed..a4949bf 100644 --- a/src/DesktopMagic/App.xaml.cs +++ b/src/DesktopMagic/App.xaml.cs @@ -1,6 +1,4 @@ -global using Stone_Red_Utilities.Logging; - -using Stone_Red_C_Sharp_Utilities.Logging; +using CuteUtils.Logging; using System; using System.IO; @@ -17,20 +15,57 @@ public partial class App : Application public const string AppGuid = "{{61FE5CE9-47C3-4255-A1F4-5BCF4ACA0879}"; public const string AppName = "Desktop Magic"; - private readonly string logFilePath; + + private static readonly string logFilePath = Path.Combine(ApplicationDataPath, $"{AppName}.log"); private readonly Thread? eventThread; + private readonly EventWaitHandle eventWaitHandle; - private readonly Logger logger = new Logger(); - public static string ApplicationDataPath { get; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "StoneRed", AppName); + public static Logger Logger { get; } = new Logger() + { + Config = new() + { + FatalConfig = new OutputConfig() + { + ConsoleColor = ConsoleColor.DarkRed, + LogTarget = LogTarget.DebugConsole | LogTarget.File, + FilePath = logFilePath + }, + ErrorConfig = new OutputConfig() + { + ConsoleColor = ConsoleColor.Red, + LogTarget = LogTarget.DebugConsole | LogTarget.File, + FilePath = logFilePath + }, + WarnConfig = new OutputConfig() + { + ConsoleColor = ConsoleColor.Yellow, + LogTarget = LogTarget.DebugConsole | LogTarget.File, + FilePath = logFilePath + }, + InfoConfig = new OutputConfig() + { + ConsoleColor = ConsoleColor.White, + LogTarget = LogTarget.DebugConsole | LogTarget.File, + FilePath = logFilePath + }, + DebugConfig = new OutputConfig() + { + ConsoleColor = ConsoleColor.Gray, + LogTarget = LogTarget.DebugConsole, + }, + FormatConfig = new FormatConfig() + { + DebugConsoleFormat = $"> {{{LogFormatType.DateTime}:HH:mm:ss}} | {{{LogFormatType.LogSeverity},-5}} | {{{LogFormatType.Message}}}\nat {{{LogFormatType.LineNumber}}} | {{{LogFormatType.FilePath}}}" + } + } + }; - public static Logger Logger => ((App)Current).logger; + public static string ApplicationDataPath => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "StoneRed", AppName); public App() { - logFilePath = ApplicationDataPath + "\\log.log"; - // Setup global event handler eventWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, AppGuid, out bool createdNew); @@ -38,7 +73,7 @@ public partial class App : Application if (!createdNew) { Setup(false); - Logger.Log("Shutting down because other instance already running.", "Setup", LogSeverity.Warn); + Logger.LogWarn("Shutting down because other instance already running.", source: "Setup"); //Shutdown Application _ = eventWaitHandle.Set(); Current.Shutdown(); @@ -71,50 +106,13 @@ public partial class App : Application { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - Logger.Config = new LogConfig() - { - FatalConfig = new OutputConfig() - { - Color = ConsoleColor.DarkRed, - LogTarget = LogTarget.DebugConsole | LogTarget.File, - FilePath = logFilePath - }, - ErrorConfig = new OutputConfig() - { - Color = ConsoleColor.Red, - LogTarget = LogTarget.DebugConsole | LogTarget.File, - FilePath = logFilePath - }, - WarnConfig = new OutputConfig() - { - Color = ConsoleColor.Yellow, - LogTarget = LogTarget.DebugConsole | LogTarget.File, - FilePath = logFilePath - }, - InfoConfig = new OutputConfig() - { - Color = ConsoleColor.White, - LogTarget = LogTarget.DebugConsole | LogTarget.File, - FilePath = logFilePath - }, - DebugConfig = new OutputConfig() - { - Color = ConsoleColor.Gray, - LogTarget = LogTarget.DebugConsole, - }, - FormatConfig = new FormatConfig() - { - DebugConsoleFormat = $"> {{{LogFormatType.DateTime}:HH:mm:ss}} | {{{LogFormatType.LogSeverity},-5}} | {{{LogFormatType.Message}}}\nat {{{LogFormatType.LineNumber}}} | {{{LogFormatType.FilePath}}}" - } - }; - try { if (!Directory.Exists(ApplicationDataPath)) { _ = Directory.CreateDirectory(ApplicationDataPath); } - Logger.Log("Created ApplicationData Folder", "Main"); + Logger.LogInfo("Created ApplicationData Folder", source: "Main"); } catch (Exception ex) { @@ -127,12 +125,12 @@ public partial class App : Application Logger.ClearLogFile(LogSeverity.Info); } - Logger.Log("Log setup complete", "Setup"); + Logger.LogInfo("Setup complete", source: "Setup"); } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception exception = (Exception)e.ExceptionObject; - Logger.Log(exception + (e.IsTerminating ? "\t Process terminating!" : ""), exception.Source, LogSeverity.Fatal); + Logger.LogFatal(exception + (e.IsTerminating ? "\t Process terminating!" : ""), source: exception.Source ?? "Unknown"); } } \ No newline at end of file diff --git a/src/DesktopMagic/BuiltInWindowElements/MusicVisualizerPlugin.cs b/src/DesktopMagic/BuiltInWindowElements/MusicVisualizerPlugin.cs index 12eb17c..50eb70a 100644 --- a/src/DesktopMagic/BuiltInWindowElements/MusicVisualizerPlugin.cs +++ b/src/DesktopMagic/BuiltInWindowElements/MusicVisualizerPlugin.cs @@ -272,7 +272,7 @@ internal class MusicVisualizerPlugin : Plugin } catch (Exception ex) { - App.Logger.Log(ex.Message, "Music Visualizer", LogSeverity.Error); + App.Logger.LogError(ex.Message, source: "Music Visualizer"); } } diff --git a/src/DesktopMagic/DesktopMagic.csproj b/src/DesktopMagic/DesktopMagic.csproj index 70bf0fa..ed6c720 100644 --- a/src/DesktopMagic/DesktopMagic.csproj +++ b/src/DesktopMagic/DesktopMagic.csproj @@ -1,60 +1,61 @@  - - WinExe - true - DesktopMagic - icon.ico - OnBuildSuccess - Stone_Red - 1.0.1.0 - https://github.com/Stone-Red-Code/DesktopMagic - https://github.com/Stone-Red-Code/DesktopMagic - 1.0.1.0 - 1.0.1.0 - net8.0-windows7.0 - enable - + + WinExe + true + DesktopMagic + icon.ico + OnBuildSuccess + Stone_Red + 1.0.1.240501 + https://github.com/Stone-Red-Code/DesktopMagic + https://github.com/Stone-Red-Code/DesktopMagic + 1.0.1.0501 + 1.0.1.0501 + net8.0-windows7.0 + enable + false + - - DEBUG;TRACE - + + DEBUG;TRACE + - - - - - - - + + + + + + + - - - Never - - + + + Never + + - - - - - - - - - + + + + + + + + + - - - + + + - - - Always - - - Always - - - + + + Always + + + Always + + + \ No newline at end of file diff --git a/src/DesktopMagic/GlobalSuppressions.cs b/src/DesktopMagic/GlobalSuppressions.cs index c4ac37e..8b907aa 100644 --- a/src/DesktopMagic/GlobalSuppressions.cs +++ b/src/DesktopMagic/GlobalSuppressions.cs @@ -9,3 +9,4 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "No need to")] [assembly: SuppressMessage("Minor Code Smell", "S1075:URIs should not be hardcoded", Justification = "")] [assembly: SuppressMessage("Critical Code Smell", "S2696:Instance members should not write to \"static\" fields", Justification = "", Scope = "member", Target = "~P:DesktopMagic.DataContexts.MainWindowDataContext.Settings")] +[assembly: SuppressMessage("Major Code Smell", "S3885:\"Assembly.Load\" should be used", Justification = "Assembly.Load does not load dependencies", Scope = "member", Target = "~M:DesktopMagic.PluginWindow.ExecuteSource")] diff --git a/src/DesktopMagic/Helpers/SettingElementGenerator.cs b/src/DesktopMagic/Helpers/SettingElementGenerator.cs index 0e85262..4c6e3ef 100644 --- a/src/DesktopMagic/Helpers/SettingElementGenerator.cs +++ b/src/DesktopMagic/Helpers/SettingElementGenerator.cs @@ -222,7 +222,7 @@ internal class SettingElementGenerator(ComboBox optionsComboBox) private void DisplayException(string message) { - App.Logger.Log(message, "PluginInput"); + App.Logger.LogInfo(message, source: "PluginInput"); _ = MessageBox.Show("File execution error:\n" + message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); int index = MainWindow.WindowNames.IndexOf(optionsComboBox.SelectedItem.ToString() ?? string.Empty); diff --git a/src/DesktopMagic/MainWindow.xaml.cs b/src/DesktopMagic/MainWindow.xaml.cs index 4dcf35d..85df4d1 100644 --- a/src/DesktopMagic/MainWindow.xaml.cs +++ b/src/DesktopMagic/MainWindow.xaml.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.IO.Packaging; using System.Linq; using System.Reflection; using System.Text.Json; @@ -63,9 +64,9 @@ namespace DesktopMagic SetLanguageDictionary(); #if DEBUG - Title = $"{App.AppName} - Dev {Assembly.GetExecutingAssembly().GetName().Version}"; + Title = $"{App.AppName} - Dev {System.Windows.Forms.Application.ProductVersion}"; #else - Title = $"{App.AppName} - {Assembly.GetExecutingAssembly().GetName().Version}"; + Title = $"{App.AppName} - {System.Windows.Forms.Application.ProductVersion}"; #endif } catch (Exception ex) @@ -86,23 +87,23 @@ namespace DesktopMagic { _ = Directory.CreateDirectory(App.ApplicationDataPath + "\\Plugins"); } - App.Logger.Log("Created Plugins Folder", "Main"); + App.Logger.LogInfo("Created Plugins Folder", source: "Main"); //Write To Log File and Load Elements - App.Logger.Log("Loading Plugin names", "Main"); + App.Logger.LogInfo("Loading Plugin names", source: "Main"); LoadPlugins(); - App.Logger.Log("Loading Layout names", "Main"); + App.Logger.LogInfo("Loading Layout names", source: "Main"); LoadSettings(); - App.Logger.Log("Loading Layout", "Main"); + App.Logger.LogInfo("Loading Layout", source: "Main"); LoadLayout(); loaded = true; - App.Logger.Log("Window Loaded", "Main"); + App.Logger.LogInfo("Window Loaded", source: "Main"); } catch (Exception ex) { - App.Logger.Log(ex.Message, "Main", LogSeverity.Error); + App.Logger.LogError(ex.Message, source: "Main"); _ = MessageBox.Show(ex.ToString()); } } @@ -126,13 +127,13 @@ namespace DesktopMagic if (pluginDllPath is null) { - App.Logger.Log($"Plugin \"{directory}\" has no \"main.dll\"", "Main", LogSeverity.Error); + App.Logger.LogError($"Plugin \"{directory}\" has no \"main.dll\"", source: "Main"); continue; } if (pluginMetadataPath is null) { - App.Logger.Log($"Plugin \"{directory}\" has no \"metadata.json\"", "Main", LogSeverity.Warn); + App.Logger.LogWarn($"Plugin \"{directory}\" has no \"metadata.json\"", source: "Main"); continue; } @@ -140,13 +141,13 @@ namespace DesktopMagic if (pluginMetadata is null) { - App.Logger.Log($"Plugin \"{directory}\" has no valid \"metadata.json\"", "Main", LogSeverity.Error); + App.Logger.LogError($"Plugin \"{directory}\" has no valid \"metadata.json\"", source: "Main"); continue; } if (plugins.ContainsKey(pluginMetadata.Id)) { - App.Logger.Log($"Plugin \"{directory}\" has the same id as another plugin", "Main", LogSeverity.Error); + App.Logger.LogError($"Plugin \"{directory}\" has the same id as another plugin", source: "Main"); continue; } @@ -204,7 +205,7 @@ namespace DesktopMagic } catch (Exception ex) { - App.Logger.Log(ex.Message, "Main", LogSeverity.Error); + App.Logger.LogError(ex.Message, source: "Main"); } } return; diff --git a/src/DesktopMagic/Plugins/PluginManager.xaml b/src/DesktopMagic/Plugins/PluginManager.xaml index fd3e6e5..49a64dd 100644 --- a/src/DesktopMagic/Plugins/PluginManager.xaml +++ b/src/DesktopMagic/Plugins/PluginManager.xaml @@ -52,7 +52,7 @@ - + @@ -68,30 +68,32 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/DesktopMagic/Plugins/PluginMetadata.cs b/src/DesktopMagic/Plugins/PluginMetadata.cs index a476b82..ba33e5b 100644 --- a/src/DesktopMagic/Plugins/PluginMetadata.cs +++ b/src/DesktopMagic/Plugins/PluginMetadata.cs @@ -7,7 +7,7 @@ namespace DesktopMagic.Plugins; public class PluginMetadata { - public string Name { get; set; } + public string Name { get; set; } = string.Empty; public uint Id { get; set; } diff --git a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs index 1c810b9..3375d1b 100644 --- a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs +++ b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs @@ -121,7 +121,7 @@ public partial class PluginWindow : Window private void Window_ContentRendered(object? sender, EventArgs e) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - Starting plugin thread", "Plugin"); + App.Logger.LogInfo($"\"{PluginMetadata.Name}\" - Starting plugin thread", source: "Plugin"); pluginThread = new Thread(LoadPlugin); pluginThread.Start(); } @@ -172,11 +172,11 @@ public partial class PluginWindow : Window private void LoadPlugin() { - App.Logger.Log($"\"{PluginMetadata.Name}\" - Loading plugin", "Plugin"); + App.Logger.LogInfo($"\"{PluginMetadata.Name}\" - Loading plugin", source: "Plugin"); if (pluginClassInstance is null && !File.Exists($"{PluginFolderPath}\\main.dll")) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - File \"main.dll\" does not exist", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - File \"main.dll\" does not exist", source: "Plugin"); _ = MessageBox.Show("File \"main.dll\" does not exist!", $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); @@ -189,7 +189,7 @@ public partial class PluginWindow : Window } catch (Exception ex) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - {ex}", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - {ex}", source: "Plugin"); _ = MessageBox.Show("File execution error:\n" + ex, $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); return; @@ -202,13 +202,12 @@ public partial class PluginWindow : Window object? instance = pluginClassInstance; if (instance is null) { - byte[] assemblyBytes = File.ReadAllBytes($"{PluginFolderPath}\\main.dll"); - Assembly dll = Assembly.Load(assemblyBytes); + Assembly dll = Assembly.LoadFrom($"{PluginFolderPath}\\main.dll"); Type? instanceType = Array.Find(dll.GetTypes(), type => type.GetTypeInfo().BaseType == typeof(Plugin)); if (instanceType is null) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", source: "Plugin"); _ = MessageBox.Show($"The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); @@ -224,7 +223,7 @@ public partial class PluginWindow : Window } else { - App.Logger.Log($"\"{PluginMetadata.Name}\" - The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", source: "Plugin"); _ = MessageBox.Show($"The \"Plugin\" class has to inherit from \"{typeof(Plugin).FullName}\"", $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); return; @@ -285,7 +284,7 @@ public partial class PluginWindow : Window private void LoadOptions(object instance) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - Loading plugin options", "Plugin"); + App.Logger.LogInfo($"\"{PluginMetadata.Name}\" - Loading plugin options", source: "Plugin"); try { @@ -323,7 +322,7 @@ public partial class PluginWindow : Window catch (Exception ex) { IsRunning = false; - App.Logger.Log($"\"{PluginMetadata.Name}\" - {ex}", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - {ex}", source: "Plugin"); _ = MessageBox.Show("File execution error:\n" + ex, $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); } @@ -368,7 +367,7 @@ public partial class PluginWindow : Window catch (Exception ex) { IsRunning = false; - App.Logger.Log($"\"{PluginMetadata.Name}\" - {ex}", "Plugin", LogSeverity.Error); + App.Logger.LogError($"\"{PluginMetadata.Name}\" - {ex}", source: "Plugin"); _ = MessageBox.Show("File execution error:\n" + ex, $"Error \"{PluginMetadata.Name}\"", MessageBoxButton.OK, MessageBoxImage.Error); Exit(); return; @@ -382,7 +381,7 @@ public partial class PluginWindow : Window private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { - App.Logger.Log($"\"{PluginMetadata.Name}\" - Stopping plugin", "Plugin"); + App.Logger.LogInfo($"\"{PluginMetadata.Name}\" - Stopping plugin", source: "Plugin"); IsRunning = false; pluginClassInstance?.Stop(); }