123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- using InitializerModel;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Converters;
- using PhihongEv.Lib;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace ConfigEditor.SubPage.EvseConfig
- {
- /// <summary>
- /// EvseConfigPanel.xaml 的互動邏輯
- /// </summary>
- public partial class EvseConfigPanel : UserControl
- {
- public EvseConfigPanel()
- {
- InitializeComponent();
- uxEvseModelNameList.SelectionChanged += UxEvseModelNameList_SelectionChanged;
- }
- internal void Reset()
- {
- var modelList = EvseSettingConfig.GetModelList();
- uxEvseModelNameList.SelectedIndex = -1;
- uxEvseModelNameList.ItemsSource = modelList;
- uxButtonTestMode.ItemsSource = Enum.GetValues(typeof(ButtonTestModeType)).Cast<ButtonTestModeType>();
- uxFirmwareStackPanel.Children.Clear();
- this.DataContext = new EvseSettingConfigModel();
- }
- private void UxEvseModelNameList_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- ReloadEvseConfig();
- }
- private void uxSaveConfigBtn_Click(object sender, RoutedEventArgs e)
- {
- if (!CheckSetting())
- {
- return;
- }
- SaveCurrent();
- }
- private void uxNewConfigBtn_Click(object sender, RoutedEventArgs e)
- {
- CreateNewConfig();
- }
- private void ReloadEvseConfig()
- {
- var modelName = uxEvseModelNameList.SelectedItem as string;
- if (string.IsNullOrEmpty(modelName))
- {
- //this.DataContext = new EvseSettingConfigModel();
- Reset();
- return;
- }
- var loadResult = EvseSettingConfig.TryLoad(modelName);
- EvseSettingConfigModel config = null;
- if (loadResult != null && loadResult.Error == EvseSettingConfigLoadError.LoadConfigModelInitNotfound)
- {
- config = new EvseSettingConfigModel() {
- ModelName = modelName
- };
- }
- if (loadResult != null && loadResult.Error == EvseSettingConfigLoadError.None)
- {
- config = loadResult.Result;
- }
- if (config is null)
- {
- MessageBox.Show($"load failed:{loadResult.Error}");
- return;
- }
- //EvseSettingConfigModel config = loadResult.Result;
- //string folderPath = loadResult.ConfigFolderPath;
- string folderPath = EvseSettingConfig.GetModelFolder(modelName);
- SystemID.TryLooseParse(modelName, out var systemID);
- this.DataContext = config;
- uxFirstTelcom.Visibility = systemID.ModelName.GetTelecomCnt() > 0 ? Visibility.Visible : Visibility.Collapsed;
- uxSecondTelcom.Visibility = systemID.ModelName.GetTelecomCnt() > 1 ? Visibility.Visible : Visibility.Collapsed;
- int maxDispenser = 0;
- if (config.PreFlashFirmwareUpdateList != null &&
- config.PreFlashFirmwareUpdateList.Count > 0)
- {
- var preFlashMaxDispenser = config.PreFlashFirmwareUpdateList.Max(x => EvseVersion.GetVersionIndex(x.Module));
- maxDispenser = Math.Max(maxDispenser, preFlashMaxDispenser);
- }
- if (config.FirmwareUpdateList != null &&
- config.FirmwareUpdateList.Count > 0)
- {
- var flashMaxDispenser = config.FirmwareUpdateList.Max(x => EvseVersion.GetVersionIndex(x.Module));
- maxDispenser = Math.Max(maxDispenser, flashMaxDispenser);
- }
- InitializeFirmwarePanel(uxPreFlashStackPanel, "PreFlash", folderPath, config.PreFlashFirmwareUpdateList, maxDispenser);
- InitializeFirmwarePanel(uxFirmwareStackPanel, "", folderPath, config.FirmwareUpdateList, maxDispenser);
- }
- private void InitializeFirmwarePanel(StackPanel firmwareStackPanel, string headerPrefix, string folderPath, List<FirmwareUpdateModel> preFlashFirmwareUpdateList, int dispenserCnt)
- {
- //var groupedPreFlashFrimware = preFlashFirmwareUpdateList is null ? new List<IGrouping<int, FirmwareUpdateModel>>() : preFlashFirmwareUpdateList.GroupBy(x => EvseVersion.GetVersionIndex(x.Module));
- //groupedPreFlashFrimware = groupedPreFlashFrimware.OrderBy(x => x.Key);
- Dictionary<int, List<FirmwareUpdateModel>> groupedPreFlashFrimware = preFlashFirmwareUpdateList is null ? new Dictionary<int, List<FirmwareUpdateModel>>(): preFlashFirmwareUpdateList.GroupBy(x => EvseVersion.GetVersionIndex(x.Module)).ToDictionary(x=>x.Key, x=> x.ToList());
- //groupedPreFlashFrimware = groupedPreFlashFrimware.OrderBy(x => x.Key);
- firmwareStackPanel.Children.Clear();
- for (int index = 0; index <= dispenserCnt; index++)
- {
- var firmwareList = groupedPreFlashFrimware.ContainsKey(index) ? groupedPreFlashFrimware[index] : new List<FirmwareUpdateModel>();
- FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(headerPrefix, folderPath, index, firmwareList);
- firmwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
- firmwareStackPanel.Children.Add(firmwarePanel);
- }
- //foreach (var firmwareGroup in groupedPreFlashFrimware)
- //{
- // FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(headerPrefix, folderPath, firmwareGroup.Key, firmwareGroup.ToList());
- // firmwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
- // firmwareStackPanel.Children.Add(firmwarePanel);
- //}
- //if (!groupedPreFlashFrimware.Select(x => x.Key).Contains(0))
- //{
- // FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(headerPrefix, folderPath, 0, new List<FirmwareUpdateModel>());
- // firmwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
- // firmwareStackPanel.Children.Add(firmwarePanel);
- //}
- }
- private void ClearUi()
- {
- //uxIpAddress.Text = string.Empty;
- uxFirstTelcom.Visibility = Visibility.Collapsed;
- uxSecondTelcom.Visibility = Visibility.Collapsed;
- }
- private FirmwareVersionPanel CreateFirmwarePanel(string headerPrefix, string folderPath, int key, List<FirmwareUpdateModel> firmwareUpdateModels)
- {
- var toReturn = new FirmwareVersionPanel();
- toReturn.HeaderPrefix = headerPrefix;
- toReturn.Index = key;
- toReturn.FileFolderPath = folderPath;
- toReturn.VersionPairs = firmwareUpdateModels;
- //{ Index = key , VersionPairs = firmwareUpdateModels, FileFolderPath = folderPath };
- return toReturn;
- }
- private bool CheckSetting()
- {
- var modelNameString = uxEvseModelNameList.SelectedItem as string;
- EvseSettingConfigModel config = this.DataContext as EvseSettingConfigModel;
- if (string.IsNullOrEmpty(modelNameString) ||
- config == null)
- {
- MessageBox.Show("load model failed");
- return false;
- }
- var systemidParse = SystemID.TryLooseParse(modelNameString, out var systemID);
- if (!systemidParse)
- {
- MessageBox.Show("model name error");
- return false;
- }
- var modelName = systemID.ModelName;
- if (modelName.GetTelecomCnt() > 0 && string.IsNullOrEmpty(config.FourGenModuleVersion))
- {
- MessageBox.Show("ModuleVersion should not be empty");
- return false;
- }
- if (modelName.GetTelecomCnt() > 1 && string.IsNullOrEmpty(config.SubFourGenModuleVersion))
- {
- MessageBox.Show("ModuleVersion should not be empty");
- return false;
- }
- if (config.IsSimInsert)
- {
- if (string.IsNullOrEmpty(config.SimICCID) ||
- string.IsNullOrEmpty(config.SimIMSI))
- {
- MessageBox.Show("ICCID and IMSI should not be empty");
- return false;
- }
- }
- if (config.IsSubSimInsert)
- {
- if (string.IsNullOrEmpty(config.SubSimICCID) ||
- string.IsNullOrEmpty(config.SubSimIMSI))
- {
- MessageBox.Show("Sub ICCID and IMSI should not be empty");
- return false;
- }
- }
- return true;
- }
- private void SaveCurrent()
- {
- var modelName = uxEvseModelNameList.SelectedItem as string;
- EvseSettingConfigModel config = this.DataContext as EvseSettingConfigModel;
- var firmwareUpdateList = LoadFirmwareUpdateListFromPanel(uxFirmwareStackPanel);
- CopyAndRenameFirmwareUpdateList(config.ModelName, firmwareUpdateList);
- config.FirmwareUpdateList = firmwareUpdateList;
- var preFlashFirmwareUpdateList = LoadFirmwareUpdateListFromPanel(uxPreFlashStackPanel);
- CopyAndRenameFirmwareUpdateList(config.ModelName, preFlashFirmwareUpdateList);
- config.PreFlashFirmwareUpdateList = preFlashFirmwareUpdateList;
- //var test = JsonConvert.SerializeObject(config);
- File.WriteAllText(
- EvseSettingConfig.GetModelIniPath(config.ModelName),
- JsonConvert.SerializeObject(
- config,
- Formatting.Indented,
- new StringEnumConverter()
- ));
- Reset();
- }
- private List<FirmwareUpdateModel> LoadFirmwareUpdateListFromPanel(StackPanel firmwareStackPanel)
- {
- var toReturn = new List<FirmwareUpdateModel>();
- foreach (var uiPanel in firmwareStackPanel.Children)
- {
- FirmwareVersionPanel firmwareVersionPanel = uiPanel as FirmwareVersionPanel;
- if (firmwareVersionPanel is null)
- {
- continue;
- }
- toReturn.AddRange(firmwareVersionPanel.VersionPairs);
- }
- return toReturn;
- }
- private void CopyAndRenameFirmwareUpdateList(string modelName, List<FirmwareUpdateModel> firmwareUpdateList)
- {
- if (firmwareUpdateList == null)
- {
- return;
- }
- var modelPath = EvseSettingConfig.GetModelFolder(modelName);
- foreach (var model in firmwareUpdateList)
- {
- if (string.IsNullOrEmpty(model.FirmwareFileName))
- {
- continue;
- }
- var firmwarePath = System.IO.Path.GetDirectoryName(model.FirmwareFileName);
- var firmwareName = System.IO.Path.GetFileName(model.FirmwareFileName);
- if (firmwarePath != modelPath)
- {
- //Copy
- var copyToPathFileName = System.IO.Path.Combine(modelPath, firmwareName);
- if (File.Exists(copyToPathFileName))
- {
- File.Delete(copyToPathFileName);
- }
- File.Copy(model.FirmwareFileName, copyToPathFileName);
- }
- model.FirmwareFileName = firmwareName;
- }
- }
- private void CreateNewConfig()
- {
- var dlg = new NewModelNameDlg();
- dlg.Owner = MainWindow.Instance;
- dlg.ShowDialog();
- if (dlg.DialogResult != true)
- {
- return;
- }
- var modelName = dlg.ModelName;
- var modelFolderPath = EvseSettingConfig.GetModelFolder(modelName);
- var modelIniPath = EvseSettingConfig.GetModelIniPath(modelName);
- if (!Directory.Exists(modelFolderPath))
- {
- Directory.CreateDirectory(modelFolderPath);
- }
- var initModelSetting = new EvseSettingConfigModel() { ModelName = modelName };
- File.WriteAllText(
- modelIniPath,
- JsonConvert.SerializeObject(
- initModelSetting,
- Formatting.Indented,
- new StringEnumConverter()
- ));
- Reset();
- }
- private void AddDispenser_Click(object sender, RoutedEventArgs e)
- {
- List<int> createdFrimwareIndex = new List<int>();
- foreach (var uiElement in uxFirmwareStackPanel.Children)
- {
- FirmwareVersionPanel firmwarePanel = uiElement as FirmwareVersionPanel;
- if (firmwarePanel is null)
- {
- continue;
- }
- createdFrimwareIndex.Add(firmwarePanel.Index);
- //FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, firmwareGroup.Key, firmwareGroup.ToList());
- //uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
- //uxFrimwareStackPanel.Children.Add(firmwarePanel);
- }
- int toCreateIndex = 0;
- while (createdFrimwareIndex.Contains(toCreateIndex))
- {
- toCreateIndex++;
- }
- var modelName = uxEvseModelNameList.SelectedItem as string;
- var folderPath = EvseSettingConfig.GetModelFolder(modelName);
- FirmwareVersionPanel createdFirmwarePanel = CreateFirmwarePanel("PreFlash", folderPath, toCreateIndex, new List<FirmwareUpdateModel>());
- uxPreFlashStackPanel.Children.Add(new Rectangle() { Height = 10 });
- uxPreFlashStackPanel.Children.Add(createdFirmwarePanel);
- FirmwareVersionPanel createdPreFlashFirmwarePanel = CreateFirmwarePanel("", folderPath, toCreateIndex, new List<FirmwareUpdateModel>());
- uxFirmwareStackPanel.Children.Add(new Rectangle() { Height = 10 });
- uxFirmwareStackPanel.Children.Add(createdPreFlashFirmwarePanel);
- }
- }
- }
|