mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-08-31 19:08:29 +00:00
- Updated RelayControlledShade to utilize Timer for output pulsing. - Refactored MockVC to replace CTimer with Timer for call status simulation. - Modified VideoCodecBase to enhance documentation and improve feedback handling. - Removed obsolete IHasCamerasMessenger and updated related classes to use IHasCamerasWithControls. - Adjusted PressAndHoldHandler to implement Timer for button hold actions. - Enhanced logging throughout MobileControl and RoomBridges for better debugging and information tracking. - Cleaned up unnecessary comments and improved exception handling in various classes.
127 lines
No EOL
3.3 KiB
C#
127 lines
No EOL
3.3 KiB
C#
extern alias NewtonsoftJson;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Crestron.SimplSharp;
|
|
using PepperDash.Core.Logging;
|
|
using Renci.SshNet.Messages;
|
|
using JObject = NewtonsoftJson::Newtonsoft.Json.Linq.JObject;
|
|
using JValue = NewtonsoftJson::Newtonsoft.Json.Linq.JValue;
|
|
|
|
namespace PepperDash.Core.JsonToSimpl;
|
|
|
|
/// <summary>
|
|
/// Generic Master
|
|
/// </summary>
|
|
public class JsonToSimplGenericMaster : JsonToSimplMaster
|
|
{
|
|
/*****************************************************************************************/
|
|
/** Privates **/
|
|
|
|
|
|
// The JSON file in JObject form
|
|
// For gathering the incoming data
|
|
object StringBuilderLock = new object();
|
|
// To prevent multiple same-file access
|
|
static object WriteLock = new object();
|
|
|
|
/// <summary>
|
|
/// Callback action for saving
|
|
/// </summary>
|
|
public Action<string> SaveCallback { get; set; }
|
|
|
|
/*****************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// SIMPL+ default constructor.
|
|
/// </summary>
|
|
public JsonToSimplGenericMaster()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads in JSON and triggers evaluation on all children
|
|
/// </summary>
|
|
/// <param name="json"></param>
|
|
public void LoadWithJson(string json)
|
|
{
|
|
OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
|
|
try
|
|
{
|
|
JsonObject = JObject.Parse(json);
|
|
foreach (var child in Children)
|
|
child.ProcessAll();
|
|
OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
var msg = string.Format("JSON parsing failed:\r{0}", e);
|
|
CrestronConsole.PrintLine(msg);
|
|
ErrorLog.Error(msg);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads JSON into JsonObject, but does not trigger evaluation by children
|
|
/// </summary>
|
|
/// <param name="json"></param>
|
|
/// <summary>
|
|
/// SetJsonWithoutEvaluating method
|
|
/// </summary>
|
|
public void SetJsonWithoutEvaluating(string json)
|
|
{
|
|
try
|
|
{
|
|
JsonObject = JObject.Parse(json);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
this.LogException(e, "JSON parsing failed:\r{0}", e.Message);
|
|
this.LogVerbose("Stack Trace:\r{0}", e.StackTrace);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Save method
|
|
/// </summary>
|
|
/// <inheritdoc />
|
|
public override void Save()
|
|
{
|
|
// this code is duplicated in the other masters!!!!!!!!!!!!!
|
|
UnsavedValues = new Dictionary<string, JValue>();
|
|
// Make each child update their values into master object
|
|
foreach (var child in Children)
|
|
{
|
|
this.LogDebug("Master. checking child [{0}] for updates to save", child.Key);
|
|
child.UpdateInputsForMaster();
|
|
}
|
|
|
|
if (UnsavedValues == null || UnsavedValues.Count == 0)
|
|
{
|
|
this.LogDebug("Master. No updated values to save. Skipping");
|
|
return;
|
|
}
|
|
|
|
lock (WriteLock)
|
|
{
|
|
this.LogDebug("Saving");
|
|
foreach (var path in UnsavedValues.Keys)
|
|
{
|
|
var tokenToReplace = JsonObject.SelectToken(path);
|
|
if (tokenToReplace != null)
|
|
{// It's found
|
|
tokenToReplace.Replace(UnsavedValues[path]);
|
|
this.LogDebug("Master Updating '{0}'", path);
|
|
}
|
|
else // No token. Let's make one
|
|
{
|
|
this.LogDebug("Master Cannot write value onto missing property: '{0}'", path);
|
|
}
|
|
}
|
|
}
|
|
if (SaveCallback != null)
|
|
SaveCallback(JsonObject.ToString());
|
|
else
|
|
this.LogDebug("WARNING: No save callback defined.");
|
|
}
|
|
} |