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.

259 lines
10 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 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.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace StartServerWPF.Modules.Main.ViewModels
{
public class SetParamViewModel : BindableBase
{
public SetParamViewModel(MainViewModel mainViewModel,SystemConfigModel configModel)
{
_systemConfig = mainViewModel._systemConfig;
MainModel = _systemConfig.vpnInfo;
MoniTime = mainViewModel.MoniStartTime;
string sapm = File.ReadAllText(configModel.proApms.ProPath+ "apms.json");
AModel = JsonConvert.DeserializeObject<ApmsModel>(sapm);
ApmsJsonName = _systemConfig.proApms.JsonPath;
var apmsStation = ToolsModel.CreateStationFromCSV(configModel.proApms.ProPath + AModel.station);
ApmsStationSource = new ObservableCollection<StationControlModel>();
foreach (var item in apmsStation)
{
if (item.Enable)
{
ApmsStationSource.Add(item);
}
}
IsApmswxNotity = AModel.push2wx == "NO" ? false : true;
string tool = File.ReadAllText(configModel.proTools.ProPath + "apms.json");
ToolsModel = JsonConvert.DeserializeObject<ApmsModel>(tool);
ToolsJsonName = _systemConfig.proTools.JsonPath;
var st= ToolsModel.CreateStationFromCSV(configModel.proTools.ProPath + AModel.station);
ToolsStationSource = new ObservableCollection<StationControlModel>();
foreach (var item in st)
{
if (item.Enable)
{
ToolsStationSource.Add(item);
}
}
IsToolswxNotity = ToolsModel.push2wx == "NO" ? false : true;
int index= _systemConfig.proTools.ProParams.IndexOf("-delay");
int.TryParse (_systemConfig.proTools.ProParams.Substring(index+ "-delay".Length), out int Time);
DelayTime = Time/60;
}
private string _title = "应用列表";
public string Title => _title;
private SystemConfigModel _systemConfig;
private string _apmsJsonName;
public string ApmsJsonName
{
get => _apmsJsonName;
set { SetProperty(ref _apmsJsonName, value); }
}
private bool _isApmswxNotity;
public bool IsApmswxNotity
{
get => _isApmswxNotity;
set { SetProperty(ref _isApmswxNotity, value); }
}
private ApmsModel _apmsModel = new ApmsModel();
public ApmsModel AModel
{
get => _apmsModel;
set { SetProperty(ref _apmsModel, value); }
}
private string _toolsJsonName;
public string ToolsJsonName
{
get => _toolsJsonName;
set { SetProperty(ref _toolsJsonName, value); }
}
private ApmsModel _toolsModel = new ApmsModel();
public ApmsModel ToolsModel
{
get => _toolsModel;
set { SetProperty(ref _toolsModel, value); }
}
private bool _isToolswxNotity;
public bool IsToolswxNotity
{
get => _isToolswxNotity;
set { SetProperty(ref _isToolswxNotity, value); }
}
private int _delayTime;
public int DelayTime
{
get => _delayTime;
set { SetProperty(ref _delayTime, value); }
}
private ObservableCollection<StationControlModel> _toolsStationSource;
public ObservableCollection<StationControlModel> ToolsStationSource
{ get => _toolsStationSource; set => SetProperty(ref _toolsStationSource, value); }
private ObservableCollection<StationControlModel> _ApmsStationSource;
public ObservableCollection<StationControlModel> ApmsStationSource
{ get => _ApmsStationSource; set => SetProperty(ref _ApmsStationSource, value); }
private VpnInfo _mainModel = new VpnInfo();
public VpnInfo MainModel
{
get => _mainModel;
set { SetProperty(ref _mainModel, value); }
}
private DateTime _moniTime ;
public DateTime MoniTime
{
get => _moniTime;
set { SetProperty(ref _moniTime, value); }
}
public DelegateCommand<object> SelectFileCommand => new((obj) =>
{
string para = obj.ToString();
System.Windows.Forms.OpenFileDialog fbd = new System.Windows.Forms.OpenFileDialog();
fbd.Multiselect = false;
if (para.Contains("apms"))
{
fbd.InitialDirectory = Path.GetFullPath(_systemConfig.proApms.ProPath);
}
else
{
fbd.InitialDirectory = Path.GetFullPath(_systemConfig.proTools.ProPath);
}
if (fbd.ShowDialog()== System.Windows.Forms.DialogResult.OK)
{
switch (para)
{
case "apmsStation":
AModel.station = fbd.SafeFileName;
break;
case "apmsttime2d":
AModel.ttime[0].ttime2d = fbd.SafeFileName;
break;
case "toolsStation":
ToolsModel.station = fbd.SafeFileName;
break;
case "toolsttime2d":
ToolsModel.ttime[0].ttime2d = fbd.SafeFileName;
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)
{
if (para == "systemSavepath")
{
MainModel.DataSavePath = fbd.SelectedPath;
}
else if(para == "apmssavepath")
{
AModel.savepath = fbd.SelectedPath;
}
else if(para == "toolssavepath")
{
ToolsModel.savepath = fbd.SelectedPath;
}
}
});
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(MainModel.VpnName) || string.IsNullOrEmpty(MainModel.VpnIP))
{
MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK);
return;
}
if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel,
MessageBoxImage.Exclamation) == MessageBoxResult.OK)
{
AModel.channels[0].station = string.Join(",", ApmsStationSource.Where(p => p.Enable).Select(a => a.Num));
if (_systemConfig.proApms.JsonPath != ApmsJsonName)
{
_systemConfig.proApms.ProParams = _systemConfig.proApms.ProParams.Replace(_systemConfig.proApms.JsonPath, ApmsJsonName);
_systemConfig.proApms.JsonPath = ApmsJsonName;
}
JsonParser.WriteSystemConfigFile(_systemConfig.proApms.ProPath + ApmsJsonName, AModel);
ToolsModel.channels[0].station = string.Join(",", ToolsStationSource.Where(p => p.Enable).Select(a => a.Num));
if (_systemConfig.proTools.JsonPath != ToolsJsonName)
{
_systemConfig.proTools.ProParams = _systemConfig.proTools.ProParams.Replace(_systemConfig.proTools.JsonPath, ToolsJsonName);
_systemConfig.proTools.JsonPath = ToolsJsonName;
}
//if (_systemConfig.vpnInfo.DataSavePath != ToolsModel.savepath)
//{
// _systemConfig.vpnInfo.DataSavePath = ToolsModel.savepath;
//}
JsonParser.WriteSystemConfigFile(_systemConfig.proTools.ProPath + ToolsJsonName, ToolsModel);
int index= _systemConfig.proTools.ProParams.IndexOf("-savepath");
// int index = _systemConfig.proTools.ProParams.IndexOf("-delay");
string st= _systemConfig.proTools.ProParams.Substring(0, index);
_systemConfig.proTools.ProParams = $"{_systemConfig.proTools.ProParams.Substring(0, index)}{ToolsModel.savepath} -delay {DelayTime * 60}";
JsonParser.WriteSystemConfigFile(JsonParser.systemConfigPath, _systemConfig);
JsonParser.UpdateRecvJson(_systemConfig.proRecv.ProPath + _systemConfig.proRecv.JsonPath, _systemConfig.vpnInfo.DataSavePath);
//JsonParser.UpdateApmsJson(_systemConfig.proApms.ProPath + _systemConfig.proApms.JsonPath, _systemConfig.vpnInfo.DataSavePath);
// RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
});
}
}
}