using Google.Protobuf.WellKnownTypes; using Newtonsoft.Json; using Prism.Commands; using Prism.Ioc; using Prism.Mvvm; using Prism.Services.Dialogs; using StartServerWPF.Models; using StartServerWPF.Modules.Main.Models; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media.Animation; namespace StartServerWPF.Modules.Main.ViewModels { public class SetParamViewModel : BindableBase { public SetParamViewModel(IDialogService dialogService, SystemConfigModel configModel, WorkareaModel workareaModel, WorkareasModelArray workareasModelArray) { this._dialogService = dialogService; _systemConfig = configModel; WareaModel = workareaModel; this._workareasModelArray = workareasModelArray; MainModel = _systemConfig.vpnInfo; WorkareaNameSource = new ObservableCollection(); _workareasModelArray.workarea.Select(n=>n.workareaname).ToList().ForEach(a=> WorkareaNameSource.Add(a)); WareaSelectedIndex = _workareasModelArray.selectIndex; } private string _title = "应用列表"; public string Title => _title; string apmStationFile = string.Empty; string apmttime2dFile = string.Empty; private readonly IDialogService _dialogService; private SystemConfigModel _systemConfig; private readonly WorkareasModelArray _workareasModelArray; private ObservableCollection _workareaNameSource; public ObservableCollection WorkareaNameSource { get => _workareaNameSource; set { SetProperty(ref _workareaNameSource, value); } } private int _wareaSelectedIndex; public int WareaSelectedIndex { get => _wareaSelectedIndex; set { if (value >= 0) { try { var area = _workareasModelArray.workarea[value]; string file = Path.Combine(area.filepath, Path.GetFileName(area.filepath) + ".json"); string json = File.ReadAllText(file); WareaModel = JsonConvert.DeserializeObject(json); } catch (Exception ex) { MessageBox.Show("当前工区目录配置文件不存在," + ex.Message); } _workareasModelArray.selectIndex = value; } SetProperty(ref _wareaSelectedIndex, value); } } private WorkareaModel _wareaModel = new WorkareaModel(); public WorkareaModel WareaModel { get => _wareaModel; set { SetProperty(ref _wareaModel, value); } } private string _addWorkareaName; public string AddWorkareaName { get => _addWorkareaName; set { SetProperty(ref _addWorkareaName, value); } } private VpnInfo _mainModel = new VpnInfo(); public VpnInfo MainModel { get => _mainModel; set { SetProperty(ref _mainModel, value); } } public DelegateCommand LoadedCommand => new(() => { apmStationFile = string.Empty; apmttime2dFile = string.Empty; // WareaModel.apmModel = ; }); public DelegateCommand AddItemCommand => new(() => { DialogParameters param = new DialogParameters(); // param.Add("type", 1);// 编辑 _dialogService.ShowDialog("AddWorkAreaDialog", param, new Action(result => { if (result != null && result.Result == ButtonResult.OK) { var area = result.Parameters.GetValue("param1"); var file = _workareasModelArray.workarea.Where(f => f.workareaname == area.workareaname).FirstOrDefault(); if (file == null) { _workareasModelArray.workarea.Add(area); WorkareaNameSource.Add(area.workareaname); WareaSelectedIndex= WorkareaNameSource.Count()-1; } else { //更新当前工区目录 file.filepath = area.filepath; WareaSelectedIndex = _workareasModelArray.selectIndex; } } })); }); public DelegateCommand DeleteItemCommand => new(() => { if (MessageBox.Show($"删除{WareaModel.workareaname}工区所有文件?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { if (Directory.Exists(WareaModel.savepath)) { Directory.Delete(WareaModel.savepath, true); } var area= _workareasModelArray.workarea.Where(a => a.workareaname == WareaModel.workareaname).FirstOrDefault(); WorkareaNameSource.Remove(WareaModel.workareaname); _workareasModelArray.workarea.Remove(area); WareaSelectedIndex =0; } }); public DelegateCommand SelectFileCommand => new((obj) => { string para = obj.ToString(); System.Windows.Forms.OpenFileDialog fbd = new System.Windows.Forms.OpenFileDialog(); fbd.Multiselect = false; // fbd.InitialDirectory = Path.GetFullPath(_wareaModel.savepath); if (fbd.ShowDialog()== System.Windows.Forms.DialogResult.OK) { switch (para) { case "apmsStation": WareaModel.apmModel.station = fbd.SafeFileName; apmStationFile = fbd.FileName; break; case "apmsttime2d": WareaModel.apmModel.ttime[0].ttime2d = fbd.SafeFileName; apmttime2dFile = fbd.FileName; break; default: break; } } }); public DelegateCommand FilePathSaveCommand=> new((obj)=> { string para= obj.ToString(); System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog(); // fbd.SelectedPath = MainModel.DataSavePath; fbd.ShowNewFolderButton = true; if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string path= fbd.SelectedPath.Replace("\\", "/"); if (para == "savepath") { WareaModel.savepath = path; } } }); public DelegateCommand LogPathSaveCommand=> new(() => { System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog(); fbd.SelectedPath = System.Environment.CurrentDirectory + "\\" + MainModel.SystemLogPath; fbd.ShowNewFolderButton = true; if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { MainModel.SystemLogPath = fbd.SelectedPath; } }); public ICommand ConfirmCommand { get => new DelegateCommand(() => { // 数据校验(关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查(自定义特性检查) if (string.IsNullOrEmpty(WareaModel.savepath) || string.IsNullOrEmpty(WareaModel.apmModel.station) || string.IsNullOrEmpty(WareaModel.apmModel.ttime[0].ttime2d)) { MessageBox.Show("目录内容不能为空", "提示", MessageBoxButton.OK); return; } if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { //1 Workarea配置更新,选择的索引 JsonParser.WriteSystemConfigFile(Path.Combine(JsonParser.workareaPath, "Workareas.json"), _workareasModelArray); _wareaModel.apmModel.channels = new List { new StationChannelsModel() { location = _wareaModel.StationConfig.Location, network = _wareaModel.StationConfig.Network, channels = _wareaModel.StationConfig.Channels, station = string.Join(",", _wareaModel.StationConfig.Stations.Where(p => p.IsEnable).Select(n => n.Name)) } }; JsonParser.WriteSystemConfigFile(Path.Combine(_wareaModel.savepath, "Workarea.json"), _wareaModel); var curWorkarea = JsonParser.DeepCopy(_wareaModel); if (!string.IsNullOrEmpty(apmStationFile)) { string destFileName = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)); if (destFileName != apmStationFile) { File.Copy(apmStationFile, destFileName, true); } apmStationFile = null; } if(!string.IsNullOrEmpty(apmttime2dFile)) { string destFileName = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)); if (destFileName != apmttime2dFile) { File.Copy(apmttime2dFile, destFileName, true); } apmttime2dFile = null; } //2 gw.apms.exe配置更新 { ApmsModel apms = curWorkarea.apmModel; apms.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); apms.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); apms.savepath = Path.Combine(curWorkarea.savepath, curWorkarea.apmsavepath); apms.push2wx = curWorkarea.apmpush2wx ? "YES" : "NO"; JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.proApms.ProPath, "apms.json"), apms); } //3 gw.tools.exe配置更新 { ApmsModel tools = curWorkarea.apmModel; tools.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); tools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); tools.savepath = Path.Combine(curWorkarea.savepath, curWorkarea.toolsavepath); tools.push2wx = curWorkarea.toolpush2wx ? "YES" : "NO"; ; JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.proTools.ProPath, "apms.json"), tools); //4 SystemConfig.json配置更新 int index = _systemConfig.proTools.ProParams.IndexOf("-savepath"); string str = _systemConfig.proTools.ProParams.Substring(0, index) + "-savepath"; _systemConfig.proTools.ProParams = $"{str} {tools.savepath} -delay {curWorkarea.delayTime * 60}"; JsonParser.WriteSystemConfigFile(JsonParser.systemConfigPath, _systemConfig); } //dataProTools配置更新 ApmsModel protools = curWorkarea.apmModel; // tools.savepath = SavePath; // _workareaModel.savepath + "/" +SavePath;; protools.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); protools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); // protools.push2wx = _workareaModel.toolpush2wx ? "YES" : "NO"; JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.dataProTools.ProPath, "apms.json"), protools); //5 gw.recvftp.exe配置更新 JsonParser.UpdateRecvJson(Path.Combine(_systemConfig.proRecv.ProPath, _systemConfig.proRecv.JsonPath), Path.Combine(curWorkarea.savepath, curWorkarea.chartsavepath).Replace("\\", "/")); } }); } } }