SystemController.cs 12 KB

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