SystemController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. using FISLib.LiveVideo;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  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;
  11. using Vinno.FIS.Sonopost.WebApi.Models;
  12. using Vinno.IUS.Common.Log;
  13. namespace Vinno.FIS.Sonopost.WebApi.Controllers
  14. {
  15. [WebApiController]
  16. internal class SystemController : BaseController
  17. {
  18. /// <summary>
  19. /// 重置
  20. /// </summary>
  21. /// <returns></returns>
  22. [WebApiAction]
  23. public Result Reset()
  24. {
  25. Task.Run(() =>
  26. {
  27. Task.Delay(1000);
  28. Logger.WriteLineInfo($"Sonopost Reset Invoke");
  29. OledManager.ShowStatus(OledMessage.Restore);
  30. SystemHelper.ResetSystem();
  31. });
  32. return Result.Success();
  33. }
  34. /// <summary>
  35. /// 重启
  36. /// </summary>
  37. /// <returns></returns>
  38. [WebApiAction]
  39. public Result Reboot()
  40. {
  41. Task.Run(() =>
  42. {
  43. Task.Delay(1000);
  44. Logger.WriteLineInfo($"Sonopost Reboot Invoke");
  45. OledManager.ShowStatus(OledMessage.Reboot);
  46. SystemHelper.RebootSystem();
  47. });
  48. return Result.Success();
  49. }
  50. /// <summary>
  51. /// 删除自定义配置
  52. /// </summary>
  53. /// <returns></returns>
  54. [WebApiAction]
  55. public Result DeleteUserDefinedSetting()
  56. {
  57. Task.Run(() =>
  58. {
  59. Task.Delay(1000);
  60. SonopostUserDefinedSettings.Instance.Reset();
  61. Logger.WriteLineInfo($"Sonopost DeleteUserDefinedSetting Invoke");
  62. OledManager.ShowStatus(OledMessage.Reboot);
  63. SystemHelper.RebootSystem();
  64. });
  65. return Result.Success();
  66. }
  67. /// <summary>
  68. /// 获取迷你屏语言
  69. /// </summary>
  70. /// <returns></returns>
  71. [WebApiAction]
  72. public Result GetOledLanguage()
  73. {
  74. return Result.Success(OledManager.CurrentLanguage.ToString());
  75. }
  76. /// <summary>
  77. /// 设置迷你屏语言
  78. /// </summary>
  79. /// <param name="request"></param>
  80. /// <returns></returns>
  81. [WebApiAction]
  82. public Result SetOledLanguage(SetLanguageRequest request)
  83. {
  84. var language = (Language)Enum.Parse(typeof(Language), request.Language);
  85. OledManager.SetLanguage(language);
  86. return Result.Success();
  87. }
  88. /// <summary>
  89. /// 获取页面语言
  90. /// </summary>
  91. /// <returns></returns>
  92. [WebApiAction]
  93. public Result GetPageLanguage()
  94. {
  95. switch (SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage)
  96. {
  97. case Language.Chinese:
  98. return Result.Success("zh-cn");
  99. case Language.Spanish:
  100. return Result.Success("es-es");
  101. case Language.Russian:
  102. return Result.Success("ru-ru");
  103. case Language.English:
  104. default:
  105. return Result.Success("en-us");
  106. }
  107. }
  108. /// <summary>
  109. /// 设置页面语言
  110. /// </summary>
  111. /// <param name="request"></param>
  112. /// <returns></returns>
  113. [WebApiAction]
  114. public Result SetPageLanguage(SetLanguageRequest request)
  115. {
  116. if (request == null)
  117. {
  118. return Result.Fail();
  119. }
  120. if (request.Language.ToLower() == "zh-cn")
  121. {
  122. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Chinese;
  123. }
  124. else if (request.Language.ToLower() == "ru-ru")
  125. {
  126. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Russian;
  127. }
  128. else if (request.Language.ToLower() == "es-es")
  129. {
  130. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Spanish;
  131. }
  132. else
  133. {
  134. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.English;
  135. }
  136. ConfigManager.Save();
  137. return Result.Success();
  138. }
  139. /// <summary>
  140. /// 设置语言,包含页面语言和OLED语言
  141. /// </summary>
  142. /// <param name="request"></param>
  143. /// <returns></returns>
  144. [WebApiAction]
  145. public Result SetLanguage(SetLanguageRequest request)
  146. {
  147. var requestString = JsonHelper.ToJson(request);
  148. Logger.WriteLineInfo($"Sonopost SetLanguage Invoke,{requestString}");
  149. if (request == null)
  150. {
  151. return Result.Fail();
  152. }
  153. if (request.Language.ToLower() == "zh-cn")
  154. {
  155. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Chinese;
  156. OledManager.SetLanguage(Language.Chinese);
  157. }
  158. else if (request.Language.ToLower() == "ru-ru")
  159. {
  160. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Russian;
  161. OledManager.SetLanguage(Language.English);
  162. }
  163. else if (request.Language.ToLower() == "es-es")
  164. {
  165. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Spanish;
  166. OledManager.SetLanguage(Language.English);
  167. }
  168. else
  169. {
  170. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.English;
  171. OledManager.SetLanguage(Language.English);
  172. }
  173. ConfigManager.Save();
  174. return Result.Success();
  175. }
  176. /// <summary>
  177. /// 获取版本
  178. /// </summary>
  179. /// <returns></returns>
  180. [WebApiAction]
  181. public Result GetVersion()
  182. {
  183. string version = VersionCheckManager.GetVersion();
  184. return Result.Success(version);
  185. }
  186. /// <summary>
  187. /// 获取日志文本
  188. /// </summary>
  189. /// <param name="request"></param>
  190. /// <returns></returns>
  191. [WebApiAction]
  192. public Result GetLogText(SystemGetLogRequest request)
  193. {
  194. try
  195. {
  196. string path;
  197. path = Path.Combine(SonopostConstants.DataFolder, request.Path);
  198. string text = FileHelper.GetText(path);
  199. return Result.Success(text);
  200. }
  201. catch (Exception ex)
  202. {
  203. Logger.WriteLineError($"[{nameof(SystemController)}]{nameof(GetLogText)} error:{ex}");
  204. return Result.Fail();
  205. }
  206. }
  207. /// <summary>
  208. /// 获取日志文件树
  209. /// </summary>
  210. /// <param name="request"></param>
  211. /// <returns></returns>
  212. [WebApiAction]
  213. public Result GetLogFileTree(SystemGetLogRequest request)
  214. {
  215. try
  216. {
  217. EnumLogType logType;
  218. var path = Path.Combine(SonopostConstants.DataFolder, request.Key);
  219. switch (request?.Key)
  220. {
  221. case "Logs":
  222. logType = EnumLogType.Logs;
  223. break;
  224. case "SmartLogs":
  225. logType = EnumLogType.SmartLogs;
  226. break;
  227. case "TRTCLogs":
  228. logType = EnumLogType.TRTCLogs;
  229. break;
  230. case "TRTCClientLogs":
  231. logType = EnumLogType.TRTCClientLogs;
  232. break;
  233. default:
  234. return Result.Fail();
  235. }
  236. var tree = GetLogDirSources(path, logType);
  237. return Result.Success(tree);
  238. }
  239. catch (Exception ex)
  240. {
  241. Logger.WriteLineError($"[{nameof(SystemController)}]{nameof(GetLogFileTree)} error:{ex}");
  242. return Result.Fail();
  243. }
  244. }
  245. /// <summary>
  246. /// 读取彩虹图监测设置
  247. /// </summary>
  248. /// <returns></returns>
  249. [WebApiAction]
  250. public Result LoadRainbowImageDetectSetting()
  251. {
  252. try
  253. {
  254. var fisRainbowImageDetectConfig = new FISRainbowImageDetectConfig()
  255. {
  256. IsDetectRainbowImage = SonopostSystemSettings.Instance.RainbowImageDetectSetting.IsDetectRainbowImage,
  257. ScanIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.ScanIntervalTime,
  258. BeforeDisableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeDisableIntervalTime,
  259. BeforeEnableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeEnableIntervalTime,
  260. AfterEnableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.AfterEnableIntervalTime,
  261. };
  262. return Result.Success(fisRainbowImageDetectConfig);
  263. }
  264. catch (Exception ex)
  265. {
  266. Logger.WriteLineError($"Load Rainbow Image Detect Setting Error:{ex}");
  267. return Result.Fail();
  268. }
  269. }
  270. /// <summary>
  271. /// 设置彩虹图监测开关
  272. /// </summary>
  273. /// <returns></returns>
  274. [WebApiAction]
  275. public Result SaveRainbowImageDetectSetting(FISRainbowImageDetectConfig fisRainbowImageDetectConfig)
  276. {
  277. try
  278. {
  279. if (fisRainbowImageDetectConfig == null || fisRainbowImageDetectConfig.BeforeDisableIntervalTime <= 0 || fisRainbowImageDetectConfig.BeforeEnableIntervalTime <= 0 || fisRainbowImageDetectConfig.AfterEnableIntervalTime <= 0 || fisRainbowImageDetectConfig.ScanIntervalTime <= 0)
  280. {
  281. return Result.Fail("PositiveIntFormatError");
  282. }
  283. SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeEnableIntervalTime = fisRainbowImageDetectConfig.BeforeEnableIntervalTime;
  284. SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeDisableIntervalTime = fisRainbowImageDetectConfig.BeforeDisableIntervalTime;
  285. SonopostSystemSettings.Instance.RainbowImageDetectSetting.AfterEnableIntervalTime = fisRainbowImageDetectConfig.AfterEnableIntervalTime;
  286. SonopostSystemSettings.Instance.RainbowImageDetectSetting.ScanIntervalTime = fisRainbowImageDetectConfig.ScanIntervalTime;
  287. SonopostSystemSettings.Instance.RainbowImageDetectSetting.IsDetectRainbowImage = fisRainbowImageDetectConfig.IsDetectRainbowImage;
  288. ConfigManager.Save();
  289. LiveVideoManager.UpdateRainbowImageDetectSetting();
  290. return Result.Success();
  291. }
  292. catch (Exception ex)
  293. {
  294. Logger.WriteLineError($"Set Rainbow Image Detect Setting Error:{ex}");
  295. return Result.Fail();
  296. }
  297. }
  298. #region Private Methods
  299. private static dynamic GetLogDirSources(string path, EnumLogType logType)
  300. {
  301. int basePathLength = 0;
  302. switch (logType)
  303. {
  304. case EnumLogType.SmartLogs:
  305. case EnumLogType.TRTCLogs:
  306. case EnumLogType.TRTCClientLogs:
  307. case EnumLogType.Logs:
  308. basePathLength = SonopostConstants.DataFolder.Length + "\\".Length;
  309. break;
  310. }
  311. List<dynamic> array = new List<dynamic>();
  312. if (!Directory.Exists(path)) return array;
  313. DirectoryInfo directoryInfo = new DirectoryInfo(path);
  314. var subDirectories = directoryInfo.GetDirectories()?.OrderBy(x => x.CreationTime);
  315. if (subDirectories != null)
  316. {
  317. foreach (var item in subDirectories)
  318. {
  319. array.Add(new
  320. {
  321. Name = item.Name,
  322. Path = item.FullName.Substring(basePathLength),
  323. Children = GetLogDirSources(item.FullName, logType)
  324. });
  325. }
  326. }
  327. var fileInfos = directoryInfo.GetFiles()?.OrderBy(x => x.CreationTime);
  328. if (fileInfos != null)
  329. {
  330. foreach (var item in fileInfos)
  331. {
  332. array.Add(new
  333. {
  334. Name = item.Name,
  335. Path = item.FullName.Substring(basePathLength)
  336. });
  337. }
  338. }
  339. return array;
  340. }
  341. #endregion Private Methods
  342. }
  343. }