Code optimization, function asynchrony

This commit is contained in:
2dust
2024-10-21 09:45:33 +08:00
parent 394b657fc9
commit a866017b4c
21 changed files with 518 additions and 514 deletions
+68 -103
View File
@@ -5,86 +5,55 @@
/// </summary>
public class CoreConfigHandler
{
public static int GenerateClientConfig(ProfileItem node, string? fileName, out string msg, out string content)
public static async Task<RetResult> GenerateClientConfig(ProfileItem node, string? fileName)
{
content = string.Empty;
try
{
if (node == null)
{
msg = ResUI.CheckServerSettings;
return -1;
}
var config = AppHandler.Instance.Config;
var config = AppHandler.Instance.Config;
var result = new RetResult(-1);
msg = ResUI.InitialConfiguration;
if (node.configType == EConfigType.Custom)
if (node.configType == EConfigType.Custom)
{
if (node.coreType is ECoreType.mihomo)
{
if (node.coreType is ECoreType.mihomo)
{
var configGenClash = new CoreConfigClashService(config);
return configGenClash.GenerateClientCustomConfig(node, fileName, out msg);
}
if (node.coreType is ECoreType.sing_box)
{
var configGenSingbox = new CoreConfigSingboxService(config);
return configGenSingbox.GenerateClientCustomConfig(node, fileName, out msg);
}
else
{
return GenerateClientCustomConfig(node, fileName, out msg);
}
result = await new CoreConfigClashService(config).GenerateClientCustomConfig(node, fileName);
}
else if (AppHandler.Instance.GetCoreType(node, node.configType) == ECoreType.sing_box)
if (node.coreType is ECoreType.sing_box)
{
var configGenSingbox = new CoreConfigSingboxService(config);
if (configGenSingbox.GenerateClientConfigContent(node, out SingboxConfig? singboxConfig, out msg) != 0)
{
return -1;
}
if (Utils.IsNullOrEmpty(fileName))
{
content = JsonUtils.Serialize(singboxConfig);
}
else
{
JsonUtils.ToFile(singboxConfig, fileName, false);
}
result = await new CoreConfigSingboxService(config).GenerateClientCustomConfig(node, fileName);
}
else
{
var coreConfigV2ray = new CoreConfigV2rayService(config);
if (coreConfigV2ray.GenerateClientConfigContent(node, out V2rayConfig? v2rayConfig, out msg) != 0)
{
return -1;
}
if (Utils.IsNullOrEmpty(fileName))
{
content = JsonUtils.Serialize(v2rayConfig);
}
else
{
JsonUtils.ToFile(v2rayConfig, fileName, false);
}
result = await GenerateClientCustomConfig(node, fileName);
}
}
catch (Exception ex)
else if (AppHandler.Instance.GetCoreType(node, node.configType) == ECoreType.sing_box)
{
Logging.SaveLog("GenerateClientConfig", ex);
msg = ResUI.FailedGenDefaultConfiguration;
return -1;
result = await new CoreConfigSingboxService(config).GenerateClientConfigContent(node);
}
return 0;
else
{
result = await new CoreConfigV2rayService(config).GenerateClientConfigContent(node);
}
if (result.Code != 0)
{
return result;
}
if (Utils.IsNotEmpty(fileName) && result.Data != null)
{
await File.WriteAllTextAsync(fileName, result.Data.ToString());
}
return result;
}
private static int GenerateClientCustomConfig(ProfileItem node, string? fileName, out string msg)
private static async Task<RetResult> GenerateClientCustomConfig(ProfileItem node, string? fileName)
{
var ret = new RetResult(-1);
try
{
if (node == null || fileName is null)
{
msg = ResUI.CheckServerSettings;
return -1;
ret.Msg = ResUI.CheckServerSettings;
return ret;
}
if (File.Exists(fileName))
@@ -100,8 +69,8 @@
}
if (!File.Exists(addressFileName))
{
msg = ResUI.FailedGenDefaultConfiguration;
return -1;
ret.Msg = ResUI.FailedGenDefaultConfiguration;
return ret;
}
File.Copy(addressFileName, fileName);
File.SetAttributes(fileName, FileAttributes.Normal); //Copy will keep the attributes of addressFileName, so we need to add write permissions to fileName just in case of addressFileName is a read-only file.
@@ -109,63 +78,59 @@
//check again
if (!File.Exists(fileName))
{
msg = ResUI.FailedGenDefaultConfiguration;
return -1;
ret.Msg = ResUI.FailedGenDefaultConfiguration;
return ret;
}
msg = string.Format(ResUI.SuccessfulConfiguration, "");
ret.Msg = string.Format(ResUI.SuccessfulConfiguration, "");
ret.Code = 0;
return ret;
}
catch (Exception ex)
{
Logging.SaveLog("GenerateClientCustomConfig", ex);
msg = ResUI.FailedGenDefaultConfiguration;
return -1;
ret.Msg = ResUI.FailedGenDefaultConfiguration;
return ret;
}
return 0;
}
public static int GenerateClientSpeedtestConfig(Config config, string fileName, List<ServerTestItem> selecteds, ECoreType coreType, out string msg)
public static async Task<RetResult> GenerateClientSpeedtestConfig(Config config, string fileName, List<ServerTestItem> selecteds, ECoreType coreType)
{
var result = new RetResult(-1);
if (coreType == ECoreType.sing_box)
{
if (new CoreConfigSingboxService(config).GenerateClientSpeedtestConfig(selecteds, out SingboxConfig? singboxConfig, out msg) != 0)
{
return -1;
}
JsonUtils.ToFile(singboxConfig, fileName, false);
}
else
{
if (new CoreConfigV2rayService(config).GenerateClientSpeedtestConfig(selecteds, out V2rayConfig? v2rayConfig, out msg) != 0)
{
return -1;
}
JsonUtils.ToFile(v2rayConfig, fileName, false);
}
return 0;
}
public static int GenerateClientMultipleLoadConfig(Config config, string fileName, List<ProfileItem> selecteds, ECoreType coreType, out string msg)
{
msg = ResUI.CheckServerSettings;
if (coreType == ECoreType.sing_box)
{
if (new CoreConfigSingboxService(config).GenerateClientMultipleLoadConfig(selecteds, out SingboxConfig? singboxConfig, out msg) != 0)
{
return -1;
}
JsonUtils.ToFile(singboxConfig, fileName, false);
result = await new CoreConfigSingboxService(config).GenerateClientSpeedtestConfig(selecteds);
}
else if (coreType == ECoreType.Xray)
{
if (new CoreConfigV2rayService(config).GenerateClientMultipleLoadConfig(selecteds, out V2rayConfig? v2rayConfig, out msg) != 0)
{
return -1;
}
JsonUtils.ToFile(v2rayConfig, fileName, false);
result = await new CoreConfigV2rayService(config).GenerateClientSpeedtestConfig(selecteds);
}
if (result.Code != 0)
{
return result;
}
await File.WriteAllTextAsync(fileName, result.Data.ToString());
return result;
}
public static async Task<RetResult> GenerateClientMultipleLoadConfig(Config config, string fileName, List<ProfileItem> selecteds, ECoreType coreType)
{
var result = new RetResult(-1);
if (coreType == ECoreType.sing_box)
{
result = await new CoreConfigSingboxService(config).GenerateClientMultipleLoadConfig(selecteds);
}
else if (coreType == ECoreType.Xray)
{
result = await new CoreConfigV2rayService(config).GenerateClientMultipleLoadConfig(selecteds);
}
return 0;
if (result.Code != 0)
{
return result;
}
await File.WriteAllTextAsync(fileName, result.Data.ToString());
return result;
}
}
}