The first letter of the guiconfig attribute must be capitalized.

pull/5891/head
2dust 2024-10-23 10:42:35 +08:00
parent 1e7284f141
commit 2d143687b8
51 changed files with 694 additions and 705 deletions

View File

@ -31,7 +31,11 @@ namespace ServiceLib.Common
{
return default;
}
return JsonSerializer.Deserialize<T>(strJson);
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
return JsonSerializer.Deserialize<T>(strJson, options);
}
catch
{

View File

@ -51,7 +51,7 @@
{
return false;
}
Thread.CurrentThread.CurrentUICulture = new(_config.uiItem.currentLanguage);
Thread.CurrentThread.CurrentUICulture = new(_config.UiItem.CurrentLanguage);
//Under Win10
if (Utils.IsWindows() && Environment.OSVersion.Version.Major < 10)
@ -85,7 +85,7 @@
public int GetLocalPort(EInboundProtocol protocol)
{
var localPort = _config.inbound.FirstOrDefault(t => t.protocol == nameof(EInboundProtocol.socks))?.localPort ?? 10808;
var localPort = _config.Inbound.FirstOrDefault(t => t.Protocol == nameof(EInboundProtocol.socks))?.LocalPort ?? 10808;
return localPort + (int)protocol;
}
@ -165,11 +165,11 @@
public async Task<List<ProfileItemModel>> ProfileItemsEx(string subid, string filter)
{
var lstModel = await ProfileItems(_config.subIndexId, filter);
var lstModel = await ProfileItems(_config.SubIndexId, filter);
await ConfigHandler.SetDefaultServer(_config, lstModel);
var lstServerStat = (_config.guiItem.enableStatistics ? StatisticsHandler.Instance.ServerStat : null) ?? [];
var lstServerStat = (_config.GuiItem.EnableStatistics ? StatisticsHandler.Instance.ServerStat : null) ?? [];
var lstProfileExs = ProfileExHandler.Instance.ProfileExs;
lstModel = (from t in lstModel
join t2 in lstServerStat on t.indexId equals t2.indexId into t2b
@ -188,7 +188,7 @@
streamSecurity = t.streamSecurity,
subid = t.subid,
subRemarks = t.subRemarks,
isActive = t.indexId == _config.indexId,
isActive = t.indexId == _config.IndexId,
sort = t33 == null ? 0 : t33.sort,
delay = t33 == null ? 0 : t33.delay,
delayVal = t33?.delay != 0 ? $"{t33?.delay} {Global.DelayUnit}" : string.Empty,
@ -268,16 +268,16 @@
return (ECoreType)profileItem.coreType;
}
if (_config.coreTypeItem == null)
if (_config.CoreTypeItem == null)
{
return ECoreType.Xray;
}
var item = _config.coreTypeItem.FirstOrDefault(it => it.configType == eConfigType);
var item = _config.CoreTypeItem.FirstOrDefault(it => it.ConfigType == eConfigType);
if (item == null)
{
return ECoreType.Xray;
}
return item.coreType;
return item.CoreType;
}
#endregion Core Type

View File

@ -72,7 +72,7 @@ namespace ServiceLib.Handler
return;
}
var urlBase = $"{GetApiUrl()}/proxies";
urlBase += @"/{0}/delay?timeout=10000&url=" + AppHandler.Instance.Config.speedTestItem.speedPingTestUrl;
urlBase += @"/{0}/delay?timeout=10000&url=" + AppHandler.Instance.Config.SpeedTestItem.SpeedPingTestUrl;
List<Task> tasks = new List<Task>();
foreach (var it in lstProxy)

View File

