fix: updated JsonToSimplFileMaster EvaluateFile method, added event arg constant in support of data being passed to simpl

This commit is contained in:
Jason DeVito
2022-06-14 20:19:23 -05:00
parent e1c63f41cf
commit 8be02fa458
2 changed files with 239 additions and 161 deletions

View File

@@ -25,6 +25,16 @@ namespace PepperDash.Core.JsonToSimpl
/// </summary>
public const ushort UshortValueChange = 101;
/// <summary>
/// Reports the Crestron Series enum value
/// </summary>
public const ushort CrestronSeriesValueChange = 102;
/// <summary>
/// Reports the device platform enum value
/// </summary>
public const ushort DevicePlatformValueChange = 103;
/// <summary>
///
/// </summary>
@@ -46,6 +56,16 @@ namespace PepperDash.Core.JsonToSimpl
///
/// </summary>
public const ushort FilePathResolvedChange = 205;
/// <summary>
///
/// </summary>
public const ushort MessageToSimpl = 206;
/// <summary>
/// Reports the root directory
/// </summary>
public const ushort RootDirectory = 207;
}
/// <summary>

View File

@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO;
using Newtonsoft.Json;
@@ -58,25 +59,68 @@ namespace PepperDash.Core.JsonToSimpl
/// </summary>
public void EvaluateFile(string filepath)
{
Filepath = filepath;
try
{
OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
var dirSeparator = Path.DirectorySeparatorChar; // win-'\', linux-'/'
var dirSeparatorAlt = Path.AltDirectorySeparatorChar; // win-'\', linux-'/'
var is4Series = CrestronEnvironment.ProgramCompatibility == eCrestronSeries.Series4;
var isServer = CrestronEnvironment.DevicePlatform == eDevicePlatform.Server;
OnUshrtChange((ushort)CrestronEnvironment.ProgramCompatibility, 0,
JsonToSimplConstants.CrestronSeriesValueChange);
OnUshrtChange((ushort) CrestronEnvironment.DevicePlatform, 0,
JsonToSimplConstants.DevicePlatformValueChange);
var rootDirectory = Directory.GetApplicationRootDirectory();
OnStringChange(rootDirectory, 0, JsonToSimplConstants.RootDirectory);
var splusPath = string.Empty;
if (Regex.IsMatch(filepath, @"user", RegexOptions.IgnoreCase))
{
if (is4Series)
splusPath = Regex.Replace(filepath, "user", "user", RegexOptions.IgnoreCase);
else if (isServer)
splusPath = Regex.Replace(filepath, "user", "User", RegexOptions.IgnoreCase);
}
filepath = splusPath.Replace(dirSeparatorAlt, dirSeparator);
Filepath = string.Format("{1}{0}{2}", dirSeparator, rootDirectory,
filepath.TrimStart(dirSeparator, dirSeparatorAlt));
OnStringChange(string.Format("Attempting to evaluate {0}", Filepath), 0, JsonToSimplConstants.MessageToSimpl);
if (string.IsNullOrEmpty(Filepath))
{
OnStringChange(string.Format("Cannot evaluate file. JSON file path not set"), 0, JsonToSimplConstants.MessageToSimpl);
CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set");
return;
}
// Resolve wildcard
var dir = Path.GetDirectoryName(Filepath);
Debug.Console(1, "Checking directory {0}", dir);
// get file directory and name to search
var fileDirectory = Path.GetDirectoryName(Filepath);
var fileName = Path.GetFileName(Filepath);
var directory = new DirectoryInfo(dir);
var actualFile = directory.GetFiles(fileName).FirstOrDefault();
OnStringChange(string.Format("Checking '{0}' for '{1}'", fileDirectory, fileName), 0, JsonToSimplConstants.MessageToSimpl);
Debug.Console(1, "Checking '{0}' for '{1}'", fileDirectory, fileName);
if (Directory.Exists(fileDirectory))
{
// get the directory info
var directoryInfo = new DirectoryInfo(fileDirectory);
var actualFile = directoryInfo.GetFiles(fileName).FirstOrDefault();
//var actualFile = new DirectoryInfo(Filepath).GetFiles(fileName).FirstOrDefault();
if (actualFile == null)
{
var msg = string.Format("JSON file not found: {0}", Filepath);
OnStringChange(msg, 0, JsonToSimplConstants.MessageToSimpl);
CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg);
return;
@@ -86,30 +130,44 @@ namespace PepperDash.Core.JsonToSimpl
// \USER\PDT000-Template_Main_Config-Combined_DSP_v00.02.json
ActualFilePath = actualFile.FullName;
OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange);
OnStringChange(string.Format("Actual JSON file is {0}", ActualFilePath), 0, JsonToSimplConstants.MessageToSimpl);
Debug.Console(1, "Actual JSON file is {0}", ActualFilePath);
Filename = actualFile.Name;
OnStringChange(Filename, 0, JsonToSimplConstants.FilenameResolvedChange);
OnStringChange(string.Format("JSON Filename is {0}", Filename), 0, JsonToSimplConstants.MessageToSimpl);
Debug.Console(1, "JSON Filename is {0}", Filename);
FilePathName = string.Format(@"{0}\", actualFile.DirectoryName);
FilePathName = string.Format(@"{0}{1}", actualFile.DirectoryName, dirSeparator);
OnStringChange(FilePathName, 0, JsonToSimplConstants.FilePathResolvedChange);
OnStringChange(string.Format("JSON File Path is {0}", FilePathName), 0, JsonToSimplConstants.MessageToSimpl);
Debug.Console(1, "JSON File Path is {0}", FilePathName);
string json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
var json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
try
{
JsonObject = JObject.Parse(json);
foreach (var child in Children)
child.ProcessAll();
OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
}
else
{
OnStringChange(string.Format("'{0}' not found", fileDirectory), 0, JsonToSimplConstants.MessageToSimpl);
Debug.Console(1, "'{0}' not found", fileDirectory);
}
}
catch (Exception e)
{
var msg = string.Format("JSON parsing failed:\r{0}", e);
var msg = string.Format("EvaluateFile Exception: Message\r{0}", e.Message);
OnStringChange(msg, 0, JsonToSimplConstants.MessageToSimpl);
CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg);
var stackTrace = string.Format("EvaluateFile: Stack Trace\r{0}", e.StackTrace);
OnStringChange(stackTrace, 0, JsonToSimplConstants.MessageToSimpl);
CrestronConsole.PrintLine(stackTrace);
ErrorLog.Error(stackTrace);
return;
}
}