fix: updated EvaluateFile method to resolve issues reading files on an appliance discovered when testing on a 3-series

This commit is contained in:
Jason DeVito
2022-06-15 10:01:19 -05:00
parent 8be02fa458
commit 3fa94a92d2
2 changed files with 37 additions and 29 deletions

View File

@@ -57,15 +57,15 @@ namespace PepperDash.Core.JsonToSimpl
/// </summary> /// </summary>
public const ushort FilePathResolvedChange = 205; public const ushort FilePathResolvedChange = 205;
/// <summary>
///
/// </summary>
public const ushort MessageToSimpl = 206;
/// <summary> /// <summary>
/// Reports the root directory /// Reports the root directory
/// </summary> /// </summary>
public const ushort RootDirectory = 207; public const ushort RootDirectoryChange = 206;
/// <summary>
/// Reports the room ID
/// </summary>
public const ushort RoomIdChange = 207;
} }
/// <summary> /// <summary>

View File

@@ -63,9 +63,8 @@ namespace PepperDash.Core.JsonToSimpl
{ {
OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange); OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
var dirSeparator = Path.DirectorySeparatorChar;
var dirSeparator = Path.DirectorySeparatorChar; // win-'\', linux-'/' var dirSeparatorAlt = Path.AltDirectorySeparatorChar;
var dirSeparatorAlt = Path.AltDirectorySeparatorChar; // win-'\', linux-'/'
var is4Series = CrestronEnvironment.ProgramCompatibility == eCrestronSeries.Series4; var is4Series = CrestronEnvironment.ProgramCompatibility == eCrestronSeries.Series4;
var isServer = CrestronEnvironment.DevicePlatform == eDevicePlatform.Server; var isServer = CrestronEnvironment.DevicePlatform == eDevicePlatform.Server;
@@ -78,16 +77,17 @@ namespace PepperDash.Core.JsonToSimpl
var rootDirectory = Directory.GetApplicationRootDirectory(); var rootDirectory = Directory.GetApplicationRootDirectory();
OnStringChange(rootDirectory, 0, JsonToSimplConstants.RootDirectory); OnStringChange(rootDirectory, 0, JsonToSimplConstants.RootDirectoryChange);
var splusPath = string.Empty; var splusPath = string.Empty;
if (Regex.IsMatch(filepath, @"user", RegexOptions.IgnoreCase)) if (Regex.IsMatch(filepath, @"user", RegexOptions.IgnoreCase))
{ {
if (is4Series) if (is4Series)
splusPath = Regex.Replace(filepath, "user", "user", RegexOptions.IgnoreCase); splusPath = Regex.Replace(filepath, "user", "user", RegexOptions.IgnoreCase);
else if (isServer) else if (isServer)
splusPath = Regex.Replace(filepath, "user", "User", RegexOptions.IgnoreCase); splusPath = Regex.Replace(filepath, "user", "User", RegexOptions.IgnoreCase);
else
splusPath = filepath;
} }
filepath = splusPath.Replace(dirSeparatorAlt, dirSeparator); filepath = splusPath.Replace(dirSeparatorAlt, dirSeparator);
@@ -95,11 +95,11 @@ namespace PepperDash.Core.JsonToSimpl
Filepath = string.Format("{1}{0}{2}", dirSeparator, rootDirectory, Filepath = string.Format("{1}{0}{2}", dirSeparator, rootDirectory,
filepath.TrimStart(dirSeparator, dirSeparatorAlt)); filepath.TrimStart(dirSeparator, dirSeparatorAlt));
OnStringChange(string.Format("Attempting to evaluate {0}", Filepath), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("Attempting to evaluate {0}", Filepath), 0, JsonToSimplConstants.StringValueChange);
if (string.IsNullOrEmpty(Filepath)) if (string.IsNullOrEmpty(Filepath))
{ {
OnStringChange(string.Format("Cannot evaluate file. JSON file path not set"), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("Cannot evaluate file. JSON file path not set"), 0, JsonToSimplConstants.StringValueChange);
CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set"); CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set");
return; return;
} }
@@ -108,19 +108,27 @@ namespace PepperDash.Core.JsonToSimpl
var fileDirectory = Path.GetDirectoryName(Filepath); var fileDirectory = Path.GetDirectoryName(Filepath);
var fileName = Path.GetFileName(Filepath); var fileName = Path.GetFileName(Filepath);
OnStringChange(string.Format("Checking '{0}' for '{1}'", fileDirectory, fileName), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("Checking '{0}' for '{1}'", fileDirectory, fileName), 0, JsonToSimplConstants.StringValueChange);
Debug.Console(1, "Checking '{0}' for '{1}'", fileDirectory, fileName); Debug.Console(1, "Checking '{0}' for '{1}'", fileDirectory, fileName);
if (Directory.Exists(fileDirectory)) if (Directory.Exists(fileDirectory))
{ {
// get the directory info // get the directory info
var directoryInfo = new DirectoryInfo(fileDirectory); var directoryInfo = new DirectoryInfo(fileDirectory);
var actualFile = directoryInfo.GetFiles(fileName).FirstOrDefault();
//var actualFile = new DirectoryInfo(Filepath).GetFiles(fileName).FirstOrDefault(); // get the roomID
if (!string.IsNullOrEmpty(rootDirectory))
{
var roomId = directoryInfo.Name;
OnStringChange(roomId, 0, JsonToSimplConstants.RoomIdChange);
}
// get the file to be read
var actualFile = directoryInfo.GetFiles(fileName).FirstOrDefault();
if (actualFile == null) if (actualFile == null)
{ {
var msg = string.Format("JSON file not found: {0}", Filepath); var msg = string.Format("JSON file not found: {0}", Filepath);
OnStringChange(msg, 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(msg, 0, JsonToSimplConstants.StringValueChange);
CrestronConsole.PrintLine(msg); CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg); ErrorLog.Error(msg);
return; return;
@@ -130,45 +138,45 @@ namespace PepperDash.Core.JsonToSimpl
// \USER\PDT000-Template_Main_Config-Combined_DSP_v00.02.json // \USER\PDT000-Template_Main_Config-Combined_DSP_v00.02.json
ActualFilePath = actualFile.FullName; ActualFilePath = actualFile.FullName;
OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange); OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange);
OnStringChange(string.Format("Actual JSON file is {0}", ActualFilePath), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("Actual JSON file is {0}", ActualFilePath), 0, JsonToSimplConstants.StringValueChange);
Debug.Console(1, "Actual JSON file is {0}", ActualFilePath); Debug.Console(1, "Actual JSON file is {0}", ActualFilePath);
Filename = actualFile.Name; Filename = actualFile.Name;
OnStringChange(Filename, 0, JsonToSimplConstants.FilenameResolvedChange); OnStringChange(Filename, 0, JsonToSimplConstants.FilenameResolvedChange);
OnStringChange(string.Format("JSON Filename is {0}", Filename), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("JSON Filename is {0}", Filename), 0, JsonToSimplConstants.StringValueChange);
Debug.Console(1, "JSON Filename is {0}", Filename); Debug.Console(1, "JSON Filename is {0}", Filename);
FilePathName = string.Format(@"{0}{1}", actualFile.DirectoryName, dirSeparator); FilePathName = string.Format(@"{0}{1}", actualFile.DirectoryName, dirSeparator);
OnStringChange(FilePathName, 0, JsonToSimplConstants.FilePathResolvedChange); OnStringChange(string.Format(@"{0}", actualFile.DirectoryName), 0, JsonToSimplConstants.FilePathResolvedChange);
OnStringChange(string.Format("JSON File Path is {0}", FilePathName), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format(@"JSON File Path is {0}", actualFile.DirectoryName), 0, JsonToSimplConstants.StringValueChange);
Debug.Console(1, "JSON File Path is {0}", FilePathName); Debug.Console(1, "JSON File Path is {0}", FilePathName);
var json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII); var json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
JsonObject = JObject.Parse(json); JsonObject = JObject.Parse(json);
foreach (var child in Children) foreach (var child in Children)
child.ProcessAll(); child.ProcessAll();
OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange); OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
} }
else else
{ {
OnStringChange(string.Format("'{0}' not found", fileDirectory), 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(string.Format("'{0}' not found", fileDirectory), 0, JsonToSimplConstants.StringValueChange);
Debug.Console(1, "'{0}' not found", fileDirectory); Debug.Console(1, "'{0}' not found", fileDirectory);
} }
} }
catch (Exception e) catch (Exception e)
{ {
var msg = string.Format("EvaluateFile Exception: Message\r{0}", e.Message); var msg = string.Format("EvaluateFile Exception: Message\r{0}", e.Message);
OnStringChange(msg, 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(msg, 0, JsonToSimplConstants.StringValueChange);
CrestronConsole.PrintLine(msg); CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg); ErrorLog.Error(msg);
var stackTrace = string.Format("EvaluateFile: Stack Trace\r{0}", e.StackTrace); var stackTrace = string.Format("EvaluateFile: Stack Trace\r{0}", e.StackTrace);
OnStringChange(stackTrace, 0, JsonToSimplConstants.MessageToSimpl); OnStringChange(stackTrace, 0, JsonToSimplConstants.StringValueChange);
CrestronConsole.PrintLine(stackTrace); CrestronConsole.PrintLine(stackTrace);
ErrorLog.Error(stackTrace); ErrorLog.Error(stackTrace);
return;
} }
} }