using System; using System.Text.RegularExpressions; using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharp.CrestronDataStore; using Crestron.SimplSharpPro; using PepperDash.Core; using PepperDash.Essentials.License; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Schema; namespace PepperDash.Essentials.Core { public static class Global { public static CrestronControlSystem ControlSystem { get; set; } public static LicenseManager LicenseManager { get; set; } /// /// The file path prefix to the folder containing configuration files /// public static string FilePathPrefix { get; private set; } /// /// Returns the directory separator character based on the running OS /// public static char DirectorySeparator { get { return System.IO.Path.DirectorySeparatorChar; } } /// /// Wildcarded config file name for global reference /// public const string ConfigFileName = "*configurationFile*.json"; /// /// Sets the file path prefix /// /// public static void SetFilePathPrefix(string prefix) { FilePathPrefix = prefix; } /// /// Gets the Assembly Version of Essentials /// /// The Assembly Version at Runtime public static string GetAssemblyVersion() { var version = Crestron.SimplSharp.Reflection.Assembly.GetExecutingAssembly().GetName().Version; return string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); } /// /// Checks to see if the running version meets or exceed the minimum specified version. For beta versions (0.xx.yy), will always return true. /// /// Minimum specified version in format of xx.yy.zz /// Returns true if the running version meets or exceeds the minimum specified version public static bool IsRunningMinimumVersionOrHigher(string minimumVersion) { var runtimeVersion = Crestron.SimplSharp.Reflection.Assembly.GetExecutingAssembly().GetName().Version; Debug.Console(2, "Comparing running version '{0}' to minimum version '{1}'", GetAssemblyVersion(), minimumVersion); if (runtimeVersion.Major == 0) { Debug.Console(2, "Running Beta Build. Bypassing Dependency Check."); return true; } var minVersion = Regex.Match(minimumVersion, @"^(\d*).(\d*).(\d*)$"); if(!minVersion.Success) { Debug.Console(2, "minimumVersion String does not match format xx.yy.zz"); return false; } var minVersionMajor = Int16.Parse(minVersion.Groups[1].Value); var minVersionMinor = Int16.Parse(minVersion.Groups[2].Value); var minVersionBuild = Int16.Parse(minVersion.Groups[3].Value); if (minVersionMajor < runtimeVersion.Major) return false; if (minVersionMinor < runtimeVersion.Minor) return false; if (minVersionBuild < runtimeVersion.Build) return false; return true; } static Global() { // Fire up CrestronDataStoreStatic var err = CrestronDataStoreStatic.InitCrestronDataStore(); if (err != CrestronDataStore.CDS_ERROR.CDS_SUCCESS) { CrestronConsole.PrintLine("Error starting CrestronDataStoreStatic: {0}", err); return; } } } }