2021-05-16 04:12:47 +03:00
|
|
|
|
using MvvmCross.Commands;
|
|
|
|
|
using MvvmCross.Navigation;
|
2021-05-14 14:07:19 +03:00
|
|
|
|
using MvvmCross.ViewModels;
|
|
|
|
|
using Newtonsoft.Json;
|
2021-05-23 09:24:13 +03:00
|
|
|
|
using Newtonsoft.Json.Serialization;
|
2021-05-14 14:07:19 +03:00
|
|
|
|
using ProxySuper.Core.Models;
|
2021-05-16 04:12:47 +03:00
|
|
|
|
using ProxySuper.Core.Models.Hosts;
|
|
|
|
|
using ProxySuper.Core.Models.Projects;
|
2021-05-14 14:07:19 +03:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
2021-05-16 11:29:37 +03:00
|
|
|
|
using System.Runtime.CompilerServices;
|
2021-05-14 14:07:19 +03:00
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
2021-05-23 09:24:13 +03:00
|
|
|
|
using System.Windows;
|
2021-05-14 14:07:19 +03:00
|
|
|
|
|
|
|
|
|
namespace ProxySuper.Core.ViewModels
|
|
|
|
|
{
|
|
|
|
|
public class HomeViewModel : MvxViewModel
|
|
|
|
|
{
|
|
|
|
|
private readonly IMvxNavigationService _navigationService;
|
|
|
|
|
|
|
|
|
|
public HomeViewModel(IMvxNavigationService navigationService)
|
|
|
|
|
{
|
|
|
|
|
_navigationService = navigationService;
|
|
|
|
|
ReadRecords();
|
2021-05-22 12:14:27 +03:00
|
|
|
|
}
|
|
|
|
|
|
2021-05-23 09:24:13 +03:00
|
|
|
|
|
2021-05-14 14:07:19 +03:00
|
|
|
|
|
2021-05-16 11:29:37 +03:00
|
|
|
|
public void ReadRecords()
|
2021-05-14 14:07:19 +03:00
|
|
|
|
{
|
2021-05-22 12:14:27 +03:00
|
|
|
|
List<Record> records = new List<Record>();
|
|
|
|
|
if (File.Exists("Data/Record.json"))
|
|
|
|
|
{
|
|
|
|
|
var json = File.ReadAllText("Data/Record.json");
|
|
|
|
|
records = JsonConvert.DeserializeObject<List<Record>>(json);
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-14 14:07:19 +03:00
|
|
|
|
this.Records = new MvxObservableCollection<Record>();
|
2021-05-16 04:12:47 +03:00
|
|
|
|
|
2021-05-14 14:07:19 +03:00
|
|
|
|
records.ForEach(item =>
|
|
|
|
|
{
|
2021-05-16 04:12:47 +03:00
|
|
|
|
if (string.IsNullOrEmpty(item.Id))
|
|
|
|
|
{
|
|
|
|
|
item.Id = Guid.NewGuid().ToString();
|
|
|
|
|
}
|
2021-05-14 14:07:19 +03:00
|
|
|
|
this.Records.Add(item);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-22 12:14:27 +03:00
|
|
|
|
public void SaveToJson()
|
2021-05-16 11:29:37 +03:00
|
|
|
|
{
|
2021-05-23 09:24:13 +03:00
|
|
|
|
var json = JsonConvert.SerializeObject(Records, Formatting.Indented, new JsonSerializerSettings
|
|
|
|
|
{
|
|
|
|
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
|
|
|
|
});
|
2021-05-16 11:29:37 +03:00
|
|
|
|
File.WriteAllText("Data/Record.json", json);
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-14 14:07:19 +03:00
|
|
|
|
public MvxObservableCollection<Record> Records { get; set; }
|
2021-05-16 04:12:47 +03:00
|
|
|
|
|
|
|
|
|
public IMvxCommand AddXrayCommand => new MvxAsyncCommand(AddXrayRecord);
|
|
|
|
|
|
2021-05-16 11:29:37 +03:00
|
|
|
|
public IMvxCommand AddTrojanGoCommand => new MvxAsyncCommand(AddTrojanGoRecord);
|
|
|
|
|
|
2021-05-23 09:24:13 +03:00
|
|
|
|
public IMvxCommand RemoveCommand => new MvxAsyncCommand<string>(DeleteRecord);
|
|
|
|
|
|
|
|
|
|
public IMvxCommand EditCommand => new MvxAsyncCommand<string>(EditRecord);
|
|
|
|
|
|
|
|
|
|
public IMvxCommand ViewConfigCommand => new MvxAsyncCommand<string>(ViewConfig);
|
|
|
|
|
|
|
|
|
|
public IMvxCommand InstallCommand => new MvxAsyncCommand<string>(GoToInstall);
|
|
|
|
|
|
2021-05-16 04:12:47 +03:00
|
|
|
|
public async Task AddXrayRecord()
|
|
|
|
|
{
|
|
|
|
|
Record record = new Record();
|
|
|
|
|
record.Id = Guid.NewGuid().ToString();
|
|
|
|
|
record.Host = new Host();
|
|
|
|
|
record.XraySettings = new XraySettings();
|
|
|
|
|
|
|
|
|
|
var result = await _navigationService.Navigate<XrayEditorViewModel, Record, Record>(record);
|
|
|
|
|
if (result == null) return;
|
|
|
|
|
|
|
|
|
|
Records.Add(result);
|
2021-05-22 12:14:27 +03:00
|
|
|
|
SaveToJson();
|
2021-05-16 04:12:47 +03:00
|
|
|
|
}
|
2021-05-16 11:29:37 +03:00
|
|
|
|
|
|
|
|
|
public async Task AddTrojanGoRecord()
|
|
|
|
|
{
|
|
|
|
|
Record record = new Record();
|
|
|
|
|
record.Id = Guid.NewGuid().ToString();
|
|
|
|
|
record.Host = new Host();
|
|
|
|
|
record.TrojanGoSettings = new TrojanGoSettings();
|
|
|
|
|
|
|
|
|
|
var result = await _navigationService.Navigate<TrojanGoEditorViewModel, Record, Record>(record);
|
|
|
|
|
if (result == null) return;
|
|
|
|
|
|
|
|
|
|
Records.Add(result);
|
2021-05-23 09:24:13 +03:00
|
|
|
|
|
|
|
|
|
SaveToJson();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task EditRecord(string id)
|
|
|
|
|
{
|
|
|
|
|
var record = Records.FirstOrDefault(x => x.Id == id);
|
|
|
|
|
if (record == null) return;
|
|
|
|
|
|
|
|
|
|
Record result = null;
|
|
|
|
|
if (record.Type == ProjectType.Xray)
|
|
|
|
|
{
|
|
|
|
|
result = await _navigationService.Navigate<XrayEditorViewModel, Record, Record>(record);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = await _navigationService.Navigate<TrojanGoEditorViewModel, Record, Record>(record);
|
|
|
|
|
}
|
|
|
|
|
if (result == null) return;
|
|
|
|
|
|
|
|
|
|
record.Host = result.Host;
|
|
|
|
|
record.XraySettings = result.XraySettings;
|
|
|
|
|
SaveToJson();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task DeleteRecord(string id)
|
|
|
|
|
{
|
|
|
|
|
var result = MessageBox.Show($"您确认删除主机吗?", "提示", MessageBoxButton.OKCancel);
|
|
|
|
|
if (result == MessageBoxResult.OK)
|
|
|
|
|
{
|
|
|
|
|
var record = Records.FirstOrDefault(x => x.Id == id);
|
|
|
|
|
if (record != null)
|
|
|
|
|
{
|
|
|
|
|
Records.Remove(record);
|
|
|
|
|
SaveToJson();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
await Task.CompletedTask;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task ViewConfig(string id)
|
|
|
|
|
{
|
|
|
|
|
var record = Records.FirstOrDefault(x => x.Id == id);
|
|
|
|
|
if (record == null) return;
|
|
|
|
|
|
|
|
|
|
if (record.Type == ProjectType.Xray)
|
|
|
|
|
{
|
|
|
|
|
await _navigationService.Navigate<XrayConfigViewModel, XraySettings>(record.XraySettings);
|
|
|
|
|
}
|
|
|
|
|
if (record.Type == ProjectType.TrojanGo)
|
|
|
|
|
{
|
|
|
|
|
await _navigationService.Navigate<TrojanGoConfigViewModel, TrojanGoSettings>(record.TrojanGoSettings);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task GoToInstall(string id)
|
|
|
|
|
{
|
|
|
|
|
var record = Records.FirstOrDefault(x => x.Id == id);
|
|
|
|
|
if (record == null) return;
|
|
|
|
|
|
|
|
|
|
if (record.Type == ProjectType.Xray)
|
|
|
|
|
{
|
|
|
|
|
await _navigationService.Navigate<XrayInstallerViewModel, Record>(record);
|
|
|
|
|
}
|
|
|
|
|
if (record.Type == ProjectType.TrojanGo)
|
|
|
|
|
{
|
|
|
|
|
await _navigationService.Navigate<TrojanGoInstallerViewModel, Record>(record);
|
|
|
|
|
}
|
2021-05-16 11:29:37 +03:00
|
|
|
|
}
|
2021-05-14 14:07:19 +03:00
|
|
|
|
}
|
|
|
|
|
}
|