@ -37,133 +37,133 @@ namespace ServiceLib.Handler
config ??= new Config();
config.coreBasicItem ??= new()
config.CoreBasicItem ??= new()
{
logEnabled = false,
loglevel = "warning",
muxEnabled = false,
LogEnabled = false,
Loglevel = "warning",
MuxEnabled = false,
};
if (config.inbound == null)
if (config.Inbound == null)
{
config.inbound = new List<InItem>();
config.Inbound = new List<InItem>();
InItem inItem = new()
{
protocol = EInboundProtocol.socks.ToString(),
localPort = 10808,
udpEnabled = true,
sniffingEnabled = true,
routeOnly = false,
Protocol = EInboundProtocol.socks.ToString(),
LocalPort = 10808,
UdpEnabled = true,
SniffingEnabled = true,
RouteOnly = false,
};
config.inbound.Add(inItem);
config.Inbound.Add(inItem);
}
else
{
if (config.inbound.Count > 0)
if (config.Inbound.Count > 0)
{
config.inbound[0].protocol = EInboundProtocol.socks.ToString();
config.Inbound[0].Protocol = EInboundProtocol.socks.ToString();
}
}
config.routingBasicItem ??= new()
config.RoutingBasicItem ??= new()
{
enableRoutingAdvanced = true
EnableRoutingAdvanced = true
};
if (Utils.IsNullOrEmpty(config.routingBasicItem.domainStrategy))
if (Utils.IsNullOrEmpty(config.RoutingBasicItem.DomainStrategy))
{
config.routingBasicItem.domainStrategy = Global.DomainStrategies[0];//"IPIfNonMatch";
config.RoutingBasicItem.DomainStrategy = Global.DomainStrategies[0];//"IPIfNonMatch";
}
config.kcpItem ??= new KcpItem
config.KcpItem ??= new KcpItem
{
mtu = 1350,
tti = 50,
uplinkCapacity = 12,
downlinkCapacity = 100,
readBufferSize = 2,
writeBufferSize = 2,
congestion = false
Mtu = 1350,
Tti = 50,
UplinkCapacity = 12,
DownlinkCapacity = 100,
ReadBufferSize = 2,
WriteBufferSize = 2,
Congestion = false
};
config.grpcItem ??= new GrpcItem
config.GrpcItem ??= new GrpcItem
{
idle_timeout = 60,
health_check_timeout = 20,
permit_without_stream = false,
initial_windows_size = 0,
IdleTimeout = 60,
HealthCheckTimeout = 20,
PermitWithoutStream = false,
InitialWindowsSize = 0,
};
config.tunModeItem ??= new TunModeItem
config.TunModeItem ??= new TunModeItem
{
enableTun = false,
mtu = 9000,
EnableTun = false,
Mtu = 9000,
};
config.guiItem ??= new()
config.GuiItem ??= new()
{
enableStatistics = false,
EnableStatistics = false,
};
config.msgUIItem ??= new();
config.MsgUIItem ??= new();
config.uiItem ??= new UIItem()
config.UiItem ??= new UIItem()
{
enableAutoAdjustMainLvColWidth = true
EnableAutoAdjustMainLvColWidth = true
};
if (config.uiItem.mainColumnItem == null)
if (config.UiItem.MainColumnItem == null)
{
config.uiItem.mainColumnItem = new();
config.UiItem.MainColumnItem = new();
}
if (Utils.IsNullOrEmpty(config.uiItem.currentLanguage))
if (Utils.IsNullOrEmpty(config.UiItem.CurrentLanguage))
{
if (Thread.CurrentThread.CurrentCulture.Name.Equals("zh-cn", StringComparison.CurrentCultureIgnoreCase))
{
config.uiItem.currentLanguage = Global.Languages[0];
config.UiItem.CurrentLanguage = Global.Languages[0];
}
else
{
config.uiItem.currentLanguage = Global.Languages[2];
config.UiItem.CurrentLanguage = Global.Languages[2];
}
}
config.constItem ??= new ConstItem();
if (Utils.IsNullOrEmpty(config.constItem.defIEProxyExceptions))
config.ConstItem ??= new ConstItem();
if (Utils.IsNullOrEmpty(config.ConstItem.DefIEProxyExceptions))
{
config.constItem.defIEProxyExceptions = Global.IEProxyExceptions;
config.ConstItem.DefIEProxyExceptions = Global.IEProxyExceptions;
}
config.speedTestItem ??= new();
if (config.speedTestItem.speedTestTimeout < 10)
config.SpeedTestItem ??= new();
if (config.SpeedTestItem.SpeedTestTimeout < 10)
{
config.speedTestItem.speedTestTimeout = 10;
config.SpeedTestItem.SpeedTestTimeout = 10;
}
if (Utils.IsNullOrEmpty(config.speedTestItem.speedTestUrl))
if (Utils.IsNullOrEmpty(config.SpeedTestItem.SpeedTestUrl))
{
config.speedTestItem.speedTestUrl = Global.SpeedTestUrls[0];
config.SpeedTestItem.SpeedTestUrl = Global.SpeedTestUrls[0];
}
if (Utils.IsNullOrEmpty(config.speedTestItem.speedPingTestUrl))
if (Utils.IsNullOrEmpty(config.SpeedTestItem.SpeedPingTestUrl))
{
config.speedTestItem.speedPingTestUrl = Global.SpeedPingTestUrl;
config.SpeedTestItem.SpeedPingTestUrl = Global.SpeedPingTestUrl;
}
config.mux4RayItem ??= new()
config.Mux4RayItem ??= new()
{
concurrency = 8,
xudpConcurrency = 16,
xudpProxyUDP443 = "reject"
Concurrency = 8,
XudpConcurrency = 16,
XudpProxyUDP443 = "reject"
};
config.mux4SboxItem ??= new()
config.Mux4SboxItem ??= new()
{
protocol = Global.SingboxMuxs[0],
max_connections = 8
Protocol = Global.SingboxMuxs[0],
MaxConnections = 8
};
config.hysteriaItem ??= new()
config.HysteriaItem ??= new()
{
up_mbps = 100,
down_mbps = 100
UpMbps = 100,
DownMbps = 100
};
config.clashUIItem ??= new();
config.systemProxyItem ??= new();
config.webDavItem ??= new();
config.ClashUIItem ??= new();
config.SystemProxyItem ??= new();
config.WebDavItem ??= new();
return config;
}
@ -369,7 +369,7 @@ namespace ServiceLib.Handler
return -1;
}
config.indexId = indexId;
config.IndexId = indexId;
await ToJsonFile(config);
@ -378,11 +378,11 @@ namespace ServiceLib.Handler
public static async Task<int> SetDefaultServer(Config config, List<ProfileItemModel> lstProfile)
{
if (lstProfile.Exists(t => t.indexId == config.indexId))
if (lstProfile.Exists(t => t.indexId == config.IndexId))
{
return 0;
}
var count = await SQLiteHelper.Instance.TableAsync<ProfileItem>().CountAsync(t => t.indexId == config.indexId);
var count = await SQLiteHelper.Instance.TableAsync<ProfileItem>().CountAsync(t => t.indexId == config.IndexId);
if (count > 0)
{
return 0;
@ -398,7 +398,7 @@ namespace ServiceLib.Handler
public static async Task<ProfileItem?> GetDefaultServer(Config config)
{
var item = await AppHandler.Instance.GetProfileItem(config.indexId);
var item = await AppHandler.Instance.GetProfileItem(config.IndexId);
if (item is null)
{
var item2 = await SQLiteHelper.Instance.TableAsync<ProfileItem>().FirstOrDefaultAsync();
@ -887,7 +887,7 @@ namespace ServiceLib.Handler
List<ProfileItem> lstKeep = new();
List<ProfileItem> lstRemove = new();
if (!config.guiItem.keepOlderDedupl) lstProfile.Reverse();
if (!config.GuiItem.KeepOlderDedupl) lstProfile.Reverse();
foreach (ProfileItem item in lstProfile)
{
@ -920,11 +920,11 @@ namespace ServiceLib.Handler
{
if (Utils.IsNullOrEmpty(profileItem.allowInsecure))
{
profileItem.allowInsecure = config.coreBasicItem.defAllowInsecure.ToString().ToLower();
profileItem.allowInsecure = config.CoreBasicItem.DefAllowInsecure.ToString().ToLower();
}
if (Utils.IsNullOrEmpty(profileItem.fingerprint) && profileItem.streamSecurity == Global.StreamSecurityReality)
{
profileItem.fingerprint = config.coreBasicItem.defFingerprint;
profileItem.fingerprint = config.CoreBasicItem.DefFingerprint;
}
}
}
@ -1089,7 +1089,7 @@ namespace ServiceLib.Handler
if (isSub && Utils.IsNotEmpty(subid))
{
var existItem = lstOriSub?.FirstOrDefault(t => t.isSub == isSub
&& config.uiItem.enableUpdateSubOnlyRemarksExist ? t.remarks == profileItem.remarks : CompareProfileItem(t, profileItem, true));
&& config.UiItem.EnableUpdateSubOnlyRemarksExist ? t.remarks == profileItem.remarks : CompareProfileItem(t, profileItem, true));
if (existItem != null)
{
//Check for duplicate indexId
@ -1604,7 +1604,7 @@ namespace ServiceLib.Handler
{
if (await SQLiteHelper.Instance.TableAsync<RoutingItem>().Where(t => t.id == routingItem.id).CountAsync() > 0)
{
config.routingBasicItem.routingIndexId = routingItem.id;
config.RoutingBasicItem.RoutingIndexId = routingItem.id;
}
await ToJsonFile(config);
@ -1614,7 +1614,7 @@ namespace ServiceLib.Handler
public static async Task<RoutingItem> GetDefaultRouting(Config config)
{
var item = await AppHandler.Instance.GetRoutingItem(config.routingBasicItem.routingIndexId);
var item = await AppHandler.Instance.GetRoutingItem(config.RoutingBasicItem.RoutingIndexId);
if (item is null)
{
var item2 = await SQLiteHelper.Instance.TableAsync<RoutingItem>().FirstOrDefaultAsync(t => t.locked == false);
@ -1627,7 +1627,7 @@ namespace ServiceLib.Handler
public static async Task<int> InitRouting(Config config, bool blImportAdvancedRules = false)
{
if (string.IsNullOrEmpty(config.constItem.routeRulesTemplateSourceUrl))
if (string.IsNullOrEmpty(config.ConstItem.RouteRulesTemplateSourceUrl))
{
await InitBuiltinRouting(config, blImportAdvancedRules);
}
@ -1642,7 +1642,7 @@ namespace ServiceLib.Handler
public static async Task<int> InitExternalRouting(Config config, bool blImportAdvancedRules = false)
{
var downloadHandle = new DownloadService();
var templateContent = await downloadHandle.TryDownloadString(config.constItem.routeRulesTemplateSourceUrl, true, "");
var templateContent = await downloadHandle.TryDownloadString(config.ConstItem.RouteRulesTemplateSourceUrl, true, "");
if (string.IsNullOrEmpty(templateContent))
return await InitBuiltinRouting(config, blImportAdvancedRules); // fallback
@ -1826,9 +1826,9 @@ namespace ServiceLib.Handler
switch (type)
{
case EPresetType.Default:
config.constItem.geoSourceUrl = "";
config.constItem.srsSourceUrl = "";
config.constItem.routeRulesTemplateSourceUrl = "";
config.ConstItem.GeoSourceUrl = "";
config.ConstItem.SrsSourceUrl = "";
config.ConstItem.RouteRulesTemplateSourceUrl = "";
await SQLiteHelper.Instance.DeleteAllAsync<DNSItem>();
await InitBuiltinDNS(config);
@ -1836,9 +1836,9 @@ namespace ServiceLib.Handler
return true;
case EPresetType.Russia:
config.constItem.geoSourceUrl = Global.GeoFilesSources[1];
config.constItem.srsSourceUrl = Global.SingboxRulesetSources[1];
config.constItem.routeRulesTemplateSourceUrl = Global.RoutingRulesSources[1];
config.ConstItem.GeoSourceUrl = Global.GeoFilesSources[1];
config.ConstItem.SrsSourceUrl = Global.SingboxRulesetSources[1];
config.ConstItem.RouteRulesTemplateSourceUrl = Global.RoutingRulesSources[1];
await SaveDNSItems(config, await GetExternalDNSItem(ECoreType.Xray, Global.DNSTemplateSources[1] + "v2ray.json"));
await SaveDNSItems(config, await GetExternalDNSItem(ECoreType.sing_box, Global.DNSTemplateSources[1] + "sing_box.json"));

View File

@ -182,7 +182,7 @@ namespace ServiceLib.Handler
// coreType = LazyConfig.Instance.GetCoreType(node, node.configType);
//}
var coreType = AppHandler.Instance.GetCoreType(node, node.configType);
_config.runningCoreType = coreType;
_config.RunningCoreType = coreType;
var coreInfo = CoreInfoHandler.Instance.GetCoreInfo(coreType);
var displayLog = node.configType != EConfigType.Custom || node.displayLog;
@ -198,7 +198,7 @@ namespace ServiceLib.Handler
{
ProfileItem? itemSocks = null;
var preCoreType = ECoreType.sing_box;
if (node.configType != EConfigType.Custom && coreType != ECoreType.sing_box && _config.tunModeItem.enableTun)
if (node.configType != EConfigType.Custom && coreType != ECoreType.sing_box && _config.TunModeItem.EnableTun)
{
itemSocks = new ProfileItem()
{
@ -211,7 +211,7 @@ namespace ServiceLib.Handler
}
else if ((node.configType == EConfigType.Custom && node.preSocksPort > 0))
{
preCoreType = _config.tunModeItem.enableTun ? ECoreType.sing_box : ECoreType.Xray;
preCoreType = _config.TunModeItem.EnableTun ? ECoreType.sing_box : ECoreType.Xray;
itemSocks = new ProfileItem()
{
coreType = preCoreType,
@ -219,7 +219,7 @@ namespace ServiceLib.Handler
address = Global.Loopback,
port = node.preSocksPort.Value,
};
_config.runningCoreType = preCoreType;
_config.RunningCoreType = preCoreType;
}
if (itemSocks != null)
{

View File

@ -20,7 +20,7 @@ namespace ServiceLib.Handler
private async Task Init()
{
await InitData();
Task.Run(async () =>
await Task.Run(async () =>
{
while (true)
{

View File

@ -18,7 +18,7 @@
{
_config = config;
_updateFunc = updateFunc;
if (!config.guiItem.enableStatistics)
if (!config.GuiItem.EnableStatistics)
{
return;
}
@ -81,7 +81,7 @@
private async Task UpdateServerStat(ServerSpeedItem server)
{
await GetServerStatItem(_config.indexId);
await GetServerStatItem(_config.IndexId);
if (_serverStatItem is null)
{
@ -95,7 +95,7 @@
_serverStatItem.totalDown += server.proxyDown;
}
server.indexId = _config.indexId;
server.indexId = _config.IndexId;
server.todayUp = _serverStatItem.todayUp;
server.todayDown = _serverStatItem.todayDown;
server.totalUp = _serverStatItem.totalUp;

View File

@ -6,7 +6,7 @@ namespace ServiceLib.Handler.SysProxy
{
public static async Task<bool> UpdateSysProxy(Config config, bool forceDisable)
{
var type = config.systemProxyItem.sysProxyType;
var type = config.SystemProxyItem.SysProxyType;
if (forceDisable && type != ESysProxyType.Unchanged)
{
@ -84,19 +84,19 @@ namespace ServiceLib.Handler.SysProxy
private static void GetWindowsProxyString(Config config, int port, int portSocks, out string strProxy, out string strExceptions)
{
strExceptions = "";
if (config.systemProxyItem.notProxyLocalAddress)
if (config.SystemProxyItem.NotProxyLocalAddress)
{
strExceptions = $"<local>;{config.constItem.defIEProxyExceptions};{config.systemProxyItem.systemProxyExceptions}";
strExceptions = $"<local>;{config.ConstItem.DefIEProxyExceptions};{config.SystemProxyItem.SystemProxyExceptions}";
}
strProxy = string.Empty;
if (Utils.IsNullOrEmpty(config.systemProxyItem.systemProxyAdvancedProtocol))
if (Utils.IsNullOrEmpty(config.SystemProxyItem.SystemProxyAdvancedProtocol))
{
strProxy = $"{Global.Loopback}:{port}";
}
else
{
strProxy = config.systemProxyItem.systemProxyAdvancedProtocol
strProxy = config.SystemProxyItem.SystemProxyAdvancedProtocol
.Replace("{ip}", Global.Loopback)
.Replace("{http_port}", port.ToString())
.Replace("{socks_port}", portSocks.ToString());

View File

@ -55,9 +55,9 @@
await Task.Delay(1000 * 3600);
var dtNow = DateTime.Now;
if (config.guiItem.autoUpdateInterval > 0)
if (config.GuiItem.AutoUpdateInterval > 0)
{
if ((dtNow - autoUpdateGeoTime).Hours % config.guiItem.autoUpdateInterval == 0)
if ((dtNow - autoUpdateGeoTime).Hours % config.GuiItem.AutoUpdateInterval == 0)
{
await updateHandle.UpdateGeoFileAll(config, (bool success, string msg) =>
{

View File

@ -24,9 +24,9 @@ namespace ServiceLib.Handler
{
try
{
if (_config.webDavItem.url.IsNullOrEmpty()
|| _config.webDavItem.userName.IsNullOrEmpty()
|| _config.webDavItem.password.IsNullOrEmpty())
if (_config.WebDavItem.Url.IsNullOrEmpty()
|| _config.WebDavItem.UserName.IsNullOrEmpty()
|| _config.WebDavItem.Password.IsNullOrEmpty())
{
throw new ArgumentException("webdav parameter error or null");
}
@ -35,19 +35,19 @@ namespace ServiceLib.Handler
_client?.Dispose();
_client = null;
}
if (_config.webDavItem.dirName.IsNullOrEmpty())
if (_config.WebDavItem.DirName.IsNullOrEmpty())
{
_webDir = Global.AppName + "_backup";
}
else
{
_webDir = _config.webDavItem.dirName.TrimEx();
_webDir = _config.WebDavItem.DirName.TrimEx();
}
var clientParams = new WebDavClientParams
{
BaseAddress = new Uri(_config.webDavItem.url),
Credentials = new NetworkCredential(_config.webDavItem.userName, _config.webDavItem.password)
BaseAddress = new Uri(_config.WebDavItem.Url),
Credentials = new NetworkCredential(_config.WebDavItem.UserName, _config.WebDavItem.Password)
};
_client = new WebDavClient(clientParams);
}

View File

@ -8,18 +8,18 @@
{
#region property
public string indexId { get; set; }
public string subIndexId { get; set; }
public string IndexId { get; set; }
public string SubIndexId { get; set; }
public ECoreType runningCoreType { get; set; }
public ECoreType RunningCoreType { get; set; }
public bool IsRunningCore(ECoreType type)
{
if (type == ECoreType.Xray && runningCoreType is ECoreType.Xray or ECoreType.v2fly or ECoreType.v2fly_v5)
if (type == ECoreType.Xray && RunningCoreType is ECoreType.Xray or ECoreType.v2fly or ECoreType.v2fly_v5)
{
return true;
}
if (type == ECoreType.sing_box && runningCoreType is ECoreType.sing_box or ECoreType.mihomo)
if (type == ECoreType.sing_box && RunningCoreType is ECoreType.sing_box or ECoreType.mihomo)
{
return true;
}
@ -30,25 +30,25 @@
#region other entities
public CoreBasicItem coreBasicItem { get; set; }
public TunModeItem tunModeItem { get; set; }
public KcpItem kcpItem { get; set; }
public GrpcItem grpcItem { get; set; }
public RoutingBasicItem routingBasicItem { get; set; }
public GUIItem guiItem { get; set; }
public MsgUIItem msgUIItem { get; set; }
public UIItem uiItem { get; set; }
public ConstItem constItem { get; set; }
public SpeedTestItem speedTestItem { get; set; }
public Mux4RayItem mux4RayItem { get; set; }
public Mux4SboxItem mux4SboxItem { get; set; }
public HysteriaItem hysteriaItem { get; set; }
public ClashUIItem clashUIItem { get; set; }
public SystemProxyItem systemProxyItem { get; set; }
public WebDavItem webDavItem { get; set; }
public List<InItem> inbound { get; set; }
public List<KeyEventItem> globalHotkeys { get; set; }
public List<CoreTypeItem> coreTypeItem { get; set; }
public CoreBasicItem CoreBasicItem { get; set; }
public TunModeItem TunModeItem { get; set; }
public KcpItem KcpItem { get; set; }
public GrpcItem GrpcItem { get; set; }
public RoutingBasicItem RoutingBasicItem { get; set; }
public GUIItem GuiItem { get; set; }
public MsgUIItem MsgUIItem { get; set; }
public UIItem UiItem { get; set; }
public ConstItem ConstItem { get; set; }
public SpeedTestItem SpeedTestItem { get; set; }
public Mux4RayItem Mux4RayItem { get; set; }
public Mux4SboxItem Mux4SboxItem { get; set; }
public HysteriaItem HysteriaItem { get; set; }
public ClashUIItem ClashUIItem { get; set; }
public SystemProxyItem SystemProxyItem { get; set; }
public WebDavItem WebDavItem { get; set; }
public List<InItem> Inbound { get; set; }
public List<KeyEventItem> GlobalHotkeys { get; set; }
public List<CoreTypeItem> CoreTypeItem { get; set; }
#endregion other entities
}

View File

@ -3,152 +3,137 @@
[Serializable]
public class CoreBasicItem
{
/// <summary>
/// 允许日志
/// </summary>
public bool logEnabled { get; set; }
public bool LogEnabled { get; set; }
/// <summary>
/// 日志等级
/// </summary>
public string loglevel { get; set; }
public string Loglevel { get; set; }
/// <summary>
/// 允许Mux多路复用
/// </summary>
public bool muxEnabled { get; set; }
public bool MuxEnabled { get; set; }
/// <summary>
/// 是否允许不安全连接
/// </summary>
public bool defAllowInsecure { get; set; }
public bool DefAllowInsecure { get; set; }
public string defFingerprint { get; set; }
public string DefFingerprint { get; set; }
/// <summary>
/// 默认用户代理
/// </summary>
public string defUserAgent { get; set; }
public string DefUserAgent { get; set; }
public bool enableFragment { get; set; }
public bool EnableFragment { get; set; }
public bool enableCacheFile4Sbox { get; set; } = true;
public bool EnableCacheFile4Sbox { get; set; } = true;
}
[Serializable]
public class InItem
{
public int localPort { get; set; }
public int LocalPort { get; set; }
public string protocol { get; set; }
public string Protocol { get; set; }
public bool udpEnabled { get; set; }
public bool UdpEnabled { get; set; }
public bool sniffingEnabled { get; set; } = true;
public List<string>? destOverride { get; set; } = ["http", "tls"];
public bool routeOnly { get; set; }
public bool allowLANConn { get; set; }
public bool SniffingEnabled { get; set; } = true;
public List<string>? DestOverride { get; set; } = ["http", "tls"];
public bool RouteOnly { get; set; }
public bool AllowLANConn { get; set; }
public bool newPort4LAN { get; set; }
public bool NewPort4LAN { get; set; }
public string user { get; set; }
public string User { get; set; }
public string pass { get; set; }
public string Pass { get; set; }
}
[Serializable]
public class KcpItem
{
public int mtu { get; set; }
public int Mtu { get; set; }
public int tti { get; set; }
public int Tti { get; set; }
public int uplinkCapacity { get; set; }
public int UplinkCapacity { get; set; }
public int downlinkCapacity { get; set; }
public int DownlinkCapacity { get; set; }
public bool congestion { get; set; }
public bool Congestion { get; set; }
public int readBufferSize { get; set; }
public int ReadBufferSize { get; set; }
public int writeBufferSize { get; set; }
public int WriteBufferSize { get; set; }
}
[Serializable]
public class GrpcItem
{
public int idle_timeout { get; set; }
public int health_check_timeout { get; set; }
public bool permit_without_stream { get; set; }
public int initial_windows_size { get; set; }
public int IdleTimeout { get; set; }
public int HealthCheckTimeout { get; set; }
public bool PermitWithoutStream { get; set; }
public int InitialWindowsSize { get; set; }
}
[Serializable]
public class GUIItem
{
public bool autoRun { get; set; }
public bool AutoRun { get; set; }
public bool enableStatistics { get; set; }
public bool EnableStatistics { get; set; }
public bool keepOlderDedupl { get; set; }
public bool KeepOlderDedupl { get; set; }
public bool ignoreGeoUpdateCore { get; set; } = true;
public bool IgnoreGeoUpdateCore { get; set; } = true;
public int autoUpdateInterval { get; set; }
public int AutoUpdateInterval { get; set; }
public bool checkPreReleaseUpdate { get; set; } = false;
public bool CheckPreReleaseUpdate { get; set; } = false;
public bool enableSecurityProtocolTls13 { get; set; }
public bool EnableSecurityProtocolTls13 { get; set; }
public int trayMenuServersLimit { get; set; } = 20;
public int TrayMenuServersLimit { get; set; } = 20;
public bool enableHWA { get; set; } = false;
public bool EnableHWA { get; set; } = false;
}
[Serializable]
public class MsgUIItem
{
public string? mainMsgFilter { get; set; }
public bool? autoRefresh { get; set; }
public string? MainMsgFilter { get; set; }
public bool? AutoRefresh { get; set; }
}
[Serializable]
public class UIItem
{
public bool enableAutoAdjustMainLvColWidth { get; set; }
public bool enableUpdateSubOnlyRemarksExist { get; set; }
public double mainWidth { get; set; }
public double mainHeight { get; set; }
public double mainGirdHeight1 { get; set; }
public double mainGirdHeight2 { get; set; }
public EGirdOrientation mainGirdOrientation { get; set; } = EGirdOrientation.Vertical;
public bool colorModeDark { get; set; }
public bool followSystemTheme { get; set; }
public string? colorPrimaryName { get; set; }
public string currentLanguage { get; set; }
public string currentFontFamily { get; set; }
public int currentFontSize { get; set; }
public bool enableDragDropSort { get; set; }
public bool doubleClick2Activate { get; set; }
public bool autoHideStartup { get; set; }
public List<ColumnItem> mainColumnItem { get; set; }
public bool showInTaskbar { get; set; }
public bool EnableAutoAdjustMainLvColWidth { get; set; }
public bool EnableUpdateSubOnlyRemarksExist { get; set; }
public double MainWidth { get; set; }
public double MainHeight { get; set; }
public double MainGirdHeight1 { get; set; }
public double MainGirdHeight2 { get; set; }
public EGirdOrientation MainGirdOrientation { get; set; } = EGirdOrientation.Vertical;
public bool ColorModeDark { get; set; }
public bool FollowSystemTheme { get; set; }
public string? ColorPrimaryName { get; set; }
public string CurrentLanguage { get; set; }
public string CurrentFontFamily { get; set; }
public int CurrentFontSize { get; set; }
public bool EnableDragDropSort { get; set; }
public bool DoubleClick2Activate { get; set; }
public bool AutoHideStartup { get; set; }
public List<ColumnItem> MainColumnItem { get; set; }
public bool ShowInTaskbar { get; set; }
}
[Serializable]
public class ConstItem
{
public string defIEProxyExceptions { get; set; }
public string subConvertUrl { get; set; } = string.Empty;
public string? geoSourceUrl { get; set; }
public string? srsSourceUrl { get; set; }
public string? routeRulesTemplateSourceUrl { get; set; }
public string DefIEProxyExceptions { get; set; }
public string SubConvertUrl { get; set; } = string.Empty;
public string? GeoSourceUrl { get; set; }
public string? SrsSourceUrl { get; set; }
public string? RouteRulesTemplateSourceUrl { get; set; }
}
[Serializable]
public class KeyEventItem
{
public EGlobalHotkey eGlobalHotkey { get; set; }
public EGlobalHotkey EGlobalHotkey { get; set; }
public bool Alt { get; set; }
@ -162,38 +147,38 @@
[Serializable]
public class CoreTypeItem
{
public EConfigType configType { get; set; }
public EConfigType ConfigType { get; set; }
public ECoreType coreType { get; set; }
public ECoreType CoreType { get; set; }
}
[Serializable]
public class TunModeItem
{
public bool enableTun { get; set; }
public bool strictRoute { get; set; } = true;
public string stack { get; set; }
public int mtu { get; set; }
public bool enableExInbound { get; set; }
public bool enableIPv6Address { get; set; }
public bool EnableTun { get; set; }
public bool StrictRoute { get; set; } = true;
public string Stack { get; set; }
public int Mtu { get; set; }
public bool EnableExInbound { get; set; }
public bool EnableIPv6Address { get; set; }
}
[Serializable]
public class SpeedTestItem
{
public int speedTestTimeout { get; set; }
public string speedTestUrl { get; set; }
public string speedPingTestUrl { get; set; }
public int SpeedTestTimeout { get; set; }
public string SpeedTestUrl { get; set; }
public string SpeedPingTestUrl { get; set; }
}
[Serializable]
public class RoutingBasicItem
{
public string domainStrategy { get; set; }
public string domainStrategy4Singbox { get; set; }
public string domainMatcher { get; set; }
public string routingIndexId { get; set; }
public bool enableRoutingAdvanced { get; set; }
public string DomainStrategy { get; set; }
public string DomainStrategy4Singbox { get; set; }
public string DomainMatcher { get; set; }
public string RoutingIndexId { get; set; }
public bool EnableRoutingAdvanced { get; set; }
}
[Serializable]
@ -207,55 +192,55 @@
[Serializable]
public class Mux4RayItem
{
public int? concurrency { get; set; }
public int? xudpConcurrency { get; set; }
public string? xudpProxyUDP443 { get; set; }
public int? Concurrency { get; set; }
public int? XudpConcurrency { get; set; }
public string? XudpProxyUDP443 { get; set; }
}
[Serializable]
public class Mux4SboxItem
{
public string protocol { get; set; }
public int max_connections { get; set; }
public bool? padding { get; set; }
public string Protocol { get; set; }
public int MaxConnections { get; set; }
public bool? Padding { get; set; }
}
[Serializable]
public class HysteriaItem
{
public int up_mbps { get; set; }
public int down_mbps { get; set; }
public int UpMbps { get; set; }
public int DownMbps { get; set; }
}
[Serializable]
public class ClashUIItem
{
public ERuleMode ruleMode { get; set; }
public bool enableIPv6 { get; set; }
public bool enableMixinContent { get; set; }
public int proxiesSorting { get; set; }
public bool proxiesAutoRefresh { get; set; }
public int proxiesAutoDelayTestInterval { get; set; } = 10;
public int connectionsSorting { get; set; }
public bool connectionsAutoRefresh { get; set; }
public int connectionsRefreshInterval { get; set; } = 2;
public ERuleMode RuleMode { get; set; }
public bool EnableIPv6 { get; set; }
public bool EnableMixinContent { get; set; }
public int ProxiesSorting { get; set; }
public bool ProxiesAutoRefresh { get; set; }
public int ProxiesAutoDelayTestInterval { get; set; } = 10;
public int ConnectionsSorting { get; set; }
public bool ConnectionsAutoRefresh { get; set; }
public int ConnectionsRefreshInterval { get; set; } = 2;
}
[Serializable]
public class SystemProxyItem
{
public ESysProxyType sysProxyType { get; set; }
public string systemProxyExceptions { get; set; }
public bool notProxyLocalAddress { get; set; } = true;
public string systemProxyAdvancedProtocol { get; set; }
public ESysProxyType SysProxyType { get; set; }
public string SystemProxyExceptions { get; set; }
public bool NotProxyLocalAddress { get; set; } = true;
public string SystemProxyAdvancedProtocol { get; set; }
}
[Serializable]
public class WebDavItem
{
public string? url { get; set; }
public string? userName { get; set; }
public string? password { get; set; }
public string? dirName { get; set; }
public string? Url { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
public string? DirName { get; set; }
}
}

View File

@ -83,12 +83,12 @@
//socks-port
fileContent["socks-port"] = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks);
//log-level
fileContent["log-level"] = GetLogLevel(_config.coreBasicItem.loglevel);
fileContent["log-level"] = GetLogLevel(_config.CoreBasicItem.Loglevel);
//external-controller
fileContent["external-controller"] = $"{Global.Loopback}:{AppHandler.Instance.StatePort2}";
//allow-lan
if (_config.inbound[0].allowLANConn)
if (_config.Inbound[0].AllowLANConn)
{
fileContent["allow-lan"] = "true";
fileContent["bind-address"] = "*";
@ -99,7 +99,7 @@
}
//ipv6
fileContent["ipv6"] = _config.clashUIItem.enableIPv6;
fileContent["ipv6"] = _config.ClashUIItem.EnableIPv6;
//mode
if (!fileContent.ContainsKey("mode"))
@ -108,14 +108,14 @@
}
else
{
if (_config.clashUIItem.ruleMode != ERuleMode.Unchanged)
if (_config.ClashUIItem.RuleMode != ERuleMode.Unchanged)
{
fileContent["mode"] = _config.clashUIItem.ruleMode.ToString().ToLower();
fileContent["mode"] = _config.ClashUIItem.RuleMode.ToString().ToLower();
}
}
//enable tun mode
if (_config.tunModeItem.enableTun)
if (_config.TunModeItem.EnableTun)
{
string tun = Utils.GetEmbedText(Global.ClashTunYaml);
if (Utils.IsNotEmpty(tun))
@ -181,7 +181,7 @@
}
foreach (var item in mixinContent)
{
if (!_config.tunModeItem.enableTun && item.Key == "tun")
if (!_config.TunModeItem.EnableTun && item.Key == "tun")
{
continue;
}

View File

@ -444,12 +444,12 @@ namespace ServiceLib.Services.CoreConfig
{
try
{
switch (_config.coreBasicItem.loglevel)
switch (_config.CoreBasicItem.Loglevel)
{
case "debug":
case "info":
case "error":
singboxConfig.log.level = _config.coreBasicItem.loglevel;
singboxConfig.log.level = _config.CoreBasicItem.Loglevel;
break;
case "warning":
@ -459,11 +459,11 @@ namespace ServiceLib.Services.CoreConfig
default:
break;
}
if (_config.coreBasicItem.loglevel == Global.None)
if (_config.CoreBasicItem.Loglevel == Global.None)
{
singboxConfig.log.disabled = true;
}
if (_config.coreBasicItem.logEnabled)
if (_config.CoreBasicItem.LogEnabled)
{
var dtNow = DateTime.Now;
singboxConfig.log.output = Utils.GetLogPath($"sbox_{dtNow:yyyy-MM-dd}.txt");
@ -483,8 +483,8 @@ namespace ServiceLib.Services.CoreConfig
var listen = "::";
singboxConfig.inbounds = [];
if (!_config.tunModeItem.enableTun
|| _config.tunModeItem.enableTun && _config.tunModeItem.enableExInbound && _config.runningCoreType == ECoreType.sing_box)
if (!_config.TunModeItem.EnableTun
|| _config.TunModeItem.EnableTun && _config.TunModeItem.EnableExInbound && _config.RunningCoreType == ECoreType.sing_box)
{
var inbound = new Inbound4Sbox()
{
@ -495,11 +495,11 @@ namespace ServiceLib.Services.CoreConfig
singboxConfig.inbounds.Add(inbound);
inbound.listen_port = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks);
inbound.sniff = _config.inbound[0].sniffingEnabled;
inbound.sniff_override_destination = _config.inbound[0].routeOnly ? false : _config.inbound[0].sniffingEnabled;
inbound.domain_strategy = Utils.IsNullOrEmpty(_config.routingBasicItem.domainStrategy4Singbox) ? null : _config.routingBasicItem.domainStrategy4Singbox;
inbound.sniff = _config.Inbound[0].SniffingEnabled;
inbound.sniff_override_destination = _config.Inbound[0].RouteOnly ? false : _config.Inbound[0].SniffingEnabled;
inbound.domain_strategy = Utils.IsNullOrEmpty(_config.RoutingBasicItem.DomainStrategy4Singbox) ? null : _config.RoutingBasicItem.DomainStrategy4Singbox;
if (_config.routingBasicItem.enableRoutingAdvanced)
if (_config.RoutingBasicItem.EnableRoutingAdvanced)
{
var routing = await ConfigHandler.GetDefaultRouting(_config);
if (Utils.IsNotEmpty(routing.domainStrategy4Singbox))
@ -512,9 +512,9 @@ namespace ServiceLib.Services.CoreConfig
var inbound2 = GetInbound(inbound, EInboundProtocol.http, false);
singboxConfig.inbounds.Add(inbound2);
if (_config.inbound[0].allowLANConn)
if (_config.Inbound[0].AllowLANConn)
{
if (_config.inbound[0].newPort4LAN)
if (_config.Inbound[0].NewPort4LAN)
{
var inbound3 = GetInbound(inbound, EInboundProtocol.socks2, true);
inbound3.listen = listen;
@ -525,10 +525,10 @@ namespace ServiceLib.Services.CoreConfig
singboxConfig.inbounds.Add(inbound4);
//auth
if (Utils.IsNotEmpty(_config.inbound[0].user) && Utils.IsNotEmpty(_config.inbound[0].pass))
if (Utils.IsNotEmpty(_config.Inbound[0].User) && Utils.IsNotEmpty(_config.Inbound[0].Pass))
{
inbound3.users = new() { new() { username = _config.inbound[0].user, password = _config.inbound[0].pass } };
inbound4.users = new() { new() { username = _config.inbound[0].user, password = _config.inbound[0].pass } };
inbound3.users = new() { new() { username = _config.Inbound[0].User, password = _config.Inbound[0].Pass } };
inbound4.users = new() { new() { username = _config.Inbound[0].User, password = _config.Inbound[0].Pass } };
}
}
else
@ -539,24 +539,24 @@ namespace ServiceLib.Services.CoreConfig
}
}
if (_config.tunModeItem.enableTun)
if (_config.TunModeItem.EnableTun)
{
if (_config.tunModeItem.mtu <= 0)
if (_config.TunModeItem.Mtu <= 0)
{
_config.tunModeItem.mtu = Utils.ToInt(Global.TunMtus[0]);
_config.TunModeItem.Mtu = Utils.ToInt(Global.TunMtus[0]);
}
if (Utils.IsNullOrEmpty(_config.tunModeItem.stack))
if (Utils.IsNullOrEmpty(_config.TunModeItem.Stack))
{
_config.tunModeItem.stack = Global.TunStacks[0];
_config.TunModeItem.Stack = Global.TunStacks[0];
}
var tunInbound = JsonUtils.Deserialize<Inbound4Sbox>(Utils.GetEmbedText(Global.TunSingboxInboundFileName)) ?? new Inbound4Sbox { };
tunInbound.mtu = _config.tunModeItem.mtu;
tunInbound.strict_route = _config.tunModeItem.strictRoute;
tunInbound.stack = _config.tunModeItem.stack;
tunInbound.sniff = _config.inbound[0].sniffingEnabled;
tunInbound.mtu = _config.TunModeItem.Mtu;
tunInbound.strict_route = _config.TunModeItem.StrictRoute;
tunInbound.stack = _config.TunModeItem.Stack;
tunInbound.sniff = _config.Inbound[0].SniffingEnabled;
//tunInbound.sniff_override_destination = _config.inbound[0].routeOnly ? false : _config.inbound[0].sniffingEnabled;
if (_config.tunModeItem.enableIPv6Address == false)
if (_config.TunModeItem.EnableIPv6Address == false)
{
tunInbound.inet6_address = null;
}
@ -671,8 +671,8 @@ namespace ServiceLib.Services.CoreConfig
};
}
outbound.up_mbps = _config.hysteriaItem.up_mbps > 0 ? _config.hysteriaItem.up_mbps : null;
outbound.down_mbps = _config.hysteriaItem.down_mbps > 0 ? _config.hysteriaItem.down_mbps : null;
outbound.up_mbps = _config.HysteriaItem.UpMbps > 0 ? _config.HysteriaItem.UpMbps : null;
outbound.down_mbps = _config.HysteriaItem.DownMbps > 0 ? _config.HysteriaItem.DownMbps : null;
break;
}
case EConfigType.TUIC:
@ -708,14 +708,14 @@ namespace ServiceLib.Services.CoreConfig
{
try
{
if (_config.coreBasicItem.muxEnabled && Utils.IsNotEmpty(_config.mux4SboxItem.protocol))
if (_config.CoreBasicItem.MuxEnabled && Utils.IsNotEmpty(_config.Mux4SboxItem.Protocol))
{
var mux = new Multiplex4Sbox()
{
enabled = true,
protocol = _config.mux4SboxItem.protocol,
max_connections = _config.mux4SboxItem.max_connections,
padding = _config.mux4SboxItem.padding,
protocol = _config.Mux4SboxItem.Protocol,
max_connections = _config.Mux4SboxItem.MaxConnections,
padding = _config.Mux4SboxItem.Padding,
};
outbound.multiplex = mux;
}
@ -746,7 +746,7 @@ namespace ServiceLib.Services.CoreConfig
{
enabled = true,
server_name = server_name,
insecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.coreBasicItem.defAllowInsecure.ToString().ToLower() : node.allowInsecure),
insecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.CoreBasicItem.DefAllowInsecure.ToString().ToLower() : node.allowInsecure),
alpn = node.GetAlpn(),
};
if (Utils.IsNotEmpty(node.fingerprint))
@ -754,7 +754,7 @@ namespace ServiceLib.Services.CoreConfig
tls.utls = new Utls4Sbox()
{
enabled = true,
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.CoreBasicItem.DefFingerprint : node.fingerprint
};
}
if (node.streamSecurity == Global.StreamSecurityReality)
@ -834,9 +834,9 @@ namespace ServiceLib.Services.CoreConfig
case nameof(ETransport.grpc):
transport.type = nameof(ETransport.grpc);
transport.service_name = node.path;
transport.idle_timeout = _config.grpcItem.idle_timeout.ToString("##s");
transport.ping_timeout = _config.grpcItem.health_check_timeout.ToString("##s");
transport.permit_without_stream = _config.grpcItem.permit_without_stream;
transport.idle_timeout = _config.GrpcItem.IdleTimeout.ToString("##s");
transport.ping_timeout = _config.GrpcItem.HealthCheckTimeout.ToString("##s");
transport.permit_without_stream = _config.GrpcItem.PermitWithoutStream;
break;
default:
@ -912,7 +912,7 @@ namespace ServiceLib.Services.CoreConfig
try
{
var dnsOutbound = "dns_out";
if (!_config.inbound[0].sniffingEnabled)
if (!_config.Inbound[0].SniffingEnabled)
{
singboxConfig.route.rules.Add(new()
{
@ -933,7 +933,7 @@ namespace ServiceLib.Services.CoreConfig
clash_mode = ERuleMode.Global.ToString()
});
if (_config.tunModeItem.enableTun)
if (_config.TunModeItem.EnableTun)
{
singboxConfig.route.auto_detect_interface = true;
@ -958,7 +958,7 @@ namespace ServiceLib.Services.CoreConfig
});
}
if (_config.routingBasicItem.enableRoutingAdvanced)
if (_config.RoutingBasicItem.EnableRoutingAdvanced)
{
var routing = await ConfigHandler.GetDefaultRouting(_config);
if (routing != null)
@ -1089,7 +1089,7 @@ namespace ServiceLib.Services.CoreConfig
}
}
if (_config.tunModeItem.enableTun && item.process?.Count > 0)
if (_config.TunModeItem.EnableTun && item.process?.Count > 0)
{
rule3.process_name = item.process;
rules.Add(rule3);
@ -1183,7 +1183,7 @@ namespace ServiceLib.Services.CoreConfig
{
var item = await AppHandler.Instance.GetDNSItem(ECoreType.sing_box);
var strDNS = string.Empty;
if (_config.tunModeItem.enableTun)
if (_config.TunModeItem.EnableTun)
{
strDNS = Utils.IsNullOrEmpty(item?.tunDNS) ? Utils.GetEmbedText(Global.TunSingboxDNSFileName) : item?.tunDNS;
}
@ -1248,7 +1248,7 @@ namespace ServiceLib.Services.CoreConfig
}
//Tun2SocksAddress
if (_config.tunModeItem.enableTun && node?.configType == EConfigType.SOCKS && Utils.IsDomain(node?.sni))
if (_config.TunModeItem.EnableTun && node?.configType == EConfigType.SOCKS && Utils.IsDomain(node?.sni))
{
dns4Sbox.rules.Insert(0, new()
{
@ -1272,7 +1272,7 @@ namespace ServiceLib.Services.CoreConfig
};
}
if (_config.coreBasicItem.enableCacheFile4Sbox)
if (_config.CoreBasicItem.EnableCacheFile4Sbox)
{
singboxConfig.experimental ??= new Experimental4Sbox();
singboxConfig.experimental.cache_file = new CacheFile4Sbox()
@ -1334,7 +1334,7 @@ namespace ServiceLib.Services.CoreConfig
//load custom ruleset file
List<Ruleset4Sbox> customRulesets = [];
if (_config.routingBasicItem.enableRoutingAdvanced)
if (_config.RoutingBasicItem.EnableRoutingAdvanced)
{
var routing = await ConfigHandler.GetDefaultRouting(_config);
if (Utils.IsNotEmpty(routing.customRulesetPath4Singbox))
@ -1375,9 +1375,9 @@ namespace ServiceLib.Services.CoreConfig
}
else
{
var srsUrl = string.IsNullOrEmpty(_config.constItem.srsSourceUrl)
var srsUrl = string.IsNullOrEmpty(_config.ConstItem.SrsSourceUrl)
? Global.SingboxRulesetUrl
: _config.constItem.srsSourceUrl;
: _config.ConstItem.SrsSourceUrl;
customRuleset = new()
{

View File

@ -356,16 +356,16 @@ namespace ServiceLib.Services.CoreConfig
{
try
{
if (_config.coreBasicItem.logEnabled)
if (_config.CoreBasicItem.LogEnabled)
{
var dtNow = DateTime.Now;
v2rayConfig.log.loglevel = _config.coreBasicItem.loglevel;
v2rayConfig.log.loglevel = _config.CoreBasicItem.Loglevel;
v2rayConfig.log.access = Utils.GetLogPath($"Vaccess_{dtNow:yyyy-MM-dd}.txt");
v2rayConfig.log.error = Utils.GetLogPath($"Verror_{dtNow:yyyy-MM-dd}.txt");
}
else
{
v2rayConfig.log.loglevel = _config.coreBasicItem.loglevel;
v2rayConfig.log.loglevel = _config.CoreBasicItem.Loglevel;
v2rayConfig.log.access = "";
v2rayConfig.log.error = "";
}
@ -384,33 +384,33 @@ namespace ServiceLib.Services.CoreConfig
var listen = "0.0.0.0";
v2rayConfig.inbounds = [];
Inbounds4Ray? inbound = GetInbound(_config.inbound[0], EInboundProtocol.socks, true);
Inbounds4Ray? inbound = GetInbound(_config.Inbound[0], EInboundProtocol.socks, true);
v2rayConfig.inbounds.Add(inbound);
//http
Inbounds4Ray? inbound2 = GetInbound(_config.inbound[0], EInboundProtocol.http, false);
Inbounds4Ray? inbound2 = GetInbound(_config.Inbound[0], EInboundProtocol.http, false);
v2rayConfig.inbounds.Add(inbound2);
if (_config.inbound[0].allowLANConn)
if (_config.Inbound[0].AllowLANConn)
{
if (_config.inbound[0].newPort4LAN)
if (_config.Inbound[0].NewPort4LAN)
{
var inbound3 = GetInbound(_config.inbound[0], EInboundProtocol.socks2, true);
var inbound3 = GetInbound(_config.Inbound[0], EInboundProtocol.socks2, true);
inbound3.listen = listen;
v2rayConfig.inbounds.Add(inbound3);
var inbound4 = GetInbound(_config.inbound[0], EInboundProtocol.http2, false);
var inbound4 = GetInbound(_config.Inbound[0], EInboundProtocol.http2, false);
inbound4.listen = listen;
v2rayConfig.inbounds.Add(inbound4);
//auth
if (Utils.IsNotEmpty(_config.inbound[0].user) && Utils.IsNotEmpty(_config.inbound[0].pass))
if (Utils.IsNotEmpty(_config.Inbound[0].User) && Utils.IsNotEmpty(_config.Inbound[0].Pass))
{
inbound3.settings.auth = "password";
inbound3.settings.accounts = new List<AccountsItem4Ray> { new AccountsItem4Ray() { user = _config.inbound[0].user, pass = _config.inbound[0].pass } };
inbound3.settings.accounts = new List<AccountsItem4Ray> { new AccountsItem4Ray() { user = _config.Inbound[0].User, pass = _config.Inbound[0].Pass } };
inbound4.settings.auth = "password";
inbound4.settings.accounts = new List<AccountsItem4Ray> { new AccountsItem4Ray() { user = _config.inbound[0].user, pass = _config.inbound[0].pass } };
inbound4.settings.accounts = new List<AccountsItem4Ray> { new AccountsItem4Ray() { user = _config.Inbound[0].User, pass = _config.Inbound[0].Pass } };
}
}
else
@ -441,12 +441,12 @@ namespace ServiceLib.Services.CoreConfig
return new();
}
inbound.tag = protocol.ToString();
inbound.port = inItem.localPort + (int)protocol;
inbound.port = inItem.LocalPort + (int)protocol;
inbound.protocol = bSocks ? EInboundProtocol.socks.ToString() : EInboundProtocol.http.ToString();
inbound.settings.udp = inItem.udpEnabled;
inbound.sniffing.enabled = inItem.sniffingEnabled;
inbound.sniffing.destOverride = inItem.destOverride;
inbound.sniffing.routeOnly = inItem.routeOnly;
inbound.settings.udp = inItem.UdpEnabled;
inbound.sniffing.enabled = inItem.SniffingEnabled;
inbound.sniffing.destOverride = inItem.DestOverride;
inbound.sniffing.routeOnly = inItem.RouteOnly;
return inbound;
}
@ -457,10 +457,10 @@ namespace ServiceLib.Services.CoreConfig
{
if (v2rayConfig.routing?.rules != null)
{
v2rayConfig.routing.domainStrategy = _config.routingBasicItem.domainStrategy;
v2rayConfig.routing.domainMatcher = Utils.IsNullOrEmpty(_config.routingBasicItem.domainMatcher) ? null : _config.routingBasicItem.domainMatcher;
v2rayConfig.routing.domainStrategy = _config.RoutingBasicItem.DomainStrategy;
v2rayConfig.routing.domainMatcher = Utils.IsNullOrEmpty(_config.RoutingBasicItem.DomainMatcher) ? null : _config.RoutingBasicItem.DomainMatcher;
if (_config.routingBasicItem.enableRoutingAdvanced)
if (_config.RoutingBasicItem.EnableRoutingAdvanced)
{
var routing = await ConfigHandler.GetDefaultRouting(_config);
if (routing != null)
@ -624,7 +624,7 @@ namespace ServiceLib.Services.CoreConfig
usersItem.security = Global.DefaultSecurity;
}
await GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled);
await GenOutboundMux(node, outbound, _config.CoreBasicItem.MuxEnabled);
outbound.settings.servers = null;
break;
@ -719,7 +719,7 @@ namespace ServiceLib.Services.CoreConfig
usersItem.email = Global.UserEMail;
usersItem.encryption = node.security;
await GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled);
await GenOutboundMux(node, outbound, _config.CoreBasicItem.MuxEnabled);
if (node.streamSecurity == Global.StreamSecurityReality
|| node.streamSecurity == Global.StreamSecurity)
@ -733,7 +733,7 @@ namespace ServiceLib.Services.CoreConfig
}
if (node.streamSecurity == Global.StreamSecurityReality && Utils.IsNullOrEmpty(node.flow))
{
await GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled);
await GenOutboundMux(node, outbound, _config.CoreBasicItem.MuxEnabled);
}
outbound.settings.servers = null;
@ -782,9 +782,9 @@ namespace ServiceLib.Services.CoreConfig
if (enabled)
{
outbound.mux.enabled = true;
outbound.mux.concurrency = _config.mux4RayItem.concurrency;
outbound.mux.xudpConcurrency = _config.mux4RayItem.xudpConcurrency;
outbound.mux.xudpProxyUDP443 = _config.mux4RayItem.xudpProxyUDP443;
outbound.mux.concurrency = _config.Mux4RayItem.Concurrency;
outbound.mux.xudpConcurrency = _config.Mux4RayItem.XudpConcurrency;
outbound.mux.xudpProxyUDP443 = _config.Mux4RayItem.XudpProxyUDP443;
}
else
{
@ -807,15 +807,15 @@ namespace ServiceLib.Services.CoreConfig
string host = node.requestHost.TrimEx();
string sni = node.sni;
string useragent = "";
if (!_config.coreBasicItem.defUserAgent.IsNullOrEmpty())
if (!_config.CoreBasicItem.DefUserAgent.IsNullOrEmpty())
{
try
{
useragent = Global.UserAgentTexts[_config.coreBasicItem.defUserAgent];
useragent = Global.UserAgentTexts[_config.CoreBasicItem.DefUserAgent];
}
catch (KeyNotFoundException)
{
useragent = _config.coreBasicItem.defUserAgent;
useragent = _config.CoreBasicItem.DefUserAgent;
}
}
@ -826,9 +826,9 @@ namespace ServiceLib.Services.CoreConfig
TlsSettings4Ray tlsSettings = new()
{
allowInsecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.coreBasicItem.defAllowInsecure.ToString().ToLower() : node.allowInsecure),
allowInsecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.CoreBasicItem.DefAllowInsecure.ToString().ToLower() : node.allowInsecure),
alpn = node.GetAlpn(),
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.CoreBasicItem.DefFingerprint : node.fingerprint
};
if (Utils.IsNotEmpty(sni))
{
@ -848,7 +848,7 @@ namespace ServiceLib.Services.CoreConfig
TlsSettings4Ray realitySettings = new()
{
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint,
fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.CoreBasicItem.DefFingerprint : node.fingerprint,
serverName = sni,
publicKey = node.publicKey,
shortId = node.shortId,
@ -865,16 +865,16 @@ namespace ServiceLib.Services.CoreConfig
case nameof(ETransport.kcp):
KcpSettings4Ray kcpSettings = new()
{
mtu = _config.kcpItem.mtu,
tti = _config.kcpItem.tti
mtu = _config.KcpItem.Mtu,
tti = _config.KcpItem.Tti
};
kcpSettings.uplinkCapacity = _config.kcpItem.uplinkCapacity;
kcpSettings.downlinkCapacity = _config.kcpItem.downlinkCapacity;
kcpSettings.uplinkCapacity = _config.KcpItem.UplinkCapacity;
kcpSettings.downlinkCapacity = _config.KcpItem.DownlinkCapacity;
kcpSettings.congestion = _config.kcpItem.congestion;
kcpSettings.readBufferSize = _config.kcpItem.readBufferSize;
kcpSettings.writeBufferSize = _config.kcpItem.writeBufferSize;
kcpSettings.congestion = _config.KcpItem.Congestion;
kcpSettings.readBufferSize = _config.KcpItem.ReadBufferSize;
kcpSettings.writeBufferSize = _config.KcpItem.WriteBufferSize;
kcpSettings.header = new Header4Ray
{
type = node.headerType
@ -983,10 +983,10 @@ namespace ServiceLib.Services.CoreConfig
authority = Utils.IsNullOrEmpty(host) ? null : host,
serviceName = node.path,
multiMode = node.headerType == Global.GrpcMultiMode,
idle_timeout = _config.grpcItem.idle_timeout,
health_check_timeout = _config.grpcItem.health_check_timeout,
permit_without_stream = _config.grpcItem.permit_without_stream,
initial_windows_size = _config.grpcItem.initial_windows_size,
idle_timeout = _config.GrpcItem.IdleTimeout,
health_check_timeout = _config.GrpcItem.HealthCheckTimeout,
permit_without_stream = _config.GrpcItem.PermitWithoutStream,
initial_windows_size = _config.GrpcItem.InitialWindowsSize,
};
streamSettings.grpcSettings = grpcSettings;
break;
@ -1117,7 +1117,7 @@ namespace ServiceLib.Services.CoreConfig
public async Task<int> GenStatistic(V2rayConfig v2rayConfig)
{
if (_config.guiItem.enableStatistics)
if (_config.GuiItem.EnableStatistics)
{
string tag = EInboundProtocol.api.ToString();
API4Ray apiObj = new();
@ -1168,7 +1168,7 @@ namespace ServiceLib.Services.CoreConfig
private async Task<int> GenMoreOutbounds(ProfileItem node, V2rayConfig v2rayConfig)
{
//fragment proxy
if (_config.coreBasicItem.enableFragment
if (_config.CoreBasicItem.EnableFragment
&& Utils.IsNotEmpty(v2rayConfig.outbounds[0].streamSettings?.security))
{
var fragmentOutbound = new Outbounds4Ray

View File

@ -18,7 +18,7 @@ namespace ServiceLib.Services
{
try
{
SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13);
SetSecurityProtocol(AppHandler.Instance.Config.GuiItem.EnableSecurityProtocolTls13);
var progress = new Progress<string>();
progress.ProgressChanged += (sender, value) =>
@ -50,7 +50,7 @@ namespace ServiceLib.Services
{
try
{
SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13);
SetSecurityProtocol(AppHandler.Instance.Config.GuiItem.EnableSecurityProtocolTls13);
UpdateCompleted?.Invoke(this, new RetResult(false, $"{ResUI.Downloading} {url}"));
var progress = new Progress<double>();
@ -80,7 +80,7 @@ namespace ServiceLib.Services
public async Task<string?> UrlRedirectAsync(string url, bool blProxy)
{
SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13);
SetSecurityProtocol(AppHandler.Instance.Config.GuiItem.EnableSecurityProtocolTls13);
var webRequestHandler = new SocketsHttpHandler
{
AllowAutoRedirect = false,
@ -150,7 +150,7 @@ namespace ServiceLib.Services
{
try
{
SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13);
SetSecurityProtocol(AppHandler.Instance.Config.GuiItem.EnableSecurityProtocolTls13);
var webProxy = await GetWebProxy(blProxy);
var client = new HttpClient(new SocketsHttpHandler()
{
@ -195,7 +195,7 @@ namespace ServiceLib.Services
{
try
{
SetSecurityProtocol(AppHandler.Instance.Config.guiItem.enableSecurityProtocolTls13);
SetSecurityProtocol(AppHandler.Instance.Config.GuiItem.EnableSecurityProtocolTls13);
var webProxy = await GetWebProxy(blProxy);
@ -227,7 +227,7 @@ namespace ServiceLib.Services
try
{
var config = AppHandler.Instance.Config;
var responseTime = await GetRealPingTime(config.speedTestItem.speedPingTestUrl, webProxy, 10);
var responseTime = await GetRealPingTime(config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10);
return responseTime;
}
catch (Exception ex)

View File

@ -203,8 +203,8 @@ namespace ServiceLib.Services
return;
}
string url = _config.speedTestItem.speedTestUrl;
var timeout = _config.speedTestItem.speedTestTimeout;
string url = _config.SpeedTestItem.SpeedTestUrl;
var timeout = _config.SpeedTestItem.SpeedTestTimeout;
DownloadService downloadHandle = new();
@ -265,8 +265,8 @@ namespace ServiceLib.Services
return;
}
string url = _config.speedTestItem.speedTestUrl;
var timeout = _config.speedTestItem.speedTestTimeout;
string url = _config.SpeedTestItem.SpeedTestUrl;
var timeout = _config.SpeedTestItem.SpeedTestTimeout;
DownloadService downloadHandle = new();
@ -331,7 +331,7 @@ namespace ServiceLib.Services
private async Task<string> GetRealPingTime(DownloadService downloadHandle, IWebProxy webProxy)
{
int responseTime = await downloadHandle.GetRealPingTime(_config.speedTestItem.speedPingTestUrl, webProxy, 10);
int responseTime = await downloadHandle.GetRealPingTime(_config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10);
//string output = Utile.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
return FormatOut(responseTime, Global.DelayUnit);
}

View File

@ -154,7 +154,7 @@ namespace ServiceLib.Services
//convert
if (Utils.IsNotEmpty(item.convertTarget))
{
var subConvertUrl = Utils.IsNullOrEmpty(config.constItem.subConvertUrl) ? Global.SubConvertUrls.FirstOrDefault() : config.constItem.subConvertUrl;
var subConvertUrl = Utils.IsNullOrEmpty(config.ConstItem.SubConvertUrl) ? Global.SubConvertUrls.FirstOrDefault() : config.ConstItem.SubConvertUrl;
url = string.Format(subConvertUrl!, Utils.UrlEncode(url));
if (!url.Contains("target="))
{
@ -457,9 +457,9 @@ namespace ServiceLib.Services
_config = config;
_updateFunc = updateFunc;
var geoUrl = string.IsNullOrEmpty(config?.constItem.geoSourceUrl)
var geoUrl = string.IsNullOrEmpty(config?.ConstItem.GeoSourceUrl)
? Global.GeoUrl
: config.constItem.geoSourceUrl;
: config.ConstItem.GeoSourceUrl;
var fileName = $"{geoName}.dat";
var targetPath = Utils.GetBinPath($"{fileName}");
@ -521,9 +521,9 @@ namespace ServiceLib.Services
private async Task UpdateSrsFile(string type, string srsName, Config config, Action<bool, string> updateFunc)
{
var srsUrl = string.IsNullOrEmpty(_config.constItem.srsSourceUrl)
var srsUrl = string.IsNullOrEmpty(_config.ConstItem.SrsSourceUrl)
? Global.SingboxRulesetUrl
: _config.constItem.srsSourceUrl;
: _config.ConstItem.SrsSourceUrl;
var fileName = $"{type}-{srsName}.srs";
var targetPath = Path.Combine(Utils.GetBinPath("srss"), fileName);

View File

@ -38,7 +38,7 @@ namespace ServiceLib.ViewModels
await RemoteRestore();
});
SelectedSource = JsonUtils.DeepCopy(_config.webDavItem);
SelectedSource = JsonUtils.DeepCopy(_config.WebDavItem);
}
private void DisplayOperationMsg(string msg = "")
@ -49,7 +49,7 @@ namespace ServiceLib.ViewModels
private async Task WebDavCheck()
{
DisplayOperationMsg();
_config.webDavItem = SelectedSource;
_config.WebDavItem = SelectedSource;
await ConfigHandler.SaveConfig(_config);
var result = await WebDavHandler.Instance.CheckConnection();

View File

@ -28,12 +28,12 @@ namespace ServiceLib.ViewModels
await CheckUpdate();
});
EnableCheckPreReleaseUpdate = _config.guiItem.checkPreReleaseUpdate;
EnableCheckPreReleaseUpdate = _config.GuiItem.CheckPreReleaseUpdate;
this.WhenAnyValue(
x => x.EnableCheckPreReleaseUpdate,
y => y == true)
.Subscribe(c => { _config.guiItem.checkPreReleaseUpdate = EnableCheckPreReleaseUpdate; });
.Subscribe(c => { _config.GuiItem.CheckPreReleaseUpdate = EnableCheckPreReleaseUpdate; });
RefreshSubItems();
}
@ -263,7 +263,7 @@ namespace ServiceLib.ViewModels
}
else
{
FileManager.ZipExtractToFile(fileName, toPath, _config.guiItem.ignoreGeoUpdateCore ? "geo" : "");
FileManager.ZipExtractToFile(fileName, toPath, _config.GuiItem.IgnoreGeoUpdateCore ? "geo" : "");
}
if (Utils.IsLinux())

View File

@ -31,8 +31,8 @@ namespace ServiceLib.ViewModels
{
_config = AppHandler.Instance.Config;
_updateView = updateView;
SortingSelected = _config.clashUIItem.connectionsSorting;
AutoRefresh = _config.clashUIItem.connectionsAutoRefresh;
SortingSelected = _config.ClashUIItem.ConnectionsSorting;
AutoRefresh = _config.ClashUIItem.ConnectionsAutoRefresh;
var canEditRemove = this.WhenAnyValue(
x => x.SelectedSource,
@ -46,7 +46,7 @@ namespace ServiceLib.ViewModels
this.WhenAnyValue(
x => x.AutoRefresh,
y => y == true)
.Subscribe(c => { _config.clashUIItem.connectionsAutoRefresh = AutoRefresh; });
.Subscribe(c => { _config.ClashUIItem.ConnectionsAutoRefresh = AutoRefresh; });
ConnectionCloseCmd = ReactiveCommand.CreateFromTask(async () =>
{
await ClashConnectionClose(false);
@ -67,14 +67,14 @@ namespace ServiceLib.ViewModels
Observable.Interval(TimeSpan.FromSeconds(5))
.Subscribe(async x =>
{
if (!(AutoRefresh && _config.uiItem.showInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
{
return;
}
var dtNow = DateTime.Now;
if (_config.clashUIItem.connectionsRefreshInterval > 0)
if (_config.ClashUIItem.ConnectionsRefreshInterval > 0)
{
if ((dtNow - lastTime).Minutes % _config.clashUIItem.connectionsRefreshInterval == 0)
if ((dtNow - lastTime).Minutes % _config.ClashUIItem.ConnectionsRefreshInterval == 0)
{
await GetClashConnections();
lastTime = dtNow;
@ -90,9 +90,9 @@ namespace ServiceLib.ViewModels
{
return;
}
if (SortingSelected != _config.clashUIItem.connectionsSorting)
if (SortingSelected != _config.ClashUIItem.ConnectionsSorting)
{
_config.clashUIItem.connectionsSorting = SortingSelected;
_config.ClashUIItem.ConnectionsSorting = SortingSelected;
}
await GetClashConnections();

View File

@ -66,9 +66,9 @@ namespace ServiceLib.ViewModels
SelectedGroup = new();
SelectedDetail = new();
AutoRefresh = _config.clashUIItem.proxiesAutoRefresh;
SortingSelected = _config.clashUIItem.proxiesSorting;
RuleModeSelected = (int)_config.clashUIItem.ruleMode;
AutoRefresh = _config.ClashUIItem.ProxiesAutoRefresh;
SortingSelected = _config.ClashUIItem.ProxiesSorting;
RuleModeSelected = (int)_config.ClashUIItem.RuleMode;
this.WhenAnyValue(
x => x.SelectedGroup,
@ -88,7 +88,7 @@ namespace ServiceLib.ViewModels
this.WhenAnyValue(
x => x.AutoRefresh,
y => y == true)
.Subscribe(c => { _config.clashUIItem.proxiesAutoRefresh = AutoRefresh; });
.Subscribe(c => { _config.ClashUIItem.ProxiesAutoRefresh = AutoRefresh; });
Init();
}
@ -105,7 +105,7 @@ namespace ServiceLib.ViewModels
{
return;
}
if (_config.clashUIItem.ruleMode == (ERuleMode)RuleModeSelected)
if (_config.ClashUIItem.RuleMode == (ERuleMode)RuleModeSelected)
{
return;
}
@ -114,7 +114,7 @@ namespace ServiceLib.ViewModels
public async Task SetRuleModeCheck(ERuleMode mode)
{
if (_config.clashUIItem.ruleMode == mode)
if (_config.ClashUIItem.RuleMode == mode)
{
return;
}
@ -127,9 +127,9 @@ namespace ServiceLib.ViewModels
{
return;
}
if (SortingSelected != _config.clashUIItem.proxiesSorting)
if (SortingSelected != _config.ClashUIItem.ProxiesSorting)
{
_config.clashUIItem.proxiesSorting = SortingSelected;
_config.ClashUIItem.ProxiesSorting = SortingSelected;
}
RefreshProxyDetails(c);
@ -155,7 +155,7 @@ namespace ServiceLib.ViewModels
private async Task SetRuleMode(ERuleMode mode)
{
_config.clashUIItem.ruleMode = mode;
_config.ClashUIItem.RuleMode = mode;
if (mode != ERuleMode.Unchanged)
{
@ -438,14 +438,14 @@ namespace ServiceLib.ViewModels
Observable.Interval(TimeSpan.FromSeconds(60))
.Subscribe(async x =>
{
if (!(AutoRefresh && _config.uiItem.showInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
{
return;
}
var dtNow = DateTime.Now;
if (_config.clashUIItem.proxiesAutoDelayTestInterval > 0)
if (_config.ClashUIItem.ProxiesAutoDelayTestInterval > 0)
{
if ((dtNow - lastTime).Minutes % _config.clashUIItem.proxiesAutoDelayTestInterval == 0)
if ((dtNow - lastTime).Minutes % _config.ClashUIItem.ProxiesAutoDelayTestInterval == 0)
{
await ProxiesDelayTest();
lastTime = dtNow;

View File

@ -142,11 +142,11 @@ namespace ServiceLib.ViewModels
});
SubGroupUpdateCmd = ReactiveCommand.CreateFromTask(async () =>
{
await UpdateSubscriptionProcess(_config.subIndexId, false);
await UpdateSubscriptionProcess(_config.SubIndexId, false);
});
SubGroupUpdateViaProxyCmd = ReactiveCommand.CreateFromTask(async () =>
{
await UpdateSubscriptionProcess(_config.subIndexId, true);
await UpdateSubscriptionProcess(_config.SubIndexId, true);
});
//Setting
@ -204,14 +204,14 @@ namespace ServiceLib.ViewModels
private async Task Init()
{
_config.uiItem.showInTaskbar = true;
_config.UiItem.ShowInTaskbar = true;
await ConfigHandler.InitBuiltinRouting(_config);
await ConfigHandler.InitBuiltinDNS(_config);
CoreHandler.Instance.Init(_config, UpdateHandler);
TaskHandler.Instance.RegUpdateTask(_config, UpdateTaskHandler);
if (_config.guiItem.enableStatistics)
if (_config.GuiItem.EnableStatistics)
{
await StatisticsHandler.Instance.Init(_config, UpdateStatisticsHandler);
}
@ -238,13 +238,13 @@ namespace ServiceLib.ViewModels
NoticeHandler.Instance.SendMessageEx(msg);
if (success)
{
var indexIdOld = _config.indexId;
var indexIdOld = _config.IndexId;
RefreshServers();
if (indexIdOld != _config.indexId)
if (indexIdOld != _config.IndexId)
{
Reload();
}
if (_config.uiItem.enableAutoAdjustMainLvColWidth)
if (_config.UiItem.EnableAutoAdjustMainLvColWidth)
{
_updateView?.Invoke(EViewAction.AdjustMainLvColWidth, null);
}
@ -253,7 +253,7 @@ namespace ServiceLib.ViewModels
private void UpdateStatisticsHandler(ServerSpeedItem update)
{
if (!_config.uiItem.showInTaskbar)
if (!_config.UiItem.ShowInTaskbar)
{
return;
}
@ -351,7 +351,7 @@ namespace ServiceLib.ViewModels
{
ProfileItem item = new()
{
subid = _config.subIndexId,
subid = _config.SubIndexId,
configType = eConfigType,
isSub = false,
};
@ -368,7 +368,7 @@ namespace ServiceLib.ViewModels
if (ret == true)
{
RefreshServers();
if (item.indexId == _config.indexId)
if (item.indexId == _config.IndexId)
{
await Reload();
}
@ -382,7 +382,7 @@ namespace ServiceLib.ViewModels
await _updateView?.Invoke(EViewAction.AddServerViaClipboard, null);
return;
}
int ret = await ConfigHandler.AddBatchServers(_config, clipboardData, _config.subIndexId, false);
int ret = await ConfigHandler.AddBatchServers(_config, clipboardData, _config.SubIndexId, false);
if (ret > 0)
{
RefreshSubscriptions();
@ -426,7 +426,7 @@ namespace ServiceLib.ViewModels
}
else
{
int ret = await ConfigHandler.AddBatchServers(_config, result, _config.subIndexId, false);
int ret = await ConfigHandler.AddBatchServers(_config, result, _config.SubIndexId, false);
if (ret > 0)
{
RefreshSubscriptions();
@ -572,7 +572,7 @@ namespace ServiceLib.ViewModels
private async Task AutoHideStartup()
{
if (_config.uiItem.autoHideStartup)
if (_config.UiItem.AutoHideStartup)
{
ShowHideWindow(false);
}

View File

@ -23,17 +23,17 @@ namespace ServiceLib.ViewModels
{
_config = AppHandler.Instance.Config;
_updateView = updateView;
MsgFilter = _config.msgUIItem.mainMsgFilter ?? string.Empty;
AutoRefresh = _config.msgUIItem.autoRefresh ?? true;
MsgFilter = _config.MsgUIItem.MainMsgFilter ?? string.Empty;
AutoRefresh = _config.MsgUIItem.AutoRefresh ?? true;
this.WhenAnyValue(
x => x.MsgFilter)
.Subscribe(c => _config.msgUIItem.mainMsgFilter = MsgFilter);
.Subscribe(c => _config.MsgUIItem.MainMsgFilter = MsgFilter);
this.WhenAnyValue(
x => x.AutoRefresh,
y => y == true)
.Subscribe(c => { _config.msgUIItem.autoRefresh = AutoRefresh; });
.Subscribe(c => { _config.MsgUIItem.AutoRefresh = AutoRefresh; });
MessageBus.Current.Listen<string>(EMsgCommand.SendMsgView.ToString()).Subscribe(OnNext);
}
@ -62,7 +62,7 @@ namespace ServiceLib.ViewModels
}
_blLockShow = true;
if (!_config.uiItem.showInTaskbar)
if (!_config.UiItem.ShowInTaskbar)
{
await Task.Delay(1000);
}

View File

@ -119,26 +119,26 @@ namespace ServiceLib.ViewModels
{
#region Core
var inbound = _config.inbound[0];
localPort = inbound.localPort;
udpEnabled = inbound.udpEnabled;
sniffingEnabled = inbound.sniffingEnabled;
routeOnly = inbound.routeOnly;
allowLANConn = inbound.allowLANConn;
newPort4LAN = inbound.newPort4LAN;
user = inbound.user;
pass = inbound.pass;
muxEnabled = _config.coreBasicItem.muxEnabled;
logEnabled = _config.coreBasicItem.logEnabled;
loglevel = _config.coreBasicItem.loglevel;
defAllowInsecure = _config.coreBasicItem.defAllowInsecure;
defFingerprint = _config.coreBasicItem.defFingerprint;
defUserAgent = _config.coreBasicItem.defUserAgent;
mux4SboxProtocol = _config.mux4SboxItem.protocol;
enableCacheFile4Sbox = _config.coreBasicItem.enableCacheFile4Sbox;
hyUpMbps = _config.hysteriaItem.up_mbps;
hyDownMbps = _config.hysteriaItem.down_mbps;
enableFragment = _config.coreBasicItem.enableFragment;
var inbound = _config.Inbound[0];
localPort = inbound.LocalPort;
udpEnabled = inbound.UdpEnabled;
sniffingEnabled = inbound.SniffingEnabled;
routeOnly = inbound.RouteOnly;
allowLANConn = inbound.AllowLANConn;
newPort4LAN = inbound.NewPort4LAN;
user = inbound.User;
pass = inbound.Pass;
muxEnabled = _config.CoreBasicItem.MuxEnabled;
logEnabled = _config.CoreBasicItem.LogEnabled;
loglevel = _config.CoreBasicItem.Loglevel;
defAllowInsecure = _config.CoreBasicItem.DefAllowInsecure;
defFingerprint = _config.CoreBasicItem.DefFingerprint;
defUserAgent = _config.CoreBasicItem.DefUserAgent;
mux4SboxProtocol = _config.Mux4SboxItem.Protocol;
enableCacheFile4Sbox = _config.CoreBasicItem.EnableCacheFile4Sbox;
hyUpMbps = _config.HysteriaItem.UpMbps;
hyDownMbps = _config.HysteriaItem.DownMbps;
enableFragment = _config.CoreBasicItem.EnableFragment;
#endregion Core
@ -156,47 +156,47 @@ namespace ServiceLib.ViewModels
#region UI
AutoRun = _config.guiItem.autoRun;
EnableStatistics = _config.guiItem.enableStatistics;
KeepOlderDedupl = _config.guiItem.keepOlderDedupl;
IgnoreGeoUpdateCore = _config.guiItem.ignoreGeoUpdateCore;
EnableAutoAdjustMainLvColWidth = _config.uiItem.enableAutoAdjustMainLvColWidth;
EnableUpdateSubOnlyRemarksExist = _config.uiItem.enableUpdateSubOnlyRemarksExist;
EnableSecurityProtocolTls13 = _config.guiItem.enableSecurityProtocolTls13;
AutoHideStartup = _config.uiItem.autoHideStartup;
EnableCheckPreReleaseUpdate = _config.guiItem.checkPreReleaseUpdate;
EnableDragDropSort = _config.uiItem.enableDragDropSort;
DoubleClick2Activate = _config.uiItem.doubleClick2Activate;
AutoUpdateInterval = _config.guiItem.autoUpdateInterval;
TrayMenuServersLimit = _config.guiItem.trayMenuServersLimit;
CurrentFontFamily = _config.uiItem.currentFontFamily;
SpeedTestTimeout = _config.speedTestItem.speedTestTimeout;
SpeedTestUrl = _config.speedTestItem.speedTestUrl;
SpeedPingTestUrl = _config.speedTestItem.speedPingTestUrl;
EnableHWA = _config.guiItem.enableHWA;
SubConvertUrl = _config.constItem.subConvertUrl;
MainGirdOrientation = (int)_config.uiItem.mainGirdOrientation;
GeoFileSourceUrl = _config.constItem.geoSourceUrl;
SrsFileSourceUrl = _config.constItem.srsSourceUrl;
RoutingRulesSourceUrl = _config.constItem.routeRulesTemplateSourceUrl;
AutoRun = _config.GuiItem.AutoRun;
EnableStatistics = _config.GuiItem.EnableStatistics;
KeepOlderDedupl = _config.GuiItem.KeepOlderDedupl;
IgnoreGeoUpdateCore = _config.GuiItem.IgnoreGeoUpdateCore;
EnableAutoAdjustMainLvColWidth = _config.UiItem.EnableAutoAdjustMainLvColWidth;
EnableUpdateSubOnlyRemarksExist = _config.UiItem.EnableUpdateSubOnlyRemarksExist;
EnableSecurityProtocolTls13 = _config.GuiItem.EnableSecurityProtocolTls13;
AutoHideStartup = _config.UiItem.AutoHideStartup;
EnableCheckPreReleaseUpdate = _config.GuiItem.CheckPreReleaseUpdate;
EnableDragDropSort = _config.UiItem.EnableDragDropSort;
DoubleClick2Activate = _config.UiItem.DoubleClick2Activate;
AutoUpdateInterval = _config.GuiItem.AutoUpdateInterval;
TrayMenuServersLimit = _config.GuiItem.TrayMenuServersLimit;
CurrentFontFamily = _config.UiItem.CurrentFontFamily;
SpeedTestTimeout = _config.SpeedTestItem.SpeedTestTimeout;
SpeedTestUrl = _config.SpeedTestItem.SpeedTestUrl;
SpeedPingTestUrl = _config.SpeedTestItem.SpeedPingTestUrl;
EnableHWA = _config.GuiItem.EnableHWA;
SubConvertUrl = _config.ConstItem.SubConvertUrl;
MainGirdOrientation = (int)_config.UiItem.MainGirdOrientation;
GeoFileSourceUrl = _config.ConstItem.GeoSourceUrl;
SrsFileSourceUrl = _config.ConstItem.SrsSourceUrl;
RoutingRulesSourceUrl = _config.ConstItem.RouteRulesTemplateSourceUrl;
#endregion UI
#region System proxy
notProxyLocalAddress = _config.systemProxyItem.notProxyLocalAddress;
systemProxyAdvancedProtocol = _config.systemProxyItem.systemProxyAdvancedProtocol;
systemProxyExceptions = _config.systemProxyItem.systemProxyExceptions;
notProxyLocalAddress = _config.SystemProxyItem.NotProxyLocalAddress;
systemProxyAdvancedProtocol = _config.SystemProxyItem.SystemProxyAdvancedProtocol;
systemProxyExceptions = _config.SystemProxyItem.SystemProxyExceptions;
#endregion System proxy
#region Tun mode
TunStrictRoute = _config.tunModeItem.strictRoute;
TunStack = _config.tunModeItem.stack;
TunMtu = _config.tunModeItem.mtu;
TunEnableExInbound = _config.tunModeItem.enableExInbound;
TunEnableIPv6Address = _config.tunModeItem.enableIPv6Address;
TunStrictRoute = _config.TunModeItem.StrictRoute;
TunStack = _config.TunModeItem.Stack;
TunMtu = _config.TunModeItem.Mtu;
TunEnableExInbound = _config.TunModeItem.EnableExInbound;
TunEnableIPv6Address = _config.TunModeItem.EnableIPv6Address;
#endregion Tun mode
@ -205,28 +205,28 @@ namespace ServiceLib.ViewModels
private async Task InitCoreType()
{
if (_config.coreTypeItem == null)
if (_config.CoreTypeItem == null)
{
_config.coreTypeItem = new List<CoreTypeItem>();
_config.CoreTypeItem = new List<CoreTypeItem>();
}
foreach (EConfigType it in Enum.GetValues(typeof(EConfigType)))
{
if (_config.coreTypeItem.FindIndex(t => t.configType == it) >= 0)
if (_config.CoreTypeItem.FindIndex(t => t.ConfigType == it) >= 0)
{
continue;
}
_config.coreTypeItem.Add(new CoreTypeItem()
_config.CoreTypeItem.Add(new CoreTypeItem()
{
configType = it,
coreType = ECoreType.Xray
ConfigType = it,
CoreType = ECoreType.Xray
});
}
_config.coreTypeItem.ForEach(it =>
_config.CoreTypeItem.ForEach(it =>
{
var type = it.coreType.ToString();
switch ((int)it.configType)
var type = it.CoreType.ToString();
switch ((int)it.ConfigType)
{
case 1:
CoreType1 = type;
@ -263,11 +263,11 @@ namespace ServiceLib.ViewModels
NoticeHandler.Instance.Enqueue(ResUI.FillLocalListeningPort);
return;
}
var needReboot = (EnableStatistics != _config.guiItem.enableStatistics
|| EnableDragDropSort != _config.uiItem.enableDragDropSort
|| EnableHWA != _config.guiItem.enableHWA
|| CurrentFontFamily != _config.uiItem.currentFontFamily
|| MainGirdOrientation != (int)_config.uiItem.mainGirdOrientation);
var needReboot = (EnableStatistics != _config.GuiItem.EnableStatistics
|| EnableDragDropSort != _config.UiItem.EnableDragDropSort
|| EnableHWA != _config.GuiItem.EnableHWA
|| CurrentFontFamily != _config.UiItem.CurrentFontFamily
|| MainGirdOrientation != (int)_config.UiItem.MainGirdOrientation);
//if (Utile.IsNullOrEmpty(Kcpmtu.ToString()) || !Utile.IsNumeric(Kcpmtu.ToString())
// || Utile.IsNullOrEmpty(Kcptti.ToString()) || !Utile.IsNumeric(Kcptti.ToString())
@ -281,66 +281,66 @@ namespace ServiceLib.ViewModels
//}
//Core
_config.inbound[0].localPort = localPort;
_config.inbound[0].udpEnabled = udpEnabled;
_config.inbound[0].sniffingEnabled = sniffingEnabled;
_config.inbound[0].destOverride = destOverride?.ToList();
_config.inbound[0].routeOnly = routeOnly;
_config.inbound[0].allowLANConn = allowLANConn;
_config.inbound[0].newPort4LAN = newPort4LAN;
_config.inbound[0].user = user;
_config.inbound[0].pass = pass;
if (_config.inbound.Count > 1)
_config.Inbound[0].LocalPort = localPort;
_config.Inbound[0].UdpEnabled = udpEnabled;
_config.Inbound[0].SniffingEnabled = sniffingEnabled;
_config.Inbound[0].DestOverride = destOverride?.ToList();
_config.Inbound[0].RouteOnly = routeOnly;
_config.Inbound[0].AllowLANConn = allowLANConn;
_config.Inbound[0].NewPort4LAN = newPort4LAN;
_config.Inbound[0].User = user;
_config.Inbound[0].Pass = pass;
if (_config.Inbound.Count > 1)
{
_config.inbound.RemoveAt(1);
_config.Inbound.RemoveAt(1);
}
_config.coreBasicItem.logEnabled = logEnabled;
_config.coreBasicItem.loglevel = loglevel;
_config.coreBasicItem.muxEnabled = muxEnabled;
_config.coreBasicItem.defAllowInsecure = defAllowInsecure;
_config.coreBasicItem.defFingerprint = defFingerprint;
_config.coreBasicItem.defUserAgent = defUserAgent;
_config.mux4SboxItem.protocol = mux4SboxProtocol;
_config.coreBasicItem.enableCacheFile4Sbox = enableCacheFile4Sbox;
_config.hysteriaItem.up_mbps = hyUpMbps;
_config.hysteriaItem.down_mbps = hyDownMbps;
_config.coreBasicItem.enableFragment = enableFragment;
_config.CoreBasicItem.LogEnabled = logEnabled;
_config.CoreBasicItem.Loglevel = loglevel;
_config.CoreBasicItem.MuxEnabled = muxEnabled;
_config.CoreBasicItem.DefAllowInsecure = defAllowInsecure;
_config.CoreBasicItem.DefFingerprint = defFingerprint;
_config.CoreBasicItem.DefUserAgent = defUserAgent;
_config.Mux4SboxItem.Protocol = mux4SboxProtocol;
_config.CoreBasicItem.EnableCacheFile4Sbox = enableCacheFile4Sbox;
_config.HysteriaItem.UpMbps = hyUpMbps;
_config.HysteriaItem.DownMbps = hyDownMbps;
_config.CoreBasicItem.EnableFragment = enableFragment;
_config.guiItem.autoRun = AutoRun;
_config.guiItem.enableStatistics = EnableStatistics;
_config.guiItem.keepOlderDedupl = KeepOlderDedupl;
_config.guiItem.ignoreGeoUpdateCore = IgnoreGeoUpdateCore;
_config.uiItem.enableAutoAdjustMainLvColWidth = EnableAutoAdjustMainLvColWidth;
_config.uiItem.enableUpdateSubOnlyRemarksExist = EnableUpdateSubOnlyRemarksExist;
_config.guiItem.enableSecurityProtocolTls13 = EnableSecurityProtocolTls13;
_config.uiItem.autoHideStartup = AutoHideStartup;
_config.guiItem.autoUpdateInterval = AutoUpdateInterval;
_config.guiItem.checkPreReleaseUpdate = EnableCheckPreReleaseUpdate;
_config.uiItem.enableDragDropSort = EnableDragDropSort;
_config.uiItem.doubleClick2Activate = DoubleClick2Activate;
_config.guiItem.trayMenuServersLimit = TrayMenuServersLimit;
_config.uiItem.currentFontFamily = CurrentFontFamily;
_config.speedTestItem.speedTestTimeout = SpeedTestTimeout;
_config.speedTestItem.speedTestUrl = SpeedTestUrl;
_config.speedTestItem.speedPingTestUrl = SpeedPingTestUrl;
_config.guiItem.enableHWA = EnableHWA;
_config.constItem.subConvertUrl = SubConvertUrl;
_config.uiItem.mainGirdOrientation = (EGirdOrientation)MainGirdOrientation;
_config.constItem.geoSourceUrl = GeoFileSourceUrl;
_config.constItem.srsSourceUrl = SrsFileSourceUrl;
_config.constItem.routeRulesTemplateSourceUrl = RoutingRulesSourceUrl;
_config.GuiItem.AutoRun = AutoRun;
_config.GuiItem.EnableStatistics = EnableStatistics;
_config.GuiItem.KeepOlderDedupl = KeepOlderDedupl;
_config.GuiItem.IgnoreGeoUpdateCore = IgnoreGeoUpdateCore;
_config.UiItem.EnableAutoAdjustMainLvColWidth = EnableAutoAdjustMainLvColWidth;
_config.UiItem.EnableUpdateSubOnlyRemarksExist = EnableUpdateSubOnlyRemarksExist;
_config.GuiItem.EnableSecurityProtocolTls13 = EnableSecurityProtocolTls13;
_config.UiItem.AutoHideStartup = AutoHideStartup;
_config.GuiItem.AutoUpdateInterval = AutoUpdateInterval;
_config.GuiItem.CheckPreReleaseUpdate = EnableCheckPreReleaseUpdate;
_config.UiItem.EnableDragDropSort = EnableDragDropSort;
_config.UiItem.DoubleClick2Activate = DoubleClick2Activate;
_config.GuiItem.TrayMenuServersLimit = TrayMenuServersLimit;
_config.UiItem.CurrentFontFamily = CurrentFontFamily;
_config.SpeedTestItem.SpeedTestTimeout = SpeedTestTimeout;
_config.SpeedTestItem.SpeedTestUrl = SpeedTestUrl;
_config.SpeedTestItem.SpeedPingTestUrl = SpeedPingTestUrl;
_config.GuiItem.EnableHWA = EnableHWA;
_config.ConstItem.SubConvertUrl = SubConvertUrl;
_config.UiItem.MainGirdOrientation = (EGirdOrientation)MainGirdOrientation;
_config.ConstItem.GeoSourceUrl = GeoFileSourceUrl;
_config.ConstItem.SrsSourceUrl = SrsFileSourceUrl;
_config.ConstItem.RouteRulesTemplateSourceUrl = RoutingRulesSourceUrl;
//systemProxy
_config.systemProxyItem.systemProxyExceptions = systemProxyExceptions;
_config.systemProxyItem.notProxyLocalAddress = notProxyLocalAddress;
_config.systemProxyItem.systemProxyAdvancedProtocol = systemProxyAdvancedProtocol;
_config.SystemProxyItem.SystemProxyExceptions = systemProxyExceptions;
_config.SystemProxyItem.NotProxyLocalAddress = notProxyLocalAddress;
_config.SystemProxyItem.SystemProxyAdvancedProtocol = systemProxyAdvancedProtocol;
//tun mode
_config.tunModeItem.strictRoute = TunStrictRoute;
_config.tunModeItem.stack = TunStack;
_config.tunModeItem.mtu = TunMtu;
_config.tunModeItem.enableExInbound = TunEnableExInbound;
_config.tunModeItem.enableIPv6Address = TunEnableIPv6Address;
_config.TunModeItem.StrictRoute = TunStrictRoute;
_config.TunModeItem.Stack = TunStack;
_config.TunModeItem.Mtu = TunMtu;
_config.TunModeItem.EnableExInbound = TunEnableExInbound;
_config.TunModeItem.EnableIPv6Address = TunEnableIPv6Address;
//coreType
await SaveCoreType();
@ -365,11 +365,11 @@ namespace ServiceLib.ViewModels
private async Task SaveCoreType()
{
for (int k = 1; k <= _config.coreTypeItem.Count; k++)
for (int k = 1; k <= _config.CoreTypeItem.Count; k++)
{
var item = _config.coreTypeItem[k - 1];
var item = _config.CoreTypeItem[k - 1];
var type = string.Empty;
switch ((int)item.configType)
switch ((int)item.ConfigType)
{
case 1:
type = CoreType1;
@ -398,7 +398,7 @@ namespace ServiceLib.ViewModels
default:
continue;
}
item.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), type);
item.CoreType = (ECoreType)Enum.Parse(typeof(ECoreType), type);
}
}
}

View File

@ -107,7 +107,7 @@ namespace ServiceLib.ViewModels
this.WhenAnyValue(
x => x.SelectedSub,
y => y != null && !y.remarks.IsNullOrEmpty() && _config.subIndexId != y.id)
y => y != null && !y.remarks.IsNullOrEmpty() && _config.SubIndexId != y.id)
.Subscribe(async c => await SubSelectedChangedAsync(c));
this.WhenAnyValue(
x => x.SelectedMoveToGroup,
@ -334,7 +334,7 @@ namespace ServiceLib.ViewModels
{
return;
}
_config.subIndexId = SelectedSub?.id;
_config.SubIndexId = SelectedSub?.id;
RefreshServers();
@ -361,14 +361,14 @@ namespace ServiceLib.ViewModels
public async Task RefreshServersBiz()
{
var lstModel = await AppHandler.Instance.ProfileItemsEx(_config.subIndexId, _serverFilter);
var lstModel = await AppHandler.Instance.ProfileItemsEx(_config.SubIndexId, _serverFilter);
_lstProfile = JsonUtils.Deserialize<List<ProfileItem>>(JsonUtils.Serialize(lstModel)) ?? [];
_profileItems.Clear();
_profileItems.AddRange(lstModel);
if (lstModel.Count > 0)
{
var selected = lstModel.FirstOrDefault(t => t.indexId == _config.indexId);
var selected = lstModel.FirstOrDefault(t => t.indexId == _config.IndexId);
if (selected != null)
{
SelectedProfile = selected;
@ -390,9 +390,9 @@ namespace ServiceLib.ViewModels
{
_subItems.Add(item);
}
if (_config.subIndexId != null && _subItems.FirstOrDefault(t => t.id == _config.subIndexId) != null)
if (_config.SubIndexId != null && _subItems.FirstOrDefault(t => t.id == _config.SubIndexId) != null)
{
SelectedSub = _subItems.FirstOrDefault(t => t.id == _config.subIndexId);
SelectedSub = _subItems.FirstOrDefault(t => t.id == _config.SubIndexId);
}
else
{
@ -458,7 +458,7 @@ namespace ServiceLib.ViewModels
if (ret == true)
{
RefreshServers();
if (item.indexId == _config.indexId)
if (item.indexId == _config.IndexId)
{
Reload();
}
@ -476,7 +476,7 @@ namespace ServiceLib.ViewModels
{
return;
}
var exists = lstSelecteds.Exists(t => t.indexId == _config.indexId);
var exists = lstSelecteds.Exists(t => t.indexId == _config.IndexId);
await ConfigHandler.RemoveServer(_config, lstSelecteds);
NoticeHandler.Instance.Enqueue(ResUI.OperationSuccess);
@ -490,7 +490,7 @@ namespace ServiceLib.ViewModels
private async Task RemoveDuplicateServer()
{
var tuple = await ConfigHandler.DedupServerList(_config, _config.subIndexId);
var tuple = await ConfigHandler.DedupServerList(_config, _config.SubIndexId);
RefreshServers();
Reload();
NoticeHandler.Instance.Enqueue(string.Format(ResUI.RemoveDuplicateServerResult, tuple.Item1, tuple.Item2));
@ -525,7 +525,7 @@ namespace ServiceLib.ViewModels
{
return;
}
if (indexId == _config.indexId)
if (indexId == _config.IndexId)
{
return;
}
@ -591,7 +591,7 @@ namespace ServiceLib.ViewModels
NoticeHandler.Instance.Enqueue(ResUI.OperationFailed);
return;
}
if (ret?.Data?.ToString() == _config.indexId)
if (ret?.Data?.ToString() == _config.IndexId)
{
RefreshServers();
Reload();
@ -611,7 +611,7 @@ namespace ServiceLib.ViewModels
_dicHeaderSort.TryAdd(colName, true);
_dicHeaderSort.TryGetValue(colName, out bool asc);
if (await ConfigHandler.SortServers(_config, _config.subIndexId, colName, asc) != 0)
if (await ConfigHandler.SortServers(_config, _config.SubIndexId, colName, asc) != 0)
{
return;
}
@ -784,7 +784,7 @@ namespace ServiceLib.ViewModels
}
else
{
item = await AppHandler.Instance.GetSubItem(_config.subIndexId);
item = await AppHandler.Instance.GetSubItem(_config.SubIndexId);
if (item is null)
{
return;

View File

@ -111,10 +111,10 @@ namespace ServiceLib.ViewModels
{
SelectedSource = new();
enableRoutingAdvanced = _config.routingBasicItem.enableRoutingAdvanced;
domainStrategy = _config.routingBasicItem.domainStrategy;
domainMatcher = _config.routingBasicItem.domainMatcher;
domainStrategy4Singbox = _config.routingBasicItem.domainStrategy4Singbox;
enableRoutingAdvanced = _config.RoutingBasicItem.EnableRoutingAdvanced;
domainStrategy = _config.RoutingBasicItem.DomainStrategy;
domainMatcher = _config.RoutingBasicItem.DomainMatcher;
domainStrategy4Singbox = _config.RoutingBasicItem.DomainStrategy4Singbox;
await ConfigHandler.InitBuiltinRouting(_config);
await RefreshRoutingItems();
@ -182,7 +182,7 @@ namespace ServiceLib.ViewModels
foreach (var item in routings)
{
bool def = false;
if (item.id == _config.routingBasicItem.routingIndexId)
if (item.id == _config.RoutingBasicItem.RoutingIndexId)
{
def = true;
}
@ -204,10 +204,10 @@ namespace ServiceLib.ViewModels
private async Task SaveRoutingAsync()
{
_config.routingBasicItem.domainStrategy = domainStrategy;
_config.routingBasicItem.enableRoutingAdvanced = enableRoutingAdvanced;
_config.routingBasicItem.domainMatcher = domainMatcher;
_config.routingBasicItem.domainStrategy4Singbox = domainStrategy4Singbox;
_config.RoutingBasicItem.DomainStrategy = domainStrategy;
_config.RoutingBasicItem.EnableRoutingAdvanced = enableRoutingAdvanced;
_config.RoutingBasicItem.DomainMatcher = domainMatcher;
_config.RoutingBasicItem.DomainStrategy4Singbox = domainStrategy4Singbox;
await EndBindingLockedData();

View File

@ -117,7 +117,7 @@ namespace ServiceLib.ViewModels
y => y != null && !y.Text.IsNullOrEmpty())
.Subscribe(c => ServerSelectedChanged(c));
SystemProxySelected = (int)_config.systemProxyItem.sysProxyType;
SystemProxySelected = (int)_config.SystemProxyItem.SysProxyType;
this.WhenAnyValue(
x => x.SystemProxySelected,
y => y >= 0)
@ -182,18 +182,18 @@ namespace ServiceLib.ViewModels
SelectedRouting = new();
SelectedServer = new();
if (_config.tunModeItem.enableTun && AppHandler.Instance.IsAdministrator)
if (_config.TunModeItem.EnableTun && AppHandler.Instance.IsAdministrator)
{
EnableTun = true;
}
else
{
_config.tunModeItem.enableTun = EnableTun = false;
_config.TunModeItem.EnableTun = EnableTun = false;
}
await RefreshRoutingsMenu();
await InboundDisplayStatus();
await ChangeSystemProxyAsync(_config.systemProxyItem.sysProxyType, true);
await ChangeSystemProxyAsync(_config.SystemProxyItem.SysProxyType, true);
}
public void InitUpdateView(Func<EViewAction, object?, Task<bool>>? updateView)
@ -248,10 +248,10 @@ namespace ServiceLib.ViewModels
private async Task RefreshServersMenu()
{
var lstModel = await AppHandler.Instance.ProfileItems(_config.subIndexId, "");
var lstModel = await AppHandler.Instance.ProfileItems(_config.SubIndexId, "");
_servers.Clear();
if (lstModel.Count > _config.guiItem.trayMenuServersLimit)
if (lstModel.Count > _config.GuiItem.TrayMenuServersLimit)
{
BlServers = false;
return;
@ -265,7 +265,7 @@ namespace ServiceLib.ViewModels
var item = new ComboItem() { ID = it.indexId, Text = name };
_servers.Add(item);
if (_config.indexId == it.indexId)
if (_config.IndexId == it.indexId)
{
SelectedServer = item;
}
@ -312,15 +312,15 @@ namespace ServiceLib.ViewModels
public async Task SetListenerType(ESysProxyType type)
{
if (_config.systemProxyItem.sysProxyType == type)
if (_config.SystemProxyItem.SysProxyType == type)
{
return;
}
_config.systemProxyItem.sysProxyType = type;
_config.SystemProxyItem.SysProxyType = type;
await ChangeSystemProxyAsync(type, true);
NoticeHandler.Instance.SendMessageEx($"{ResUI.TipChangeSystemProxy} - {_config.systemProxyItem.sysProxyType.ToString()}");
NoticeHandler.Instance.SendMessageEx($"{ResUI.TipChangeSystemProxy} - {_config.SystemProxyItem.SysProxyType.ToString()}");
SystemProxySelected = (int)_config.systemProxyItem.sysProxyType;
SystemProxySelected = (int)_config.SystemProxyItem.SysProxyType;
await ConfigHandler.SaveConfig(_config, false);
}
@ -347,7 +347,7 @@ namespace ServiceLib.ViewModels
public async Task RefreshRoutingsMenu()
{
_routingItems.Clear();
if (!_config.routingBasicItem.enableRoutingAdvanced)
if (!_config.RoutingBasicItem.EnableRoutingAdvanced)
{
BlRouting = false;
return;
@ -358,7 +358,7 @@ namespace ServiceLib.ViewModels
foreach (var item in routings)
{
_routingItems.Add(item);
if (item.id == _config.routingBasicItem.routingIndexId)
if (item.id == _config.RoutingBasicItem.RoutingIndexId)
{
SelectedRouting = item;
}
@ -382,7 +382,7 @@ namespace ServiceLib.ViewModels
{
return;
}
if (_config.routingBasicItem.routingIndexId == item.id)
if (_config.RoutingBasicItem.RoutingIndexId == item.id)
{
return;
}
@ -401,7 +401,7 @@ namespace ServiceLib.ViewModels
{
return;
}
if (_config.systemProxyItem.sysProxyType == (ESysProxyType)SystemProxySelected)
if (_config.SystemProxyItem.SysProxyType == (ESysProxyType)SystemProxySelected)
{
return;
}
@ -410,13 +410,13 @@ namespace ServiceLib.ViewModels
private async Task DoEnableTun(bool c)
{
if (_config.tunModeItem.enableTun != EnableTun)
if (_config.TunModeItem.EnableTun != EnableTun)
{
_config.tunModeItem.enableTun = EnableTun;
_config.TunModeItem.EnableTun = EnableTun;
// When running as a non-administrator, reboot to administrator mode
if (EnableTun && !AppHandler.Instance.IsAdministrator)
{
_config.tunModeItem.enableTun = false;
_config.TunModeItem.EnableTun = false;
Locator.Current.GetService<MainWindowViewModel>()?.RebootAsAdmin();
return;
}
@ -437,9 +437,9 @@ namespace ServiceLib.ViewModels
sb.Append($"[{EInboundProtocol.http}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.http)}]");
InboundDisplay = $"{ResUI.LabLocal}:{sb}";
if (_config.inbound[0].allowLANConn)
if (_config.Inbound[0].AllowLANConn)
{
if (_config.inbound[0].newPort4LAN)
if (_config.Inbound[0].NewPort4LAN)
{
StringBuilder sb2 = new();
sb2.Append($"[{EInboundProtocol.socks}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks2)}]");

View File

@ -28,21 +28,21 @@ namespace v2rayN.Desktop.ViewModels
private void RestoreUI()
{
ModifyTheme(_config.uiItem.colorModeDark);
ModifyTheme(_config.UiItem.ColorModeDark);
}
private void BindingUI()
{
ColorModeDark = _config.uiItem.colorModeDark;
CurrentFontSize = _config.uiItem.currentFontSize;
CurrentLanguage = _config.uiItem.currentLanguage;
ColorModeDark = _config.UiItem.ColorModeDark;
CurrentFontSize = _config.UiItem.CurrentFontSize;
CurrentLanguage = _config.UiItem.CurrentLanguage;
this.WhenAnyValue(x => x.ColorModeDark)
.Subscribe(c =>
{
if (_config.uiItem.colorModeDark != ColorModeDark)
if (_config.UiItem.ColorModeDark != ColorModeDark)
{
_config.uiItem.colorModeDark = ColorModeDark;
_config.UiItem.ColorModeDark = ColorModeDark;
ModifyTheme(ColorModeDark);
ConfigHandler.SaveConfig(_config);
}
@ -55,7 +55,7 @@ namespace v2rayN.Desktop.ViewModels
{
if (CurrentFontSize >= Global.MinFontSize)
{
_config.uiItem.currentFontSize = CurrentFontSize;
_config.UiItem.CurrentFontSize = CurrentFontSize;
double size = CurrentFontSize;
ModifyFontSize(size);
@ -68,9 +68,9 @@ namespace v2rayN.Desktop.ViewModels
y => y != null && !y.IsNullOrEmpty())
.Subscribe(c =>
{
if (Utils.IsNotEmpty(CurrentLanguage) && _config.uiItem.currentLanguage != CurrentLanguage)
if (Utils.IsNotEmpty(CurrentLanguage) && _config.UiItem.CurrentLanguage != CurrentLanguage)
{
_config.uiItem.currentLanguage = CurrentLanguage;
_config.UiItem.CurrentLanguage = CurrentLanguage;
Thread.CurrentThread.CurrentUICulture = new(CurrentLanguage);
ConfigHandler.SaveConfig(_config);
NoticeHandler.Instance.Enqueue(ResUI.NeedRebootTips);

View File

@ -25,10 +25,10 @@ namespace v2rayN.Desktop.Views
{
this.Bind(ViewModel, vm => vm.OperationMsg, v => v.txtMsg.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.url, v => v.txtWebDavUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.userName, v => v.txtWebDavUserName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.password, v => v.txtWebDavPassword.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.dirName, v => v.txtWebDavDirName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.Url, v => v.txtWebDavUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.UserName, v => v.txtWebDavUserName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.Password, v => v.txtWebDavPassword.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.DirName, v => v.txtWebDavDirName.Text).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.WebDavCheckCmd, v => v.menuWebDavCheck).DisposeWith(disposables);

View File

@ -83,7 +83,7 @@ namespace v2rayN.Desktop.Views
this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables);
switch (_config.uiItem.mainGirdOrientation)
switch (_config.UiItem.MainGirdOrientation)
{
case EGirdOrientation.Horizontal:
gridMain.IsVisible = true;
@ -124,7 +124,7 @@ namespace v2rayN.Desktop.Views
}
menuAddServerViaScan.IsVisible = false;
switch (_config.uiItem.mainGirdOrientation)
switch (_config.UiItem.MainGirdOrientation)
{
case EGirdOrientation.Horizontal:
tabProfiles.Content ??= new ProfilesView(this);
@ -360,7 +360,7 @@ namespace v2rayN.Desktop.Views
public void ShowHideWindow(bool? blShow)
{
var bl = blShow ?? !_config.uiItem.showInTaskbar;
var bl = blShow ?? !_config.UiItem.ShowInTaskbar;
if (bl)
{
this.Show();
@ -375,46 +375,46 @@ namespace v2rayN.Desktop.Views
{
this.Hide();
}
_config.uiItem.showInTaskbar = bl;
_config.UiItem.ShowInTaskbar = bl;
}
private void RestoreUI()
{
if (_config.uiItem.mainWidth > 0 && _config.uiItem.mainHeight > 0)
if (_config.UiItem.MainWidth > 0 && _config.UiItem.MainHeight > 0)
{
Width = _config.uiItem.mainWidth;
Height = _config.uiItem.mainHeight;
Width = _config.UiItem.MainWidth;
Height = _config.UiItem.MainHeight;
}
if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0)
if (_config.UiItem.MainGirdHeight1 > 0 && _config.UiItem.MainGirdHeight2 > 0)
{
if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal)
if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Horizontal)
{
gridMain.ColumnDefinitions[0].Width = new GridLength(_config.uiItem.mainGirdHeight1, GridUnitType.Star);
gridMain.ColumnDefinitions[2].Width = new GridLength(_config.uiItem.mainGirdHeight2, GridUnitType.Star);
gridMain.ColumnDefinitions[0].Width = new GridLength(_config.UiItem.MainGirdHeight1, GridUnitType.Star);
gridMain.ColumnDefinitions[2].Width = new GridLength(_config.UiItem.MainGirdHeight2, GridUnitType.Star);
}
else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical)
else if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Vertical)
{
gridMain1.RowDefinitions[0].Height = new GridLength(_config.uiItem.mainGirdHeight1, GridUnitType.Star);
gridMain1.RowDefinitions[2].Height = new GridLength(_config.uiItem.mainGirdHeight2, GridUnitType.Star);
gridMain1.RowDefinitions[0].Height = new GridLength(_config.UiItem.MainGirdHeight1, GridUnitType.Star);
gridMain1.RowDefinitions[2].Height = new GridLength(_config.UiItem.MainGirdHeight2, GridUnitType.Star);
}
}
}
private void StorageUI()
{
_config.uiItem.mainWidth = Utils.ToInt(this.Width);
_config.uiItem.mainHeight = Utils.ToInt(this.Height);
_config.UiItem.MainWidth = Utils.ToInt(this.Width);
_config.UiItem.MainHeight = Utils.ToInt(this.Height);
if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal)
if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Horizontal)
{
_config.uiItem.mainGirdHeight1 = Math.Ceiling(gridMain.ColumnDefinitions[0].ActualWidth + 0.1);
_config.uiItem.mainGirdHeight2 = Math.Ceiling(gridMain.ColumnDefinitions[2].ActualWidth + 0.1);
_config.UiItem.MainGirdHeight1 = Math.Ceiling(gridMain.ColumnDefinitions[0].ActualWidth + 0.1);
_config.UiItem.MainGirdHeight2 = Math.Ceiling(gridMain.ColumnDefinitions[2].ActualWidth + 0.1);
}
else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical)
else if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Vertical)
{
_config.uiItem.mainGirdHeight1 = Math.Ceiling(gridMain1.RowDefinitions[0].ActualHeight + 0.1);
_config.uiItem.mainGirdHeight2 = Math.Ceiling(gridMain1.RowDefinitions[2].ActualHeight + 0.1);
_config.UiItem.MainGirdHeight1 = Math.Ceiling(gridMain1.RowDefinitions[0].ActualHeight + 0.1);
_config.UiItem.MainGirdHeight2 = Math.Ceiling(gridMain1.RowDefinitions[2].ActualHeight + 0.1);
}
ConfigHandler.SaveConfig(_config);
}

View File

@ -24,7 +24,7 @@ namespace v2rayN.Desktop.Views
{
clbdestOverride.Items.Add(it);
});
_config.inbound[0].destOverride?.ForEach(it =>
_config.Inbound[0].DestOverride?.ForEach(it =>
{
clbdestOverride.SelectedItems.Add(it);
});

View File

@ -189,7 +189,7 @@ namespace v2rayN.Desktop.Views
private void LstProfiles_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
{
if (_config.uiItem.doubleClick2Activate)
if (_config.UiItem.DoubleClick2Activate)
{
ViewModel?.SetDefaultServer();
}
@ -325,7 +325,7 @@ namespace v2rayN.Desktop.Views
private void RestoreUI()
{
var lvColumnItem = _config.uiItem.mainColumnItem.OrderBy(t => t.Index).ToList();
var lvColumnItem = _config.UiItem.MainColumnItem.OrderBy(t => t.Index).ToList();
var displayIndex = 0;
foreach (var item in lvColumnItem)
{
@ -348,7 +348,7 @@ namespace v2rayN.Desktop.Views
}
if (item.Name.StartsWith("to"))
{
if (!_config.guiItem.enableStatistics)
if (!_config.GuiItem.EnableStatistics)
{
item2.IsVisible = false;
}
@ -375,7 +375,7 @@ namespace v2rayN.Desktop.Views
Index = item2.DisplayIndex
});
}
_config.uiItem.mainColumnItem = lvColumnItem;
_config.UiItem.MainColumnItem = lvColumnItem;
ConfigHandler.SaveConfig(_config);
}

View File

@ -76,7 +76,7 @@ namespace v2rayN.Desktop.Views
{
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow.Icon = AvaUtils.GetAppIcon(_config.systemProxyItem.sysProxyType);
desktop.MainWindow.Icon = AvaUtils.GetAppIcon(_config.SystemProxyItem.SysProxyType);
}
}

View File

@ -10,7 +10,7 @@ namespace v2rayN.Converters
{
try
{
var fontFamily = AppHandler.Instance.Config.uiItem.currentFontFamily;
var fontFamily = AppHandler.Instance.Config.UiItem.CurrentFontFamily;
if (Utils.IsNotEmpty(fontFamily))
{
var fontPath = Utils.GetFontsPath();

View File

@ -37,8 +37,8 @@ namespace v2rayN.Handler
private void Init()
{
_hotkeyTriggerDic.Clear();
if (_config.globalHotkeys == null) return;
foreach (var item in _config.globalHotkeys)
if (_config.GlobalHotkeys == null) return;
foreach (var item in _config.GlobalHotkeys)
{
if (item.KeyCode != null && (Key)item.KeyCode != Key.None)
{
@ -50,12 +50,12 @@ namespace v2rayN.Handler
key = (key << 16) | (int)modifiers;
if (!_hotkeyTriggerDic.ContainsKey(key))
{
_hotkeyTriggerDic.Add(key, new() { item.eGlobalHotkey });
_hotkeyTriggerDic.Add(key, new() { item.EGlobalHotkey });
}
else
{
if (!_hotkeyTriggerDic[key].Contains(item.eGlobalHotkey))
_hotkeyTriggerDic[key].Add(item.eGlobalHotkey);
if (!_hotkeyTriggerDic[key].Contains(item.EGlobalHotkey))
_hotkeyTriggerDic[key].Add(item.EGlobalHotkey);
}
}
}

View File

@ -13,7 +13,7 @@ namespace v2rayN.Handler
{
try
{
var index = (int)config.systemProxyItem.sysProxyType;
var index = (int)config.SystemProxyItem.SysProxyType;
//Load from routing setting
var createdIcon = await GetNotifyIcon4Routing(config);
@ -46,7 +46,7 @@ namespace v2rayN.Handler
public System.Windows.Media.ImageSource GetAppIcon(Config config)
{
var index = (int)config.systemProxyItem.sysProxyType + 1;
var index = (int)config.SystemProxyItem.SysProxyType + 1;
return BitmapFrame.Create(new Uri($"pack://application:,,,/Resources/NotifyIcon{index}.ico", UriKind.RelativeOrAbsolute));
}
@ -54,7 +54,7 @@ namespace v2rayN.Handler
{
try
{
if (!config.routingBasicItem.enableRoutingAdvanced)
if (!config.RoutingBasicItem.EnableRoutingAdvanced)
{
return null;
}
@ -66,7 +66,7 @@ namespace v2rayN.Handler
}
Color color = ColorTranslator.FromHtml("#3399CC");
int index = (int)config.systemProxyItem.sysProxyType;
int index = (int)config.SystemProxyItem.SysProxyType;
if (index > 0)
{
color = (new[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];

View File

@ -52,12 +52,12 @@ namespace v2rayN.ViewModels
}
else
{
ModifyTheme(_config.uiItem.colorModeDark);
ModifyTheme(_config.UiItem.ColorModeDark);
}
if (!_config.uiItem.colorPrimaryName.IsNullOrEmpty())
if (!_config.UiItem.ColorPrimaryName.IsNullOrEmpty())
{
var swatch = new SwatchesProvider().Swatches.FirstOrDefault(t => t.Name == _config.uiItem.colorPrimaryName);
var swatch = new SwatchesProvider().Swatches.FirstOrDefault(t => t.Name == _config.UiItem.ColorPrimaryName);
if (swatch != null
&& swatch.ExemplarHue != null
&& swatch.ExemplarHue?.Color != null)
@ -69,24 +69,24 @@ namespace v2rayN.ViewModels
private void BindingUI()
{
ColorModeDark = _config.uiItem.colorModeDark;
FollowSystemTheme = _config.uiItem.followSystemTheme;
ColorModeDark = _config.UiItem.ColorModeDark;
FollowSystemTheme = _config.UiItem.FollowSystemTheme;
_swatches.AddRange(new SwatchesProvider().Swatches);
if (!_config.uiItem.colorPrimaryName.IsNullOrEmpty())
if (!_config.UiItem.ColorPrimaryName.IsNullOrEmpty())
{
SelectedSwatch = _swatches.FirstOrDefault(t => t.Name == _config.uiItem.colorPrimaryName);
SelectedSwatch = _swatches.FirstOrDefault(t => t.Name == _config.UiItem.ColorPrimaryName);
}
CurrentFontSize = _config.uiItem.currentFontSize;
CurrentLanguage = _config.uiItem.currentLanguage;
CurrentFontSize = _config.UiItem.CurrentFontSize;
CurrentLanguage = _config.UiItem.CurrentLanguage;
this.WhenAnyValue(
x => x.ColorModeDark,
y => y == true)
.Subscribe(c =>
{
if (_config.uiItem.colorModeDark != ColorModeDark)
if (_config.UiItem.ColorModeDark != ColorModeDark)
{
_config.uiItem.colorModeDark = ColorModeDark;
_config.UiItem.ColorModeDark = ColorModeDark;
ModifyTheme(ColorModeDark);
ConfigHandler.SaveConfig(_config);
}
@ -96,9 +96,9 @@ namespace v2rayN.ViewModels
y => y == true)
.Subscribe(c =>
{
if (_config.uiItem.followSystemTheme != FollowSystemTheme)
if (_config.UiItem.FollowSystemTheme != FollowSystemTheme)
{
_config.uiItem.followSystemTheme = FollowSystemTheme;
_config.UiItem.FollowSystemTheme = FollowSystemTheme;
ConfigHandler.SaveConfig(_config);
if (FollowSystemTheme)
{
@ -123,9 +123,9 @@ namespace v2rayN.ViewModels
{
return;
}
if (_config.uiItem.colorPrimaryName != SelectedSwatch?.Name)
if (_config.UiItem.ColorPrimaryName != SelectedSwatch?.Name)
{
_config.uiItem.colorPrimaryName = SelectedSwatch?.Name;
_config.UiItem.ColorPrimaryName = SelectedSwatch?.Name;
ChangePrimaryColor(SelectedSwatch.ExemplarHue.Color);
ConfigHandler.SaveConfig(_config);
}
@ -138,7 +138,7 @@ namespace v2rayN.ViewModels
{
if (CurrentFontSize >= Global.MinFontSize)
{
_config.uiItem.currentFontSize = CurrentFontSize;
_config.UiItem.CurrentFontSize = CurrentFontSize;
double size = (long)CurrentFontSize;
Application.Current.Resources["StdFontSize"] = size;
Application.Current.Resources["StdFontSize1"] = size + 1;
@ -153,9 +153,9 @@ namespace v2rayN.ViewModels
y => y != null && !y.IsNullOrEmpty())
.Subscribe(c =>
{
if (Utils.IsNotEmpty(CurrentLanguage) && _config.uiItem.currentLanguage != CurrentLanguage)
if (Utils.IsNotEmpty(CurrentLanguage) && _config.UiItem.CurrentLanguage != CurrentLanguage)
{
_config.uiItem.currentLanguage = CurrentLanguage;
_config.UiItem.CurrentLanguage = CurrentLanguage;
Thread.CurrentThread.CurrentUICulture = new(CurrentLanguage);
ConfigHandler.SaveConfig(_config);
NoticeHandler.Instance.Enqueue(ResUI.NeedRebootTips);
@ -189,7 +189,7 @@ namespace v2rayN.ViewModels
var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle());
hwndSource.AddHook((IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) =>
{
if (config.uiItem.followSystemTheme)
if (config.UiItem.FollowSystemTheme)
{
const int WM_SETTINGCHANGE = 0x001A;
if (msg == WM_SETTINGCHANGE)

View File

@ -34,7 +34,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.EditServerCmd, v => v.btnEdit).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SaveServerCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -219,7 +219,7 @@ namespace v2rayN.Views
});
this.Title = $"{profileItem.configType}";
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -18,10 +18,10 @@ namespace v2rayN.Views
{
this.Bind(ViewModel, vm => vm.OperationMsg, v => v.txtMsg.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.url, v => v.txtWebDavUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.userName, v => v.txtWebDavUserName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.password, v => v.txtWebDavPassword.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.dirName, v => v.txtWebDavDirName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.Url, v => v.txtWebDavUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.UserName, v => v.txtWebDavUserName.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.Password, v => v.txtWebDavPassword.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource.DirName, v => v.txtWebDavDirName.Text).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.WebDavCheckCmd, v => v.menuWebDavCheck).DisposeWith(disposables);

View File

@ -50,7 +50,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4V2rayCmd, v => v.btnImportDefConfig4V2ray).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4SingboxCmd, v => v.btnImportDefConfig4Singbox).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -17,7 +17,7 @@ namespace v2rayN.Views
this.Owner = Application.Current.MainWindow;
_config = AppHandler.Instance.Config;
_config.globalHotkeys ??= new List<KeyEventItem>();
_config.GlobalHotkeys ??= new List<KeyEventItem>();
btnReset.Click += btnReset_Click;
btnSave.Click += btnSave_Click;
@ -30,7 +30,7 @@ namespace v2rayN.Views
HotkeyHandler.Instance.IsPause = true;
this.Closing += (s, e) => HotkeyHandler.Instance.IsPause = false;
WindowsUtils.SetDarkBorder(this, _config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : _config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, _config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : _config.UiItem.ColorModeDark);
InitData();
}
@ -38,11 +38,11 @@ namespace v2rayN.Views
{
_TextBoxKeyEventItem = new()
{
{ txtGlobalHotkey0,GetKeyEventItemByEGlobalHotkey(_config.globalHotkeys,EGlobalHotkey.ShowForm) },
{ txtGlobalHotkey1,GetKeyEventItemByEGlobalHotkey(_config.globalHotkeys,EGlobalHotkey.SystemProxyClear) },
{ txtGlobalHotkey2,GetKeyEventItemByEGlobalHotkey(_config.globalHotkeys,EGlobalHotkey.SystemProxySet) },
{ txtGlobalHotkey3,GetKeyEventItemByEGlobalHotkey(_config.globalHotkeys,EGlobalHotkey.SystemProxyUnchanged)},
{ txtGlobalHotkey4,GetKeyEventItemByEGlobalHotkey(_config.globalHotkeys,EGlobalHotkey.SystemProxyPac)}
{ txtGlobalHotkey0,GetKeyEventItemByEGlobalHotkey(_config.GlobalHotkeys,EGlobalHotkey.ShowForm) },
{ txtGlobalHotkey1,GetKeyEventItemByEGlobalHotkey(_config.GlobalHotkeys,EGlobalHotkey.SystemProxyClear) },
{ txtGlobalHotkey2,GetKeyEventItemByEGlobalHotkey(_config.GlobalHotkeys,EGlobalHotkey.SystemProxySet) },
{ txtGlobalHotkey3,GetKeyEventItemByEGlobalHotkey(_config.GlobalHotkeys,EGlobalHotkey.SystemProxyUnchanged)},
{ txtGlobalHotkey4,GetKeyEventItemByEGlobalHotkey(_config.GlobalHotkeys,EGlobalHotkey.SystemProxyPac)}
};
BindingData();
}
@ -61,9 +61,9 @@ namespace v2rayN.Views
private KeyEventItem GetKeyEventItemByEGlobalHotkey(List<KeyEventItem> KEList, EGlobalHotkey eg)
{
return JsonUtils.DeepCopy(KEList.Find((it) => it.eGlobalHotkey == eg) ?? new()
return JsonUtils.DeepCopy(KEList.Find((it) => it.EGlobalHotkey == eg) ?? new()
{
eGlobalHotkey = eg,
EGlobalHotkey = eg,
Control = false,
Alt = false,
Shift = false,
@ -101,7 +101,7 @@ namespace v2rayN.Views
private void btnSave_Click(object sender, RoutedEventArgs e)
{
_config.globalHotkeys = _TextBoxKeyEventItem.Values.ToList();
_config.GlobalHotkeys = _TextBoxKeyEventItem.Values.ToList();
if ( ConfigHandler.SaveConfig(_config, false).Result == 0)
{

View File

@ -41,7 +41,7 @@ namespace v2rayN.Views
Locator.CurrentMutable.RegisterLazySingleton(() => ViewModel, typeof(MainWindowViewModel));
WindowsHandler.Instance.RegisterGlobalHotkey(_config, OnHotkeyHandler, null);
switch (_config.uiItem.mainGirdOrientation)
switch (_config.UiItem.MainGirdOrientation)
{
case EGirdOrientation.Horizontal:
tabProfiles.Content ??= new ProfilesView();
@ -105,7 +105,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables);
switch (_config.uiItem.mainGirdOrientation)
switch (_config.UiItem.MainGirdOrientation)
{
case EGirdOrientation.Horizontal:
gridMain.Visibility = Visibility.Visible;
@ -135,7 +135,7 @@ namespace v2rayN.Views
this.Title = $"{Utils.GetVersion()} - {(AppHandler.Instance.IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}";
if (!_config.guiItem.enableHWA)
if (!_config.GuiItem.EnableHWA)
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
@ -362,7 +362,7 @@ namespace v2rayN.Views
public void ShowHideWindow(bool? blShow)
{
var bl = blShow ?? !_config.uiItem.showInTaskbar;
var bl = blShow ?? !_config.UiItem.ShowInTaskbar;
if (bl)
{
Application.Current.MainWindow.Show();
@ -377,50 +377,50 @@ namespace v2rayN.Views
{
Application.Current.MainWindow.Hide();
}
_config.uiItem.showInTaskbar = bl;
_config.UiItem.ShowInTaskbar = bl;
}
private void RestoreUI()
{
if (_config.uiItem.mainWidth > 0 && _config.uiItem.mainHeight > 0)
if (_config.UiItem.MainWidth > 0 && _config.UiItem.MainHeight > 0)
{
Width = _config.uiItem.mainWidth;
Height = _config.uiItem.mainHeight;
Width = _config.UiItem.MainWidth;
Height = _config.UiItem.MainHeight;
}
var maxWidth = SystemParameters.WorkArea.Width;
var maxHeight = SystemParameters.WorkArea.Height;
if (Width > maxWidth) Width = maxWidth;
if (Height > maxHeight) Height = maxHeight;
if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0)
if (_config.UiItem.MainGirdHeight1 > 0 && _config.UiItem.MainGirdHeight2 > 0)
{
if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal)
if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Horizontal)
{
gridMain.ColumnDefinitions[0].Width = new GridLength(_config.uiItem.mainGirdHeight1, GridUnitType.Star);
gridMain.ColumnDefinitions[2].Width = new GridLength(_config.uiItem.mainGirdHeight2, GridUnitType.Star);
gridMain.ColumnDefinitions[0].Width = new GridLength(_config.UiItem.MainGirdHeight1, GridUnitType.Star);
gridMain.ColumnDefinitions[2].Width = new GridLength(_config.UiItem.MainGirdHeight2, GridUnitType.Star);
}
else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical)
else if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Vertical)
{
gridMain1.RowDefinitions[0].Height = new GridLength(_config.uiItem.mainGirdHeight1, GridUnitType.Star);
gridMain1.RowDefinitions[2].Height = new GridLength(_config.uiItem.mainGirdHeight2, GridUnitType.Star);
gridMain1.RowDefinitions[0].Height = new GridLength(_config.UiItem.MainGirdHeight1, GridUnitType.Star);
gridMain1.RowDefinitions[2].Height = new GridLength(_config.UiItem.MainGirdHeight2, GridUnitType.Star);
}
}
}
private void StorageUI()
{
_config.uiItem.mainWidth = Utils.ToInt(this.Width);
_config.uiItem.mainHeight = Utils.ToInt(this.Height);
_config.UiItem.MainWidth = Utils.ToInt(this.Width);
_config.UiItem.MainHeight = Utils.ToInt(this.Height);
if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal)
if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Horizontal)
{
_config.uiItem.mainGirdHeight1 = Math.Ceiling(gridMain.ColumnDefinitions[0].ActualWidth + 0.1);
_config.uiItem.mainGirdHeight2 = Math.Ceiling(gridMain.ColumnDefinitions[2].ActualWidth + 0.1);
_config.UiItem.MainGirdHeight1 = Math.Ceiling(gridMain.ColumnDefinitions[0].ActualWidth + 0.1);
_config.UiItem.MainGirdHeight2 = Math.Ceiling(gridMain.ColumnDefinitions[2].ActualWidth + 0.1);
}
else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical)
else if (_config.UiItem.MainGirdOrientation == EGirdOrientation.Vertical)
{
_config.uiItem.mainGirdHeight1 = Math.Ceiling(gridMain1.RowDefinitions[0].ActualHeight + 0.1);
_config.uiItem.mainGirdHeight2 = Math.Ceiling(gridMain1.RowDefinitions[2].ActualHeight + 0.1);
_config.UiItem.MainGirdHeight1 = Math.Ceiling(gridMain1.RowDefinitions[0].ActualHeight + 0.1);
_config.UiItem.MainGirdHeight2 = Math.Ceiling(gridMain1.RowDefinitions[2].ActualHeight + 0.1);
}
}

View File

@ -26,7 +26,7 @@ namespace v2rayN.Views
{
clbdestOverride.Items.Add(it);
});
_config.inbound[0].destOverride?.ForEach(it =>
_config.Inbound[0].DestOverride?.ForEach(it =>
{
clbdestOverride.SelectedItems.Add(it);
});
@ -180,7 +180,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)
@ -206,7 +206,7 @@ namespace v2rayN.Views
{
files.AddRange(Directory.GetFiles(path, pattern));
}
var culture = _config.uiItem.currentLanguage == Global.Languages[0] ? "zh-cn" : "en-us";
var culture = _config.UiItem.CurrentLanguage == Global.Languages[0] ? "zh-cn" : "en-us";
var culture2 = "en-us";
foreach (var ttf in files)
{

View File

@ -32,7 +32,7 @@ namespace v2rayN.Views
lstProfiles.LoadingRow += LstProfiles_LoadingRow;
menuSelectAll.Click += menuSelectAll_Click;
if (_config.uiItem.enableDragDropSort)
if (_config.UiItem.EnableDragDropSort)
{
lstProfiles.AllowDrop = true;
lstProfiles.PreviewMouseLeftButtonDown += LstProfiles_PreviewMouseLeftButtonDown;
@ -195,7 +195,7 @@ namespace v2rayN.Views
private void LstProfiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (_config.uiItem.doubleClick2Activate)
if (_config.UiItem.DoubleClick2Activate)
{
ViewModel?.SetDefaultServer();
}
@ -321,7 +321,7 @@ namespace v2rayN.Views
private void RestoreUI()
{
var lvColumnItem = _config.uiItem.mainColumnItem.OrderBy(t => t.Index).ToList();
var lvColumnItem = _config.UiItem.MainColumnItem.OrderBy(t => t.Index).ToList();
var displayIndex = 0;
foreach (var item in lvColumnItem)
{
@ -340,7 +340,7 @@ namespace v2rayN.Views
}
if (item.Name.StartsWith("to"))
{
if (!_config.guiItem.enableStatistics)
if (!_config.GuiItem.EnableStatistics)
{
item2.Visibility = Visibility.Hidden;
}
@ -363,7 +363,7 @@ namespace v2rayN.Views
Index = item2.DisplayIndex
});
}
_config.uiItem.mainColumnItem = lvColumnItem;
_config.UiItem.MainColumnItem = lvColumnItem;
ConfigHandler.SaveConfig(_config);
}

View File

@ -58,7 +58,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -60,7 +60,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -66,7 +66,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -37,7 +37,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@ -31,7 +31,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SubEditCmd, v => v.menuSubEdit).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SubShareCmd, v => v.menuSubShare).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.uiItem.followSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.uiItem.colorModeDark);
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.FollowSystemTheme ? !WindowsUtils.IsLightTheme() : AppHandler.Instance.Config.UiItem.ColorModeDark);
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)