SystemController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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.Config;
  9. using Vinno.FIS.Sonopost.Features.Oled;
  10. using Vinno.FIS.Sonopost.Helpers;
  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.English:
  98. return Result.Success("en-us");
  99. case Language.Chinese:
  100. default:
  101. return Result.Success("zh-cn");
  102. }
  103. }
  104. /// <summary>
  105. /// 设置页面语言
  106. /// </summary>
  107. /// <param name="request"></param>
  108. /// <returns></returns>
  109. [WebApiAction]
  110. public Result SetPageLanguage(SetLanguageRequest request)
  111. {
  112. if (request == null)
  113. {
  114. return Result.Fail();
  115. }
  116. if (request.Language.ToLower() == "en-us")
  117. {
  118. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.English;
  119. }
  120. else
  121. {
  122. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Chinese;
  123. }
  124. ConfigManager.Save();
  125. return Result.Success();
  126. }
  127. /// <summary>
  128. /// 设置语言,包含页面语言和OLED语言
  129. /// </summary>
  130. /// <param name="request"></param>
  131. /// <returns></returns>
  132. [WebApiAction]
  133. public Result SetLanguage(SetLanguageRequest request)
  134. {
  135. if (request == null)
  136. {
  137. return Result.Fail();
  138. }
  139. if (request.Language.ToLower() == "en-us")
  140. {
  141. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.English;
  142. OledManager.SetLanguage(Language.English);
  143. }
  144. else
  145. {
  146. SonopostUserDefinedSettings.Instance.LanguageSetting.PageLanguage = Language.Chinese;
  147. OledManager.SetLanguage(Language.Chinese);
  148. }
  149. ConfigManager.Save();
  150. return Result.Success();
  151. }
  152. /// <summary>
  153. /// 获取版本
  154. /// </summary>
  155. /// <returns></returns>
  156. [WebApiAction]
  157. public Result GetVersion()
  158. {
  159. string version = VersionCheckManager.GetVersion();
  160. return Result.Success(version);
  161. }
  162. /// <summary>
  163. /// 获取日志文本
  164. /// </summary>
  165. /// <param name="request"></param>
  166. /// <returns></returns>
  167. [WebApiAction]
  168. public Result GetLogText(SystemGetLogRequest request)
  169. {
  170. try
  171. {
  172. string path;
  173. path = Path.Combine(SonopostConstants.DataFolder, request.Path);
  174. string text = FileHelper.GetText(path);
  175. return Result.Success(text);
  176. }
  177. catch (Exception ex)
  178. {
  179. Logger.WriteLineError($"[{nameof(SystemController)}]{nameof(GetLogText)} error:{ex}");
  180. return Result.Fail();
  181. }
  182. }
  183. /// <summary>
  184. /// 获取日志文件树
  185. /// </summary>
  186. /// <param name="request"></param>
  187. /// <returns></returns>
  188. [WebApiAction]
  189. public Result GetLogFileTree(SystemGetLogRequest request)
  190. {
  191. try
  192. {
  193. EnumLogType logType;
  194. var path = Path.Combine(SonopostConstants.DataFolder, request.Key);
  195. switch (request?.Key)
  196. {
  197. case "Logs":
  198. logType = EnumLogType.Logs;
  199. break;
  200. case "SmartLogs":
  201. logType = EnumLogType.SmartLogs;
  202. break;
  203. case "TRTCLogs":
  204. logType = EnumLogType.TRTCLogs;
  205. break;
  206. case "TRTCClientLogs":
  207. logType = EnumLogType.TRTCClientLogs;
  208. break;
  209. default:
  210. return Result.Fail();
  211. }
  212. var tree = GetLogDirSources(path, logType);
  213. return Result.Success(tree);
  214. }
  215. catch (Exception ex)
  216. {
  217. Logger.WriteLineError($"[{nameof(SystemController)}]{nameof(GetLogFileTree)} error:{ex}");
  218. return Result.Fail();
  219. }
  220. }
  221. /// <summary>
  222. /// 读取彩虹图监测设置
  223. /// </summary>
  224. /// <returns></returns>
  225. [WebApiAction]
  226. public Result LoadRainbowImageDetectSetting()
  227. {
  228. try
  229. {
  230. var fisRainbowImageDetectConfig = new FISRainbowImageDetectConfig()
  231. {
  232. IsDetectRainbowImage = SonopostSystemSettings.Instance.RainbowImageDetectSetting.IsDetectRainbowImage,
  233. ScanIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.ScanIntervalTime,
  234. BeforeDisableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeDisableIntervalTime,
  235. BeforeEnableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeEnableIntervalTime,
  236. AfterEnableIntervalTime = SonopostSystemSettings.Instance.RainbowImageDetectSetting.AfterEnableIntervalTime,
  237. };
  238. return Result.Success(fisRainbowImageDetectConfig);
  239. }
  240. catch (Exception ex)
  241. {
  242. Logger.WriteLineError($"Load Rainbow Image Detect Setting Error:{ex}");
  243. return Result.Fail();
  244. }
  245. }
  246. /// <summary>
  247. /// 设置彩虹图监测开关
  248. /// </summary>
  249. /// <returns></returns>
  250. [WebApiAction]
  251. public Result SaveRainbowImageDetectSetting(FISRainbowImageDetectConfig fisRainbowImageDetectConfig)
  252. {
  253. try
  254. {
  255. if (fisRainbowImageDetectConfig == null || fisRainbowImageDetectConfig.BeforeDisableIntervalTime <= 0 || fisRainbowImageDetectConfig.BeforeEnableIntervalTime <= 0 || fisRainbowImageDetectConfig.AfterEnableIntervalTime <= 0 || fisRainbowImageDetectConfig.ScanIntervalTime <= 0)
  256. {
  257. return Result.Fail("PositiveIntFormatError");
  258. }
  259. SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeEnableIntervalTime = fisRainbowImageDetectConfig.BeforeEnableIntervalTime;
  260. SonopostSystemSettings.Instance.RainbowImageDetectSetting.BeforeDisableIntervalTime = fisRainbowImageDetectConfig.BeforeDisableIntervalTime;
  261. SonopostSystemSettings.Instance.RainbowImageDetectSetting.AfterEnableIntervalTime = fisRainbowImageDetectConfig.AfterEnableIntervalTime;
  262. SonopostSystemSettings.Instance.RainbowImageDetectSetting.ScanIntervalTime = fisRainbowImageDetectConfig.ScanIntervalTime;
  263. SonopostSystemSettings.Instance.RainbowImageDetectSetting.IsDetectRainbowImage = fisRainbowImageDetectConfig.IsDetectRainbowImage;
  264. ConfigManager.Save();
  265. LiveVideoManager.UpdateRainbowImageDetectSetting();
  266. return Result.Success();
  267. }
  268. catch (Exception ex)
  269. {
  270. Logger.WriteLineError($"Set Rainbow Image Detect Setting Error:{ex}");
  271. return Result.Fail();
  272. }
  273. }
  274. #region Private Methods
  275. private static dynamic GetLogDirSources(string path, EnumLogType logType)
  276. {
  277. int basePathLength = 0;
  278. switch (logType)
  279. {
  280. case EnumLogType.SmartLogs:
  281. case EnumLogType.TRTCLogs:
  282. case EnumLogType.TRTCClientLogs:
  283. case EnumLogType.Logs:
  284. basePathLength = SonopostConstants.DataFolder.Length + "\\".Length;
  285. break;
  286. }
  287. List<dynamic> array = new List<dynamic>();
  288. if (!Directory.Exists(path)) return array;
  289. DirectoryInfo directoryInfo = new DirectoryInfo(path);
  290. var subDirectories = directoryInfo.GetDirectories()?.OrderBy(x => x.CreationTime);
  291. if (subDirectories != null)
  292. {
  293. foreach (var item in subDirectories)
  294. {
  295. array.Add(new
  296. {
  297. Name = item.Name,
  298. Path = item.FullName.Substring(basePathLength),
  299. Children = GetLogDirSources(item.FullName, logType)
  300. });
  301. }
  302. }
  303. var fileInfos = directoryInfo.GetFiles()?.OrderBy(x => x.CreationTime);
  304. if (fileInfos != null)
  305. {
  306. foreach (var item in fileInfos)
  307. {
  308. array.Add(new
  309. {
  310. Name = item.Name,
  311. Path = item.FullName.Substring(basePathLength)
  312. });
  313. }
  314. }
  315. return array;
  316. }
  317. #endregion Private Methods
  318. }
  319. }