SystemController.cs 12 KB

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