SonopostUserDefinedSettingInfo.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. using FISLib.LiveVideo;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text.Json;
  7. using Vinno.FIS.Sonopost.Common;
  8. using Vinno.FIS.Sonopost.Features.Oled;
  9. using Vinno.FIS.Sonopost.Helpers;
  10. using Vinno.FIS.Sonopost.Settings.Config;
  11. using Vinno.IUS.Common.Log;
  12. namespace Vinno.FIS.Sonopost.Settings
  13. {
  14. internal class SonopostUserDefinedSettingInfo
  15. {
  16. public ServerSetting ServerSetting { get; set; }
  17. public DicomSetting DicomSetting { get; set; }
  18. public NetworkSetting NetworkSetting { get; set; }
  19. public HardwareSetting HardwareSetting { get; set; }
  20. public LanguageSetting LanguageSetting { get; set; }
  21. public CaptureSetting CaptureSetting { get; set; }
  22. public bool IsFirstLogin { get; set; }
  23. public int Version { get; set; }
  24. }
  25. internal class SonopostUserDefinedSettings : SonopostUserDefinedSettingInfo
  26. {
  27. internal static SonopostUserDefinedSettings Instance { get; private set; }
  28. private static string _userDefinedFolderPath = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.UserDefinedSettingsFolder);
  29. private static string _userDefinedFilePath = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.UserDefinedSettingsFolder, SonopostConstants.UserDefinedSettingFileName);
  30. private static string _userDefinedTempFilePath = Path.Combine(SonopostConstants.DataFolder, SonopostConstants.UserDefinedSettingsFolder, SonopostConstants.UserDefinedSettingTempFileName);
  31. static SonopostUserDefinedSettings()
  32. {
  33. try
  34. {
  35. if (!LoadConfig())
  36. {
  37. InitInstance();
  38. }
  39. }
  40. catch (Exception ex)
  41. {
  42. Logger.WriteLineError($"SonopostUserDefinedSettings Static Cstr Error:{ex}");
  43. }
  44. }
  45. private static bool LoadConfig()
  46. {
  47. if (!Directory.Exists(_userDefinedFolderPath))
  48. {
  49. Logger.WriteLineError($"SonopostUserDefinedSettings Load Config Fail,{_userDefinedFolderPath} is not exist");
  50. Directory.CreateDirectory(_userDefinedFolderPath);
  51. return false;
  52. }
  53. if (!File.Exists(_userDefinedFilePath) && !File.Exists(_userDefinedTempFilePath))
  54. {
  55. Logger.WriteLineError($"SonopostUserDefinedSettings Load Config Fail,{_userDefinedFilePath} and {_userDefinedTempFilePath} are not exist");
  56. return false;
  57. }
  58. else
  59. {
  60. if (File.Exists(_userDefinedFilePath))
  61. {
  62. if (LoadConfigFile())
  63. {
  64. return true;
  65. }
  66. else if (File.Exists(_userDefinedTempFilePath))
  67. {
  68. return LoadTempConfigFile();
  69. }
  70. }
  71. else
  72. {
  73. return LoadTempConfigFile();
  74. }
  75. }
  76. return false;
  77. }
  78. private static bool LoadTempConfigFile()
  79. {
  80. try
  81. {
  82. var jsonString = File.ReadAllText(_userDefinedTempFilePath);
  83. Instance = JsonHelper.JsonToObj<SonopostUserDefinedSettings>(jsonString);
  84. if (Instance == null)
  85. {
  86. Logger.WriteLineError($"SonopostUserDefinedSettings Load temp Config Fail,Instance is null");
  87. return false;
  88. }
  89. if (Instance.Version < SonopostConstants.CurrentSonopostUserDefinedSettingVersion)
  90. {
  91. UpgradeSettingFrom0To1();
  92. UpgradeSettingFrom1To2();
  93. Instance.Save();
  94. }
  95. return true;
  96. }
  97. catch (Exception ex)
  98. {
  99. Logger.WriteLineError($"SonopostUserDefinedSettings Load temp Config Fail,ex:{ex}");
  100. }
  101. return false;
  102. }
  103. private static bool LoadConfigFile()
  104. {
  105. try
  106. {
  107. var jsonString = File.ReadAllText(_userDefinedFilePath);
  108. Instance = JsonHelper.JsonToObj<SonopostUserDefinedSettings>(jsonString);
  109. if (Instance == null)
  110. {
  111. Logger.WriteLineError($"SonopostUserDefinedSettings Load Config Fail,Instance is null");
  112. return false;
  113. }
  114. if (Instance.Version < SonopostConstants.CurrentSonopostUserDefinedSettingVersion)
  115. {
  116. UpgradeSettingFrom0To1();
  117. UpgradeSettingFrom1To2();
  118. Instance.Save();
  119. }
  120. return true;
  121. }
  122. catch (Exception ex)
  123. {
  124. Logger.WriteLineError($"SonopostUserDefinedSettings Load Config Fail,ex:{ex}");
  125. }
  126. return false;
  127. }
  128. private static void UpgradeSettingFrom0To1()
  129. {
  130. if (Instance.Version == 0)
  131. {
  132. Instance.LanguageSetting = new LanguageSetting
  133. {
  134. OLedLanguage = Language.Chinese,
  135. PageLanguage = Language.Chinese,
  136. };
  137. Instance.Version = 1;
  138. }
  139. }
  140. private static void UpgradeSettingFrom1To2()
  141. {
  142. if (Instance.Version == 1)
  143. {
  144. var serverSettings = Instance.ServerSetting;
  145. var indiaServer = serverSettings.Servers.FirstOrDefault(x => x.DisplayName == SonopostConstants.IndiaServerName);
  146. if (indiaServer != null)
  147. {
  148. serverSettings.Servers.Remove(indiaServer);
  149. }
  150. if (serverSettings.DefaultServer.DisplayName == SonopostConstants.IndiaServerName)
  151. {
  152. serverSettings.DefaultServer = serverSettings.Servers.FirstOrDefault();
  153. }
  154. Instance.Version = 2;
  155. }
  156. }
  157. internal void Reset()
  158. {
  159. InitInstance();
  160. }
  161. private static void InitInstance()
  162. {
  163. Instance = new SonopostUserDefinedSettings
  164. {
  165. ServerSetting = new ServerSetting
  166. {
  167. DefaultServer = new ServerInfoSetting(SonopostConstants.NewHongkongServerHost, 443, true, SonopostConstants.FlyinsonoServerName),
  168. Servers = new List<ServerInfoSetting>
  169. {
  170. new ServerInfoSetting(SonopostConstants.NewHongkongServerHost, 443, true, SonopostConstants.FlyinsonoServerName),
  171. new ServerInfoSetting(SonopostConstants.NewChinaServerHost, 443, true, ""),
  172. new ServerInfoSetting(SonopostConstants.NewGermanyServerHost, 443, true, ""),
  173. new ServerInfoSetting(SonopostConstants.NewHongkongServerHost, 443, true, ""),
  174. },
  175. },
  176. DicomSetting = new DicomSetting
  177. {
  178. UseDicomService = false,
  179. DicomTitile = "Sonopost",
  180. DicomPort = 104,
  181. TempFileDays = 1,
  182. UseWorkStationProxy = false,
  183. WorkStationTitle = "vStation",
  184. WorkStationIpAddress = "",
  185. WorkStationPort = 6104,
  186. },
  187. NetworkSetting = new NetworkSetting(),
  188. HardwareSetting = new HardwareSetting
  189. {
  190. VideoDeviceInfoList = new List<FISVideoDeviceInfo>(),
  191. MicDeviceInfo = new FISMicDeviceInfo(),
  192. },
  193. LanguageSetting = new LanguageSetting
  194. {
  195. PageLanguage = Language.Chinese,
  196. OLedLanguage = Language.Chinese,
  197. },
  198. CaptureSetting = new CaptureSetting
  199. {
  200. RealTimeCaptureEnabled = false,
  201. ImageCaptureKeyForFootToogle = EnumFootToggleKey.LeftKey,
  202. VideoCaptureKeyForFootToggle = EnumFootToggleKey.RightKey,
  203. FootToggleLeftKeyForKeyBoard = EnumKeyboardKey.F1,
  204. FootToggleRightKeyForKeyBoard = EnumKeyboardKey.F2,
  205. },
  206. IsFirstLogin = true,
  207. Version = SonopostConstants.CurrentSonopostUserDefinedSettingVersion,
  208. };
  209. Instance.Save();
  210. }
  211. /// <summary>
  212. /// Save settings.
  213. /// </summary>
  214. public void Save()
  215. {
  216. try
  217. {
  218. DirectoryHelper.CreateDirectory(_userDefinedFolderPath);
  219. var jsonString = JsonHelper.ToJson(Instance, new JsonSerializerOptions
  220. {
  221. WriteIndented = true
  222. });
  223. File.WriteAllText(_userDefinedTempFilePath, jsonString);
  224. FileHelper.CopyFile(_userDefinedTempFilePath, _userDefinedFilePath, true);
  225. }
  226. catch (Exception ex)
  227. {
  228. Logger.WriteLineError($"SonopostUserDefinedSettings Save Error:{ex}");
  229. }
  230. }
  231. }
  232. }