From 3feab2593da8ff15af4df76c92c657d23a972cd3 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 6 Aug 2025 08:55:08 -0500 Subject: [PATCH] fix: use correct line endings for verbatim strings --- src/PepperDash.Core/Logging/Debug.cs | 222 +++++++++--------- src/PepperDash.Core/PepperDash.Core.csproj | 5 - .../Devices/DeviceManager.cs | 6 +- .../Factory/DeviceFactory.cs | 59 +++-- 4 files changed, 142 insertions(+), 150 deletions(-) diff --git a/src/PepperDash.Core/Logging/Debug.cs b/src/PepperDash.Core/Logging/Debug.cs index b3e7452a..a322de1c 100644 --- a/src/PepperDash.Core/Logging/Debug.cs +++ b/src/PepperDash.Core/Logging/Debug.cs @@ -1,8 +1,7 @@ -extern alias NewtonsoftJson; +extern alias NewtonsoftJson; using System; using System.Collections.Generic; -using System.Net; using System.Reflection; using System.Text.RegularExpressions; using Crestron.SimplSharp; @@ -101,17 +100,19 @@ public static class Debug /// /// Version for the currently loaded PepperDashCore dll /// - public static string PepperDashCoreVersion { get; private set; } + public static string PepperDashCoreVersion { get; private set; } private static CTimer _saveTimer; - /// - /// When true, the IncludedExcludedKeys dict will contain keys to include. - /// When false (default), IncludedExcludedKeys will contain keys to exclude. - /// - private static bool _excludeAllMode; + /// + /// When true, the IncludedExcludedKeys dict will contain keys to include. + /// When false (default), IncludedExcludedKeys will contain keys to exclude. + /// + private static bool _excludeAllMode; - private static readonly Dictionary IncludedExcludedKeys; + //static bool ExcludeNoKeyMessages; + + private static readonly Dictionary IncludedExcludedKeys; private static readonly LoggerConfiguration _defaultLoggerConfiguration; @@ -255,7 +256,7 @@ public static class Debug { try { - var result = CrestronDataStoreStatic.GetLocalIntValue(levelStoreKey, out int logLevel); + var result = CrestronDataStoreStatic.GetLocalIntValue(levelStoreKey, out int logLevel); if (result != CrestronDataStore.CDS_ERROR.CDS_SUCCESS) { @@ -263,14 +264,15 @@ public static class Debug return LogEventLevel.Information; } - if(logLevel < 0 || logLevel > 5) + if (logLevel < 0 || logLevel > 5) { CrestronConsole.PrintLine($"Stored Log level not valid for {levelStoreKey}: {logLevel}. Setting level to {LogEventLevel.Information}"); return LogEventLevel.Information; } return (LogEventLevel)logLevel; - } catch (Exception ex) + } + catch (Exception ex) { CrestronConsole.PrintLine($"Exception retrieving log level for {levelStoreKey}: {ex.Message}"); return LogEventLevel.Information; @@ -282,7 +284,7 @@ public static class Debug var assembly = Assembly.GetExecutingAssembly(); var ver = assembly - .GetCustomAttributes(typeof (AssemblyInformationalVersionAttribute), false); + .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); if (ver != null && ver.Length > 0) { @@ -330,13 +332,13 @@ public static class Debug if (levelString.Trim() == "?") { CrestronConsole.ConsoleCommandResponse( - $@"Used to set the minimum level of debug messages to be printed to the console: -{_logLevels[0]} = 0 -{_logLevels[1]} = 1 -{_logLevels[2]} = 2 -{_logLevels[3]} = 3 -{_logLevels[4]} = 4 -{_logLevels[5]} = 5"); + "Used to set the minimum level of debug messages to be printed to the console:\r\n" + + $"{_logLevels[0]} = 0\r\n" + + $"{_logLevels[1]} = 1\r\n" + + $"{_logLevels[2]} = 2\r\n" + + $"{_logLevels[3]} = 3\r\n" + + $"{_logLevels[4]} = 4\r\n" + + $"{_logLevels[5]} = 5"); return; } @@ -346,25 +348,25 @@ public static class Debug return; } - if(int.TryParse(levelString, out var levelInt)) + if (int.TryParse(levelString, out var levelInt)) { - if(levelInt < 0 || levelInt > 5) + if (levelInt < 0 || levelInt > 5) { CrestronConsole.ConsoleCommandResponse($"Error: Unable to parse {levelString} to valid log level. If using a number, value must be between 0-5"); return; } - SetDebugLevel((uint) levelInt); + SetDebugLevel((uint)levelInt); return; } - if(Enum.TryParse(levelString, out var levelEnum)) + if (Enum.TryParse(levelString, out var levelEnum)) { SetDebugLevel(levelEnum); return; } CrestronConsole.ConsoleCommandResponse($"Error: Unable to parse {levelString} to valid log level"); - } + } catch { CrestronConsole.ConsoleCommandResponse("Usage: appdebug:P [0-5]"); @@ -377,7 +379,7 @@ public static class Debug /// Valid values 0-5 public static void SetDebugLevel(uint level) { - if(!_logLevels.TryGetValue(level, out var logLevel)) + if (!_logLevels.TryGetValue(level, out var logLevel)) { logLevel = LogEventLevel.Information; @@ -396,9 +398,9 @@ public static class Debug CrestronConsole.ConsoleCommandResponse("[Application {0}], Debug level set to {1}\r\n", InitialParametersClass.ApplicationNumber, _consoleLoggingLevelSwitch.MinimumLevel); - CrestronConsole.ConsoleCommandResponse($"Storing level {level}:{(int) level}"); + CrestronConsole.ConsoleCommandResponse($"Storing level {level}:{(int)level}"); - var err = CrestronDataStoreStatic.SetLocalIntValue(LevelStoreKey, (int) level); + var err = CrestronDataStoreStatic.SetLocalIntValue(LevelStoreKey, (int)level); CrestronConsole.ConsoleCommandResponse($"Store result: {err}:{(int)level}"); @@ -408,9 +410,9 @@ public static class Debug public static void SetWebSocketMinimumDebugLevel(LogEventLevel level) { - _websocketLoggingLevelSwitch.MinimumLevel = level; + _websocketLoggingLevelSwitch.MinimumLevel = level; - var err = CrestronDataStoreStatic.SetLocalUintValue(WebSocketLevelStoreKey, (uint) level); + var err = CrestronDataStoreStatic.SetLocalUintValue(WebSocketLevelStoreKey, (uint)level); if (err != CrestronDataStore.CDS_ERROR.CDS_SUCCESS) LogMessage(LogEventLevel.Information, "Error saving websocket debug level setting: {erro}", err); @@ -468,80 +470,80 @@ public static class Debug /// Callback for console command /// /// - public static void SetDebugFilterFromConsole(string items) - { - var str = items.Trim(); - if (str == "?") - { - CrestronConsole.ConsoleCommandResponse("Usage:\r APPDEBUGFILTER key1 key2 key3....\r " + - "+all: at beginning puts filter into 'default include' mode\r" + - " All keys that follow will be excluded from output.\r" + - "-all: at beginning puts filter into 'default exclude all' mode.\r" + - " All keys that follow will be the only keys that are shown\r" + - "+nokey: Enables messages with no key (default)\r" + - "-nokey: Disables messages with no key.\r" + - "(nokey settings are independent of all other settings)"); - return; - } - var keys = Regex.Split(str, @"\s*"); - foreach (var keyToken in keys) - { - var lkey = keyToken.ToLower(); - if (lkey == "+all") - { - IncludedExcludedKeys.Clear(); - _excludeAllMode = false; - } - else if (lkey == "-all") - { - IncludedExcludedKeys.Clear(); - _excludeAllMode = true; - } - //else if (lkey == "+nokey") - //{ - // ExcludeNoKeyMessages = false; - //} - //else if (lkey == "-nokey") - //{ - // ExcludeNoKeyMessages = true; - //} - else - { - string key; - if (lkey.StartsWith("-")) - { - key = lkey.Substring(1); - // if in exclude all mode, we need to remove this from the inclusions - if (_excludeAllMode) - { - if (IncludedExcludedKeys.ContainsKey(key)) - IncludedExcludedKeys.Remove(key); - } - // otherwise include all mode, add to the exclusions - else - { - IncludedExcludedKeys[key] = new object(); - } - } - else if (lkey.StartsWith("+")) - { - key = lkey.Substring(1); - // if in exclude all mode, we need to add this as inclusion - if (_excludeAllMode) - { + public static void SetDebugFilterFromConsole(string items) + { + var str = items.Trim(); + if (str == "?") + { + CrestronConsole.ConsoleCommandResponse("Usage:\r APPDEBUGFILTER key1 key2 key3....\r " + + "+all: at beginning puts filter into 'default include' mode\r" + + " All keys that follow will be excluded from output.\r" + + "-all: at beginning puts filter into 'default exclude all' mode.\r" + + " All keys that follow will be the only keys that are shown\r" + + "+nokey: Enables messages with no key (default)\r" + + "-nokey: Disables messages with no key.\r" + + "(nokey settings are independent of all other settings)"); + return; + } + var keys = Regex.Split(str, @"\s*"); + foreach (var keyToken in keys) + { + var lkey = keyToken.ToLower(); + if (lkey == "+all") + { + IncludedExcludedKeys.Clear(); + _excludeAllMode = false; + } + else if (lkey == "-all") + { + IncludedExcludedKeys.Clear(); + _excludeAllMode = true; + } + //else if (lkey == "+nokey") + //{ + // ExcludeNoKeyMessages = false; + //} + //else if (lkey == "-nokey") + //{ + // ExcludeNoKeyMessages = true; + //} + else + { + string key; + if (lkey.StartsWith("-")) + { + key = lkey.Substring(1); + // if in exclude all mode, we need to remove this from the inclusions + if (_excludeAllMode) + { + if (IncludedExcludedKeys.ContainsKey(key)) + IncludedExcludedKeys.Remove(key); + } + // otherwise include all mode, add to the exclusions + else + { + IncludedExcludedKeys[key] = new object(); + } + } + else if (lkey.StartsWith("+")) + { + key = lkey.Substring(1); + // if in exclude all mode, we need to add this as inclusion + if (_excludeAllMode) + { - IncludedExcludedKeys[key] = new object(); - } - // otherwise include all mode, remove this from exclusions - else - { - if (IncludedExcludedKeys.ContainsKey(key)) - IncludedExcludedKeys.Remove(key); - } + IncludedExcludedKeys[key] = new object(); + } + // otherwise include all mode, remove this from exclusions + else + { + if (IncludedExcludedKeys.ContainsKey(key)) + IncludedExcludedKeys.Remove(key); } } } } + } @@ -566,7 +568,7 @@ public static class Debug public static object GetDeviceDebugSettingsForKey(string deviceKey) { return _contexts.GetDebugSettingsForKey(deviceKey); - } + } /// /// Sets the flag to prevent application starting on next boot @@ -626,7 +628,7 @@ public static class Debug public static void LogMessage(LogEventLevel level, string message, params object[] args) { - _logger.Write(level, message, args); + _logger.Write(level, message, args); } public static void LogMessage(LogEventLevel level, Exception ex, string message, params object[] args) @@ -650,7 +652,7 @@ public static class Debug #region Explicit methods for logging levels public static void LogVerbose(IKeyed keyed, string message, params object[] args) { - using(LogContext.PushProperty("Key", keyed?.Key)) + using (LogContext.PushProperty("Key", keyed?.Key)) { _logger.Write(LogEventLevel.Verbose, message, args); } @@ -658,7 +660,7 @@ public static class Debug public static void LogVerbose(Exception ex, IKeyed keyed, string message, params object[] args) { - using(LogContext.PushProperty("Key", keyed?.Key)) + using (LogContext.PushProperty("Key", keyed?.Key)) { _logger.Write(LogEventLevel.Verbose, ex, message, args); } @@ -812,7 +814,7 @@ public static class Debug if (!_logLevels.ContainsKey(level)) return; var logLevel = _logLevels[level]; - + LogMessage(logLevel, format, items); } @@ -849,7 +851,7 @@ public static class Debug } /// - /// Logs to Console when at-level, and all messages to error log, including device key + /// Logs to Console when at-level, and all messages to error log, including device key /// [Obsolete("Use LogMessage methods, Will be removed in 2.2.0 and later versions")] public static void Console(uint level, IKeyed dev, string format, params object[] items) @@ -867,7 +869,7 @@ public static class Debug [Obsolete("Use LogMessage methods, Will be removed in 2.2.0 and later versions")] public static void Console(uint level, IKeyed dev, ErrorLogLevel errorLogLevel, string format, params object[] items) - { + { LogMessage(level, dev, format, items); } @@ -1005,7 +1007,7 @@ public static class Debug return string.Format(@"\user\debugSettings\program{0}", InitialParametersClass.ApplicationNumber); } - return string.Format("{0}{1}user{1}debugSettings{1}{2}.json",Directory.GetApplicationRootDirectory(), Path.DirectorySeparatorChar, InitialParametersClass.RoomId); + return string.Format("{0}{1}user{1}debugSettings{1}{2}.json", Directory.GetApplicationRootDirectory(), Path.DirectorySeparatorChar, InitialParametersClass.RoomId); } /// @@ -1016,15 +1018,15 @@ public static class Debug /// /// Error /// - Error, + Error, /// /// Warning /// - Warning, + Warning, /// /// Notice /// - Notice, + Notice, /// /// None /// diff --git a/src/PepperDash.Core/PepperDash.Core.csproj b/src/PepperDash.Core/PepperDash.Core.csproj index d35414f6..5d079434 100644 --- a/src/PepperDash.Core/PepperDash.Core.csproj +++ b/src/PepperDash.Core/PepperDash.Core.csproj @@ -55,11 +55,6 @@ - - - global,NewtonsoftJson - - diff --git a/src/PepperDash.Essentials.Core/Devices/DeviceManager.cs b/src/PepperDash.Essentials.Core/Devices/DeviceManager.cs index 915b10d0..dc9115d3 100644 --- a/src/PepperDash.Essentials.Core/Devices/DeviceManager.cs +++ b/src/PepperDash.Essentials.Core/Devices/DeviceManager.cs @@ -461,9 +461,9 @@ public static class DeviceManager if (String.IsNullOrEmpty(s) || s.Contains("?")) { CrestronConsole.ConsoleCommandResponse( - @"SETDEVICESTREAMDEBUG [{deviceKey}] [OFF |TX | RX | BOTH] [timeOutInMinutes] - {deviceKey} [OFF | TX | RX | BOTH] - Device to set stream debugging on, and which setting to use - timeOutInMinutes - Set timeout for stream debugging. Default is 30 minutes"); + "SETDEVICESTREAMDEBUG [{deviceKey}] [OFF |TX | RX | BOTH] [timeOutInMinutes]\r\n" + + " {deviceKey} [OFF | TX | RX | BOTH] - Device to set stream debugging on, and which setting to use\r\n" + + " timeOutInMinutes - Set timeout for stream debugging. Default is 30 minutes"); return; } diff --git a/src/PepperDash.Essentials.Core/Factory/DeviceFactory.cs b/src/PepperDash.Essentials.Core/Factory/DeviceFactory.cs index 6726e763..e3591297 100644 --- a/src/PepperDash.Essentials.Core/Factory/DeviceFactory.cs +++ b/src/PepperDash.Essentials.Core/Factory/DeviceFactory.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.IO; using System.Linq; using System.Reflection; @@ -10,15 +11,9 @@ using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core.Config; using Serilog.Events; -using System; -using System.Collections.Generic; -using System.Linq; -using System.ComponentModel.DataAnnotations; -using System.IO; namespace PepperDash.Essentials.Core; - /// /// Provides functionality for managing and registering device factories, including loading plugin-based factories and /// retrieving devices based on their configuration. @@ -39,14 +34,14 @@ public class DeviceFactory /// instantiated, an informational log message is generated, and the process continues with the remaining /// types. public DeviceFactory() - { + { var programAssemblies = Directory.GetFiles(InitialParametersClass.ProgramDirectory.ToString(), "*.dll"); - foreach(var assembly in programAssemblies) + foreach (var assembly in programAssemblies) { try { - Assembly.LoadFrom(assembly); + Assembly.LoadFrom(assembly); } catch (Exception e) { @@ -54,7 +49,7 @@ public class DeviceFactory } } - var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); // Loop through all loaded assemblies that contain at least 1 type that implements IDeviceFactory foreach (var assembly in loadedAssemblies) @@ -65,7 +60,7 @@ public class DeviceFactory var types = assembly.GetTypes().Where(ct => typeof(IDeviceFactory).IsAssignableFrom(ct) && !ct.IsInterface && !ct.IsAbstract); - if(types == null || !types.Any()) + if (types == null || !types.Any()) { Debug.LogDebug("No DeviceFactory types found in assembly: {assemblyName}", assembly.GetName().Name); continue; @@ -83,8 +78,8 @@ public class DeviceFactory Debug.LogError("Unable to load type: '{message}' DeviceFactory: {type}", e.Message, type.Name); } } - - } + + } } /// @@ -113,7 +108,7 @@ public class DeviceFactory private static readonly Dictionary FactoryMethods = new(StringComparer.OrdinalIgnoreCase); - /// + /// /// Registers a factory method for creating instances of a specific type. /// /// This method associates a type name with a factory method, allowing instances of the type to @@ -122,10 +117,10 @@ public class DeviceFactory /// The name of the type for which the factory method is being registered. This value cannot be null or empty. /// A delegate that defines the factory method. The delegate takes a parameter and /// returns an instance of . - public static void AddFactoryForType(string typeName, Func method) - { - FactoryMethods.Add(typeName, new DeviceFactoryWrapper() { FactoryMethod = method}); - } + public static void AddFactoryForType(string typeName, Func method) + { + FactoryMethods.Add(typeName, new DeviceFactoryWrapper() { FactoryMethod = method }); + } /// /// Registers a factory method for creating instances of a specific device type. @@ -139,7 +134,7 @@ public class DeviceFactory /// cref="IKeyed"/>. public static void AddFactoryForType(string typeName, string description, Type Type, Func method) { - if(FactoryMethods.ContainsKey(typeName)) + if (FactoryMethods.ContainsKey(typeName)) { Debug.LogInformation("Unable to add type: '{typeName}'. Already exists in DeviceFactory", typeName); return; @@ -157,7 +152,7 @@ public class DeviceFactory if (prop.Name.Equals("secret", StringComparison.CurrentCultureIgnoreCase)) { var secret = GetSecret(prop.Children().First().ToObject()); - + prop.Parent.Replace(secret); } if (prop.Value is not JObject recurseProp) return; @@ -170,7 +165,7 @@ public class DeviceFactory var secretProvider = SecretsManager.GetSecretProviderByKey(data.Provider); if (secretProvider == null) return null; var secret = secretProvider.GetSecret(data.Key); - if (secret != null) return (string) secret.Value; + if (secret != null) return (string)secret.Value; Debug.LogMessage(LogEventLevel.Debug, "Unable to retrieve secret {0}{1} - Make sure you've added it to the secrets provider", data.Provider, data.Key); @@ -191,7 +186,7 @@ public class DeviceFactory public static IKeyed GetDevice(DeviceConfig dc) { try - { + { var localDc = new DeviceConfig(dc); var key = localDc.Key; @@ -253,23 +248,23 @@ public class DeviceFactory } CrestronConsole.ConsoleCommandResponse( - @"Type: '{0}' - Type: '{1}' - Description: {2}{3}", type.Key, Type, description, CrestronEnvironment.NewLine); + "Type: '{0}'\r\n" + + " Type: '{1}'\r\n" + + " Description: {2}{3}", type.Key, Type, description, CrestronEnvironment.NewLine); } } - /// + /// /// Retrieves a dictionary of device factory wrappers, optionally filtered by a specified string. /// /// A string used to filter the dictionary keys. Only entries with keys containing the specified filter will be /// included. If or empty, all entries are returned. /// A dictionary where the keys are strings representing device identifiers and the values are instances. The dictionary may be empty if no entries match the filter. - public static Dictionary GetDeviceFactoryDictionary(string filter) - { - return string.IsNullOrEmpty(filter) - ? FactoryMethods - : FactoryMethods.Where(k => k.Key.Contains(filter)).ToDictionary(k => k.Key, k => k.Value); - } + public static Dictionary GetDeviceFactoryDictionary(string filter) + { + return string.IsNullOrEmpty(filter) + ? FactoryMethods + : FactoryMethods.Where(k => k.Key.Contains(filter)).ToDictionary(k => k.Key, k => k.Value); + } }