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 { /// /// EvseConfigPanel.xaml 的互動邏輯 /// 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(); uxFrimwareStackPanel.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; var groupedFrimware = config.FirmwareUpdateList is null ? new List>() : config.FirmwareUpdateList.GroupBy(x => EvseVersion.GetVersionIndex(x.Module)); groupedFrimware = groupedFrimware.OrderBy(x => x.Key); uxFrimwareStackPanel.Children.Clear(); foreach (var firmwareGroup in groupedFrimware) { FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, firmwareGroup.Key, firmwareGroup.ToList()); uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 }); uxFrimwareStackPanel.Children.Add(firmwarePanel); } if (!groupedFrimware.Select(x => x.Key).Contains(0)) { FirmwareVersionPanel firmwarePanel = CreateFirmwarePanel(folderPath, 0, new List()); uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 }); uxFrimwareStackPanel.Children.Add(firmwarePanel); } } private void ClearUi() { //uxIpAddress.Text = string.Empty; uxFirstTelcom.Visibility = Visibility.Collapsed; uxSecondTelcom.Visibility = Visibility.Collapsed; } private FirmwareVersionPanel CreateFirmwarePanel(string folderPath, int key, List firmwareUpdateModels) { var toReturn = new FirmwareVersionPanel(); 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(); CopyAndRenameFirmwareUpdateList(config.ModelName, firmwareUpdateList); config.FirmwareUpdateList = firmwareUpdateList; //var test = JsonConvert.SerializeObject(config); File.WriteAllText( EvseSettingConfig.GetModelIniPath(config.ModelName), JsonConvert.SerializeObject( config, Formatting.Indented, new StringEnumConverter() )); Reset(); } private List LoadFirmwareUpdateListFromPanel() { var toReturn = new List(); foreach (var uiPanel in uxFrimwareStackPanel.Children) { FirmwareVersionPanel firmwareVersionPanel = uiPanel as FirmwareVersionPanel; if (firmwareVersionPanel is null) { continue; } toReturn.AddRange(firmwareVersionPanel.VersionPairs); } return toReturn; } private void CopyAndRenameFirmwareUpdateList(string modelName, List 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 createdFrimwareIndex = new List(); foreach (var uiElement in uxFrimwareStackPanel.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(folderPath, toCreateIndex, new List()); uxFrimwareStackPanel.Children.Add(new Rectangle() { Height = 10 }); uxFrimwareStackPanel.Children.Add(createdFirmwarePanel); } } }