ConfigFileLoader.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. namespace ConfigOperator;
  2. public class ConfigFileLoader(ConfigFiles configFiles)
  3. {
  4. public void Load()
  5. {
  6. if (!DierctoryHelper.GetAllFiles(Paths.ConfigFileFolder, out List<string>? configs) || configs is null)
  7. return;
  8. configFiles.Files.Clear();
  9. foreach (string filePath in configs)
  10. {
  11. if (!XmlHelper.DeserializeXml(filePath, out ConfigSaveXML? output) || output is null)
  12. continue;
  13. if (output.Mini8Configs is null)
  14. continue;
  15. FileInfo fileInfo = new(filePath);
  16. TemperatureConfig temperatureConfig = new();
  17. output.Adapt(temperatureConfig);
  18. temperatureConfig.ConfigName = fileInfo.Name.Replace(fileInfo.Extension, "");
  19. temperatureConfig.Mini8sConfig = [];
  20. foreach (Mini8ConfigXML mini8ConfigXML in output.Mini8Configs)
  21. {
  22. Mini8Config mini8Config = new()
  23. {
  24. Index = mini8ConfigXML.Index,
  25. ChannelConfig = []
  26. };
  27. temperatureConfig.Mini8sConfig[mini8ConfigXML.Index] = mini8Config;
  28. if (mini8ConfigXML.ChannelConfig is null)
  29. continue;
  30. //mini8ConfigXML.ChannelConfig.Foreach(t => mini8Config.ChannelConfig[t.Index] = t);
  31. foreach (var channelConfig in mini8ConfigXML.ChannelConfig)
  32. {
  33. if (channelConfig.Running_P == 0)
  34. channelConfig.Running_P = 100;
  35. if (channelConfig.Running_I == 0)
  36. channelConfig.Running_I = 100;
  37. if (channelConfig.Running_D == 0)
  38. channelConfig.Running_D = 100;
  39. mini8Config.ChannelConfig[channelConfig.Index] = channelConfig;
  40. }
  41. }
  42. configFiles.Files[temperatureConfig.ConfigName] = temperatureConfig;
  43. }
  44. }
  45. public void Save()
  46. {
  47. if (configFiles.Files is null)
  48. return;
  49. foreach (TemperatureConfig configFile in configFiles.Files.Values)
  50. {
  51. if (configFile is null)
  52. continue;
  53. if (string.IsNullOrEmpty(configFile.ConfigName))
  54. continue;
  55. if (configFile.Mini8sConfig is null)
  56. continue;
  57. ConfigSaveXML configSaveXML = new()
  58. {
  59. EditTime = configFile.EditTime,
  60. Editor = configFile.Editor,
  61. Description = configFile.Description,
  62. Mini8Configs = []
  63. };
  64. foreach (Mini8Config mini8Config in configFile.Mini8sConfig.Values)
  65. {
  66. if (mini8Config.ChannelConfig is null)
  67. continue;
  68. Mini8ConfigXML mini8ConfigXML = new()
  69. {
  70. Index = mini8Config.Index,
  71. ChannelConfig = [.. mini8Config.ChannelConfig.Values],
  72. };
  73. configSaveXML.Mini8Configs.Add(mini8ConfigXML);
  74. }
  75. string path = Path.Combine(Paths.ConfigFileFolder, $"{configFile.ConfigName}.mc");
  76. XmlFileHelper.WriteFile(path, configSaveXML);
  77. }
  78. }
  79. public void LoadCurrentSetting()
  80. {
  81. string filePath = Path.Combine(Paths.ConfigFileFolder, "CurrentConfig", $"LastSaved.mc");
  82. if (!XmlHelper.DeserializeXml(filePath, out ConfigSaveXML? output) || output is null)
  83. return;
  84. if (output.Mini8Configs is null)
  85. return;
  86. FileInfo fileInfo = new(filePath);
  87. TemperatureConfig temperatureConfig = new();
  88. output.Adapt(temperatureConfig);
  89. temperatureConfig.ConfigName = fileInfo.Name.Replace(fileInfo.Extension, "");
  90. temperatureConfig.Mini8sConfig = [];
  91. foreach (Mini8ConfigXML mini8ConfigXML in output.Mini8Configs)
  92. {
  93. Mini8Config mini8Config = new()
  94. {
  95. Index = mini8ConfigXML.Index,
  96. ChannelConfig = []
  97. };
  98. temperatureConfig.Mini8sConfig[mini8ConfigXML.Index] = mini8Config;
  99. if (mini8ConfigXML.ChannelConfig is null)
  100. continue;
  101. mini8ConfigXML.ChannelConfig.Foreach(t => mini8Config.ChannelConfig[t.Index] = t);
  102. }
  103. configFiles.CurrentConfigFile = temperatureConfig;
  104. }
  105. public void SaveCurrentSetting()
  106. {
  107. if (configFiles.CurrentConfigFile is null)
  108. return;
  109. TemperatureConfig configFile = configFiles.CurrentConfigFile;
  110. if (configFile is null)
  111. return;
  112. if (string.IsNullOrEmpty(configFile.ConfigName))
  113. return;
  114. if (configFile.Mini8sConfig is null)
  115. return;
  116. ConfigSaveXML configSaveXML = new()
  117. {
  118. EditTime = configFile.EditTime,
  119. Editor = configFile.Editor,
  120. Description = configFile.Description,
  121. Mini8Configs = []
  122. };
  123. foreach (Mini8Config mini8Config in configFile.Mini8sConfig.Values)
  124. {
  125. if (mini8Config.ChannelConfig is null)
  126. continue;
  127. Mini8ConfigXML mini8ConfigXML = new()
  128. {
  129. Index = mini8Config.Index,
  130. ChannelConfig = [.. mini8Config.ChannelConfig.Values],
  131. };
  132. configSaveXML.Mini8Configs.Add(mini8ConfigXML);
  133. }
  134. string path = Path.Combine(Paths.ConfigFileFolder, "CurrentConfig", $"LastSaved.mc");
  135. XmlFileHelper.WriteFile(path, configSaveXML);
  136. }
  137. }
  138. public class CurrentConfigXML
  139. {
  140. public string? SelectedConfig { get; set; }
  141. }
  142. public class ConfigSaveXML
  143. {
  144. public DateTime EditTime { get; set; }
  145. public string? Editor { get; set; }
  146. public string? Description { get; set; }
  147. public List<Mini8ConfigXML>? Mini8Configs { get; set; }
  148. }
  149. public class Mini8ConfigXML
  150. {
  151. public byte Index { get; set; }
  152. public List<ChannelConfig>? ChannelConfig { get; set; }
  153. }