EvseConfigPanel.xaml.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. using InitializerModel;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Converters;
  4. using PhihongEv.Lib;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Data;
  15. using System.Windows.Documents;
  16. using System.Windows.Input;
  17. using System.Windows.Media;
  18. using System.Windows.Media.Imaging;
  19. using System.Windows.Navigation;
  20. using System.Windows.Shapes;
  21. namespace ConfigEditor.SubPage.EvseConfig
  22. {
  23. /// <summary>
  24. /// EvseConfigPanel.xaml 的互動邏輯
  25. /// </summary>
  26. public partial class EvseConfigPanel : UserControl
  27. {
  28. public EvseConfigPanel()
  29. {
  30. InitializeComponent();
  31. uxEvseModelNameList.SelectionChanged += UxEvseModelNameList_SelectionChanged;
  32. }
  33. internal void Reset()
  34. {
  35. var modelList = EvseSettingConfig.GetModelList();
  36. uxEvseModelNameList.SelectedIndex = -1;
  37. uxEvseModelNameList.ItemsSource = modelList;
  38. uxButtonTestMode.ItemsSource = Enum.GetValues(typeof(ButtonTestModeType)).Cast<ButtonTestModeType>();
  39. uxFrimwareStackPanel.Children.Clear();
  40. this.DataContext = new EvseSettingConfigModel();
  41. }
  42. private void UxEvseModelNameList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  43. {
  44. ReloadEvseConfig();
  45. }
  46. private void uxSaveConfigBtn_Click(object sender, RoutedEventArgs e)
  47. {
  48. if (!CheckSetting())
  49. {
  50. return;
  51. }
  52. SaveCurrent();
  53. }
  54. private void uxNewConfigBtn_Click(object sender, RoutedEventArgs e)
  55. {
  56. CreateNewConfig();
  57. }
  58. private void ReloadEvseConfig()
  59. {
  60. var modelName = uxEvseModelNameList.SelectedItem as string;
  61. if (string.IsNullOrEmpty(modelName))
  62. {
  63. //this.DataContext = new EvseSettingConfigModel();
  64. Reset();
  65. return;
  66. }
  67. var loadResult = EvseSettingConfig.TryLoad(modelName);
  68. EvseSettingConfigModel config = null;
  69. if (loadResult != null && loadResult.Error == EvseSettingConfigLoadError.LoadConfigModelInitNotfound)
  70. {
  71. config = new EvseSettingConfigModel() {
  72. ModelName = modelName
  73. };
  74. }
  75. if (loadResult != null && loadResult.Error == EvseSettingConfigLoadError.None)
  76. {
  77. config = loadResult.Result;
  78. }
  79. if (config is null)
  80. {
  81. MessageBox.Show($"load failed:{loadResult.Error}");
  82. return;
  83. }
  84. //EvseSettingConfigModel config = loadResult.Result;
  85. //string folderPath = loadResult.ConfigFolderPath;
  86. string folderPath = EvseSettingConfig.GetModelFolder(modelName);
  87. SystemID.TryLooseParse(modelName, out var systemID);
  88. this.DataContext = config;
  89. uxFirstTelcom.Visibility = systemID.ModelName.GetTelecomCnt() > 0 ? Visibility.Visible : Visibility.Collapsed;
  90. uxSecondTelcom.Visibility = systemID.ModelName.GetTelecomCnt() > 1 ? Visibility.Visible : Visibility.Collapsed;
  91. var groupedFrimware = config.FirmwareUpdateList is null ? new List<IGrouping<int, FirmwareUpdateModel>>() : config.FirmwareUpdateList.GroupBy(x => EvseVersion.GetVersionIndex(x.Module));
  92. groupedFrimware = groupedFrimware.OrderBy(x => x.Key);
  93. uxFrimwareStackPanel.Children.Clear();
  94. foreach (var firmwareGroup in groupedFrimware)
  95. {
  96. FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, firmwareGroup.Key, firmwareGroup.ToList());
  97. uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
  98. uxFrimwareStackPanel.Children.Add(firmwarePanel);
  99. }
  100. if (!groupedFrimware.Select(x => x.Key).Contains(0))
  101. {
  102. FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, 0, new List<FirmwareUpdateModel>());
  103. uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
  104. uxFrimwareStackPanel.Children.Add(firmwarePanel);
  105. }
  106. }
  107. private void ClearUi()
  108. {
  109. //uxIpAddress.Text = string.Empty;
  110. uxFirstTelcom.Visibility = Visibility.Collapsed;
  111. uxSecondTelcom.Visibility = Visibility.Collapsed;
  112. }
  113. private FirmwareVersionPanel CreateFirmwarePanel(string folderPath, int key, List<FirmwareUpdateModel> firmwareUpdateModels)
  114. {
  115. var toReturn = new FirmwareVersionPanel();
  116. toReturn.Index = key;
  117. toReturn.FileFolderPath = folderPath;
  118. toReturn.VersionPairs = firmwareUpdateModels;
  119. //{ Index = key , VersionPairs = firmwareUpdateModels, FileFolderPath = folderPath };
  120. return toReturn;
  121. }
  122. private bool CheckSetting()
  123. {
  124. var modelNameString = uxEvseModelNameList.SelectedItem as string;
  125. EvseSettingConfigModel config = this.DataContext as EvseSettingConfigModel;
  126. if (string.IsNullOrEmpty(modelNameString) ||
  127. config == null)
  128. {
  129. MessageBox.Show("load model failed");
  130. return false;
  131. }
  132. var systemidParse = SystemID.TryLooseParse(modelNameString, out var systemID);
  133. if (!systemidParse)
  134. {
  135. MessageBox.Show("model name error");
  136. return false;
  137. }
  138. var modelName = systemID.ModelName;
  139. if (modelName.GetTelecomCnt() > 0 && string.IsNullOrEmpty(config.FourGenModuleVersion))
  140. {
  141. MessageBox.Show("ModuleVersion should not be empty");
  142. return false;
  143. }
  144. if (modelName.GetTelecomCnt() > 1 && string.IsNullOrEmpty(config.SubFourGenModuleVersion))
  145. {
  146. MessageBox.Show("ModuleVersion should not be empty");
  147. return false;
  148. }
  149. if (config.IsSimInsert)
  150. {
  151. if (string.IsNullOrEmpty(config.SimICCID) ||
  152. string.IsNullOrEmpty(config.SimIMSI))
  153. {
  154. MessageBox.Show("ICCID and IMSI should not be empty");
  155. return false;
  156. }
  157. }
  158. if (config.IsSubSimInsert)
  159. {
  160. if (string.IsNullOrEmpty(config.SubSimICCID) ||
  161. string.IsNullOrEmpty(config.SubSimIMSI))
  162. {
  163. MessageBox.Show("Sub ICCID and IMSI should not be empty");
  164. return false;
  165. }
  166. }
  167. return true;
  168. }
  169. private void SaveCurrent()
  170. {
  171. var modelName = uxEvseModelNameList.SelectedItem as string;
  172. EvseSettingConfigModel config = this.DataContext as EvseSettingConfigModel;
  173. var firmwareUpdateList = LoadFirmwareUpdateListFromPanel();
  174. CopyAndRenameFirmwareUpdateList(config.ModelName, firmwareUpdateList);
  175. config.FirmwareUpdateList = firmwareUpdateList;
  176. //var test = JsonConvert.SerializeObject(config);
  177. File.WriteAllText(
  178. EvseSettingConfig.GetModelIniPath(config.ModelName),
  179. JsonConvert.SerializeObject(
  180. config,
  181. Formatting.Indented,
  182. new StringEnumConverter()
  183. ));
  184. Reset();
  185. }
  186. private List<FirmwareUpdateModel> LoadFirmwareUpdateListFromPanel()
  187. {
  188. var toReturn = new List<FirmwareUpdateModel>();
  189. foreach (var uiPanel in uxFrimwareStackPanel.Children)
  190. {
  191. FirmwareVersionPanel firmwareVersionPanel = uiPanel as FirmwareVersionPanel;
  192. if (firmwareVersionPanel is null)
  193. {
  194. continue;
  195. }
  196. toReturn.AddRange(firmwareVersionPanel.VersionPairs);
  197. }
  198. return toReturn;
  199. }
  200. private void CopyAndRenameFirmwareUpdateList(string modelName, List<FirmwareUpdateModel> firmwareUpdateList)
  201. {
  202. if (firmwareUpdateList == null)
  203. {
  204. return;
  205. }
  206. var modelPath = EvseSettingConfig.GetModelFolder(modelName);
  207. foreach (var model in firmwareUpdateList)
  208. {
  209. if (string.IsNullOrEmpty(model.FirmwareFileName))
  210. {
  211. continue;
  212. }
  213. var firmwarePath = System.IO.Path.GetDirectoryName(model.FirmwareFileName);
  214. var firmwareName = System.IO.Path.GetFileName(model.FirmwareFileName);
  215. if (firmwarePath != modelPath)
  216. {
  217. //Copy
  218. var copyToPathFileName = System.IO.Path.Combine(modelPath, firmwareName);
  219. if (File.Exists(copyToPathFileName))
  220. {
  221. File.Delete(copyToPathFileName);
  222. }
  223. File.Copy(model.FirmwareFileName, copyToPathFileName);
  224. }
  225. model.FirmwareFileName = firmwareName;
  226. }
  227. }
  228. private void CreateNewConfig()
  229. {
  230. var dlg = new NewModelNameDlg();
  231. dlg.Owner = MainWindow.Instance;
  232. dlg.ShowDialog();
  233. if (dlg.DialogResult != true)
  234. {
  235. return;
  236. }
  237. var modelName = dlg.ModelName;
  238. var modelFolderPath = EvseSettingConfig.GetModelFolder(modelName);
  239. var modelIniPath = EvseSettingConfig.GetModelIniPath(modelName);
  240. if (!Directory.Exists(modelFolderPath))
  241. {
  242. Directory.CreateDirectory(modelFolderPath);
  243. }
  244. var initModelSetting = new EvseSettingConfigModel() { ModelName = modelName };
  245. File.WriteAllText(
  246. modelIniPath,
  247. JsonConvert.SerializeObject(
  248. initModelSetting,
  249. Formatting.Indented,
  250. new StringEnumConverter()
  251. ));
  252. Reset();
  253. }
  254. private void AddDispenser_Click(object sender, RoutedEventArgs e)
  255. {
  256. List<int> createdFrimwareIndex = new List<int>();
  257. foreach (var uiElement in uxFrimwareStackPanel.Children)
  258. {
  259. FirmwareVersionPanel firmwarePanel = uiElement as FirmwareVersionPanel;
  260. if (firmwarePanel is null)
  261. {
  262. continue;
  263. }
  264. createdFrimwareIndex.Add(firmwarePanel.Index);
  265. //FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, firmwareGroup.Key, firmwareGroup.ToList());
  266. //uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
  267. //uxFrimwareStackPanel.Children.Add(firmwarePanel);
  268. }
  269. int toCreateIndex = 0;
  270. while (createdFrimwareIndex.Contains(toCreateIndex))
  271. {
  272. toCreateIndex++;
  273. }
  274. var modelName = uxEvseModelNameList.SelectedItem as string;
  275. var folderPath = EvseSettingConfig.GetModelFolder(modelName);
  276. FirmwareVersionPanel createdFirmwarePanel = CreateFirmwarePanel(folderPath, toCreateIndex, new List<FirmwareUpdateModel>());
  277. uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
  278. uxFrimwareStackPanel.Children.Add(createdFirmwarePanel);
  279. }
  280. }
  281. }