You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

289 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<string>();
_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<string> _workareaNameSource;
public ObservableCollection<string> 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<WorkareaModel>(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<IDialogResult>(result =>
{
if (result != null && result.Result == ButtonResult.OK)
{
var area = result.Parameters.GetValue<Workareas>("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<object> 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<object> 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<StationChannelsModel>
{
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<WorkareaModel>(_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("\\", "/"));
}
});
}
}
}