ConfigOperator.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. namespace MinicsConsole.Business;
  2. public class ConfigFileOperator(
  3. BasicInfo basicInfo,
  4. ConfigFiles configFiles,
  5. ConfigUpdater configUpdater,
  6. ConfigFileLoader configFileLoader,
  7. UISender uIConnector, ILog log)
  8. {
  9. public Task QueryConfigFiles()
  10. {
  11. uIConnector.UpdateAllFiles();
  12. uIConnector.UpdateCurrentFile();
  13. uIConnector.UpdateDataBaseInfo(basicInfo.DBKeepRange, basicInfo.DBClearTime);
  14. return Task.CompletedTask;
  15. }
  16. public bool SetConfigFile(string fileName)
  17. {
  18. if (!configFiles.Files.TryGetValue(fileName, out TemperatureConfig? file) || file is null || file.Mini8sConfig is null)
  19. {
  20. log.Error($"ConfigHub - SetConfigFile {fileName} Not Exist");
  21. return false;
  22. }
  23. if (!configUpdater.SetConfigFile(file, true, out Dictionary<byte, Dictionary<byte, bool>> sendResult))
  24. {
  25. log.Error($"ConfigHub - SetConfigFile {fileName} Send to Mini8 Failed");
  26. return false;
  27. }
  28. if (sendResult is null)
  29. {
  30. log.Error($"ConfigHub - SetConfigFile {fileName} Send to Mini8 Failed");
  31. return false;
  32. }
  33. foreach (var mini8Unit in sendResult)
  34. {
  35. foreach (var channelUnit in mini8Unit.Value)
  36. {
  37. _ = channelUnit.Value switch
  38. {
  39. true => log.Info($"ConfigHub - SetConfigFile {fileName} Send to Mini8 {mini8Unit.Key} Channel {channelUnit.Key}"),
  40. false => log.Error($"ConfigHub - SetConfigFile {fileName} Send to Mini8 {mini8Unit.Key} Channel {channelUnit.Key}"),
  41. };
  42. }
  43. }
  44. Task.Factory.StartNew(() =>
  45. {
  46. uIConnector.UpdateCurrentFile();
  47. uIConnector.UpdateChannelAll();
  48. });
  49. log.Info($"ConfigHub - SetConfigFile {fileName} Success");
  50. return true;
  51. }
  52. public bool RemoveFile(string fileName)
  53. {
  54. if (!fileName.EndsWith(".mc"))
  55. fileName += ".mc";
  56. string filePath = Path.Combine(Paths.ConfigFileFolder, fileName);
  57. if (!File.Exists(filePath))
  58. return false;
  59. try
  60. {
  61. FileInfo fileInfo = new(filePath);
  62. string bin = Path.Combine(Paths.ConfigFileFolder, "RecycleBin");
  63. if (!Directory.Exists(bin))
  64. Directory.CreateDirectory(bin);
  65. string destination = Path.Combine(bin, fileInfo.Name);
  66. int copy = 1;
  67. while (File.Exists(destination))
  68. {
  69. destination = Path.Combine(bin, $"({copy}){fileInfo.Name}");
  70. copy++;
  71. }
  72. File.Copy(filePath, destination);
  73. File.Delete(filePath);
  74. }
  75. catch
  76. {
  77. return false;
  78. }
  79. configFileLoader.Load();
  80. Task.Factory.StartNew(uIConnector.UpdateAllFiles);
  81. return true;
  82. }
  83. public bool LoadNewFile(string filePath)
  84. {
  85. if (!File.Exists(filePath))
  86. return false;
  87. FileInfo fileInfo = new(filePath);
  88. string destination = Path.Combine(Paths.ConfigFileFolder, fileInfo.Name);
  89. while (File.Exists(destination))
  90. {
  91. destination = Path.Combine(Paths.ConfigFileFolder, $"Copy of {fileInfo.Name}");
  92. }
  93. if (!string.Equals(fileInfo.Extension, ".mc"))
  94. return false;
  95. if (File.Exists(destination))
  96. return false;
  97. try
  98. {
  99. File.Copy(filePath, destination);
  100. }
  101. catch
  102. {
  103. return false;
  104. }
  105. configFileLoader.Load();
  106. Task.Factory.StartNew(uIConnector.UpdateAllFiles);
  107. return true;
  108. }
  109. public bool SaveConfig(string fileName, TemperatureConfig temperatureConfig, bool saveAsNew)
  110. {
  111. for (int i = 1; saveAsNew & configFiles.Files.ContainsKey(fileName); i++)
  112. fileName = fileName.Contains(')') switch
  113. {
  114. false => $"({i}){fileName}",
  115. _ => $"({i}){fileName[(fileName.IndexOf(')') + 1)..]}"
  116. };
  117. temperatureConfig.ConfigName = fileName;
  118. configFiles.Files[fileName] = temperatureConfig;
  119. configFileLoader.Save();
  120. configFileLoader.Load();
  121. Task.Factory.StartNew(uIConnector.UpdateAllFiles);
  122. return true;
  123. }
  124. public TemperatureConfig? QueryMini8Data()
  125. {
  126. if (!configUpdater.ReadConfigFromMini8(out TemperatureConfig? config))
  127. return null;
  128. if (config is not null && config.Mini8sConfig is not null)
  129. config.Mini8sConfig = config.Mini8sConfig.OrderBy(t => t.Key).ToDictionary();
  130. return config;
  131. }
  132. }