1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-25 22:56:09 +03:00
ProxySU/ProxySuper.Core/ViewModels/XrayEditorViewModel.cs

456 lines
12 KiB
C#
Raw Normal View History

2021-07-08 13:37:32 +03:00
using MvvmCross.Commands;
2021-05-16 04:12:47 +03:00
using MvvmCross.Navigation;
2021-05-15 11:45:36 +03:00
using MvvmCross.ViewModels;
2021-05-14 14:07:19 +03:00
using ProxySuper.Core.Models;
using ProxySuper.Core.Models.Hosts;
using ProxySuper.Core.Models.Projects;
2021-05-15 11:45:36 +03:00
using ProxySuper.Core.Services;
2021-05-14 14:07:19 +03:00
using System;
using System.Collections.Generic;
using System.Linq;
2021-05-15 11:45:36 +03:00
using System.Windows.Controls;
2021-05-14 14:07:19 +03:00
namespace ProxySuper.Core.ViewModels
{
2021-05-16 04:12:47 +03:00
public partial class XrayEditorViewModel : MvxViewModel<Record, Record>
2021-05-14 14:07:19 +03:00
{
2021-05-16 11:29:37 +03:00
public XrayEditorViewModel(IMvxNavigationService navigationService)
2021-05-15 11:45:36 +03:00
{
2021-05-16 11:29:37 +03:00
NavigationService = navigationService;
2021-05-15 11:45:36 +03:00
}
2021-05-16 04:12:47 +03:00
public string Id { get; set; }
2021-05-14 14:07:19 +03:00
public Host Host { get; set; }
public XraySettings Settings { get; set; }
2021-08-18 12:34:32 +03:00
public IMvxCommand SaveCommand => new MvxCommand(Save);
public IMvxCommand SaveAndInstallCommand => new MvxCommand(SaveAndInstall);
2021-05-16 11:29:37 +03:00
public IMvxNavigationService NavigationService { get; }
2021-05-16 04:12:47 +03:00
2021-05-14 14:07:19 +03:00
public override void Prepare(Record parameter)
{
2021-05-16 04:12:47 +03:00
var record = Utils.DeepClone(parameter);
Id = record.Id;
Host = record.Host;
Settings = record.XraySettings;
}
public void Save()
{
2021-05-16 11:29:37 +03:00
NavigationService.Close(this, new Record()
2021-05-16 04:12:47 +03:00
{
Id = Id,
Host = Host,
XraySettings = Settings,
2021-05-16 11:29:37 +03:00
});
2021-05-15 11:45:36 +03:00
}
2021-08-18 12:34:32 +03:00
public void SaveAndInstall()
{
var record = new Record()
{
Id = Id,
Host = Host,
XraySettings = Settings,
};
NavigationService.Close(this, record);
NavigationService.Navigate<XrayInstallViewModel, Record>(record);
}
2021-05-15 11:45:36 +03:00
}
public partial class XrayEditorViewModel
{
2021-05-16 11:29:37 +03:00
public IMvxCommand RandomUuid => new MvxCommand(() => GetUuid());
2021-05-15 11:45:36 +03:00
2021-08-19 12:54:23 +03:00
public bool WithTLS
{
get => Settings.WithTLS;
set
{
Settings.WithTLS = value;
RaisePropertyChanged("Port");
}
}
2021-05-15 11:45:36 +03:00
public int Port
{
get => Settings.Port;
set
{
Settings.Port = value;
RaisePropertyChanged("Port");
}
}
public int VLESS_KCP_Port
{
get => Settings.VLESS_KCP_Port;
set
{
Settings.VLESS_KCP_Port = value;
RaisePropertyChanged("VLESS_KCP_Port");
}
}
public int VMESS_KCP_Port
{
get => Settings.VMESS_KCP_Port;
set
{
Settings.VMESS_KCP_Port = value;
RaisePropertyChanged("VMESS_KCP_Port");
}
}
public int ShadowSocksPort
{
get => Settings.ShadowSocksPort;
set
{
2021-07-13 05:12:15 +03:00
Settings.ShadowSocksPort = value;
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("ShadowSocksPort");
}
}
public string UUID
{
get => Settings.UUID;
set
{
Settings.UUID = value;
RaisePropertyChanged("UUID");
}
}
2021-06-30 13:36:27 +03:00
public string MultiUUID
{
get => string.Join(",", Settings.MulitUUID);
set
{
var input = value.Replace('', ',');
2022-02-28 05:07:34 +03:00
var arr = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
arr.RemoveAll(x => x == this.UUID);
2021-06-30 13:36:27 +03:00
Settings.MulitUUID = arr;
RaisePropertyChanged("MultiUUID");
}
}
2021-05-15 11:45:36 +03:00
public string Domain
{
get => Settings.Domain;
set
{
Settings.Domain = value;
RaisePropertyChanged("Domain");
}
}
public string MaskDomain
{
get => Settings.MaskDomain;
set
{
Settings.MaskDomain = value;
RaisePropertyChanged("MaskDomain");
}
}
public string TrojanPassword
{
get => Settings.TrojanPassword;
set => Settings.TrojanPassword = value;
}
2021-07-13 05:12:15 +03:00
2021-05-15 11:45:36 +03:00
public bool Checked_Trojan_TCP
{
get
{
2021-08-20 06:52:45 +03:00
return Settings.Types.Contains(RayType.Trojan_TCP);
2021-05-15 11:45:36 +03:00
}
set
{
if (value == true)
{
2021-08-20 06:52:45 +03:00
if (!Settings.Types.Contains(RayType.Trojan_TCP))
Settings.Types.Add(RayType.Trojan_TCP);
2021-05-15 11:45:36 +03:00
}
else
{
2021-08-20 06:52:45 +03:00
Settings.Types.Remove(RayType.Trojan_TCP);
2021-05-15 11:45:36 +03:00
}
RaisePropertyChanged("Checked_Trojan_TCP");
}
}
public string Trojan_TCP_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.Trojan_TCP, Settings);
2021-05-15 11:45:36 +03:00
}
private List<string> _ssMethods = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305" };
public List<string> ShadowSocksMethods => _ssMethods;
public bool CheckedShadowSocks
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.ShadowsocksAEAD);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.ShadowsocksAEAD);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("CheckedShadowSocks");
}
}
public string ShadowSocksPassword
{
2021-05-22 12:14:27 +03:00
get => Settings.ShadowSocksPassword;
set => Settings.ShadowSocksPassword = value;
2021-05-15 11:45:36 +03:00
}
public string ShadowSocksMethod
{
2021-05-22 12:14:27 +03:00
get => Settings.ShadowSocksMethod;
2021-05-15 11:45:36 +03:00
set
{
var namespaceStr = typeof(ComboBoxItem).FullName + ":";
var trimValue = value.Replace(namespaceStr, "");
trimValue = trimValue.Trim();
2021-05-22 12:14:27 +03:00
Settings.ShadowSocksMethod = trimValue;
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("ShadowSocksMethod");
}
2021-05-14 14:07:19 +03:00
}
2021-05-15 11:45:36 +03:00
public string ShadowSocksShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.ShadowsocksAEAD, Settings);
2021-05-15 11:45:36 +03:00
}
2021-08-20 06:52:45 +03:00
private void CheckBoxChanged(bool value, RayType type)
2021-05-15 11:45:36 +03:00
{
if (value == true)
{
if (!Settings.Types.Contains(type))
{
Settings.Types.Add(type);
}
}
else
{
Settings.Types.RemoveAll(x => x == type);
}
}
private void GetUuid()
{
UUID = Guid.NewGuid().ToString();
RaisePropertyChanged("UUID");
}
2021-05-14 14:07:19 +03:00
}
2021-05-15 11:45:36 +03:00
/// <summary>
/// VMESS
/// </summary>
public partial class XrayEditorViewModel
{
// vmess tcp
public bool Checked_VMESS_TCP
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VMESS_TCP);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VMESS_TCP);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VMESS_TCP");
}
}
public string VMESS_TCP_Path
{
get => Settings.VMESS_TCP_Path;
set => Settings.VMESS_TCP_Path = value;
}
public string VMESS_TCP_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VMESS_TCP, Settings);
2021-05-15 11:45:36 +03:00
}
// vmess ws
public bool Checked_VMESS_WS
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VMESS_WS);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VMESS_WS);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VMESS_WS");
}
}
public string VMESS_WS_Path
{
get => Settings.VMESS_WS_Path;
set => Settings.VMESS_WS_Path = value;
}
public string VMESS_WS_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VMESS_WS, Settings);
2021-05-15 11:45:36 +03:00
}
// vmess kcp
public string VMESS_KCP_Seed
{
get => Settings.VMESS_KCP_Seed;
set => Settings.VMESS_KCP_Seed = value;
}
public string VMESS_KCP_Type
{
get => Settings.VMESS_KCP_Type;
set
{
var namespaceStr = typeof(ComboBoxItem).FullName + ":";
var trimValue = value.Replace(namespaceStr, "");
trimValue = trimValue.Trim();
Settings.VMESS_KCP_Type = trimValue;
RaisePropertyChanged("VMESS_KCP_Type");
}
}
public bool Checked_VMESS_KCP
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VMESS_KCP);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VMESS_KCP);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VMESS_KCP");
}
}
public string VMESS_KCP_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VMESS_KCP, Settings);
2021-05-15 11:45:36 +03:00
}
private List<string> _kcpTypes = new List<string> { "none", "srtp", "utp", "wechat-video", "dtls", "wireguard", };
public List<string> KcpTypes => _kcpTypes;
}
/// <summary>
/// VLESS
/// </summary>
public partial class XrayEditorViewModel
{
// vless xtls
public bool Checked_VLESS_TCP_XTLS
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VLESS_TCP_XTLS);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VLESS_TCP_XTLS);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VLESS_TCP_XTLS");
}
}
public string VLESS_TCP_XTLS_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VLESS_TCP_XTLS, Settings);
2021-05-15 11:45:36 +03:00
}
// vless tcp
public bool Checked_VLESS_TCP
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VLESS_TCP);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VLESS_TCP);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VLESS_TCP");
}
}
public string VLESS_TCP_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VLESS_TCP, Settings);
2021-05-15 11:45:36 +03:00
}
// vless ws
public string VLESS_WS_Path
{
get => Settings.VLESS_WS_Path;
set => Settings.VLESS_WS_Path = value;
}
public bool Checked_VLESS_WS
{
get
{
2021-08-20 06:52:45 +03:00
return Settings.Types.Contains(RayType.VLESS_WS);
2021-05-15 11:45:36 +03:00
}
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VLESS_WS);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VLESS_WS");
}
}
public string VLESS_WS_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VLESS_WS, Settings);
2021-05-15 11:45:36 +03:00
}
// vless kcp
public string VLESS_KCP_Seed
{
get => Settings.VLESS_KCP_Seed;
set => Settings.VLESS_KCP_Seed = value;
}
public string VLESS_KCP_Type
{
get => Settings.VLESS_KCP_Type;
set
{
var namespaceStr = typeof(ComboBoxItem).FullName + ":";
var trimValue = value.Replace(namespaceStr, "");
trimValue = trimValue.Trim();
Settings.VLESS_KCP_Type = trimValue;
RaisePropertyChanged("VLESS_KCP_Type");
}
}
public bool Checked_VLESS_KCP
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VLESS_KCP);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VLESS_KCP);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VLESS_KCP");
}
}
public string VLESS_KCP_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VLESS_KCP, Settings);
2021-05-15 11:45:36 +03:00
}
// vless grpc
public string VLESS_gRPC_ServiceName
{
get => Settings.VLESS_gRPC_ServiceName;
set => Settings.VLESS_gRPC_ServiceName = value;
}
public int VLESS_gRPC_Port
{
get => Settings.VLESS_gRPC_Port;
set => Settings.VLESS_gRPC_Port = value;
}
public bool Checked_VLESS_gRPC
{
2021-08-20 06:52:45 +03:00
get => Settings.Types.Contains(RayType.VLESS_gRPC);
2021-05-15 11:45:36 +03:00
set
{
2021-08-20 06:52:45 +03:00
CheckBoxChanged(value, RayType.VLESS_gRPC);
2021-05-15 11:45:36 +03:00
RaisePropertyChanged("Checked_VLESS_gRPC");
}
}
public string VLESS_gRPC_ShareLink
{
2021-08-20 06:52:45 +03:00
get => ShareLink.Build(RayType.VLESS_gRPC, Settings);
2021-05-15 11:45:36 +03:00
}
}
2021-05-14 14:07:19 +03:00
}