Skip to content

Commit

Permalink
Improve and refactor the code
Browse files Browse the repository at this point in the history
  • Loading branch information
2dust committed Jun 21, 2024
1 parent 522571f commit 74a0a93
Show file tree
Hide file tree
Showing 9 changed files with 291 additions and 97 deletions.
132 changes: 36 additions & 96 deletions v2rayN/v2rayN/Handler/ConfigHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1184,49 +1184,33 @@ private static int AddBatchServers4Custom(Config config, string strData, string
{
return -1;
}
var subRemarks = LazyConfig.Instance.GetSubItem(subid)?.remarks;

//判断str是否包含s的任意一个字符串
static bool Contains(string str, params string[] s)
List<ProfileItem>? lstProfiles = null;
//Is sing-box array configuration
if (lstProfiles is null || lstProfiles.Count <= 0)
{
foreach (var item in s)
{
if (str.Contains(item, StringComparison.OrdinalIgnoreCase)) return true;
}
return false;
lstProfiles = SingboxFmt.ResolveFullArray(strData, subRemarks);
}

//Is v2ray array configuration
var configObjects = JsonUtils.Deserialize<Object[]>(strData);
if (configObjects != null && configObjects.Length > 0)
if (lstProfiles is null || lstProfiles.Count <= 0)
{
lstProfiles = V2rayFmt.ResolveFullArray(strData, subRemarks);
}
if (lstProfiles != null && lstProfiles.Count > 0)
{
if (isSub && !Utils.IsNullOrEmpty(subid))
{
RemoveServerViaSubid(config, subid, isSub);
}

int count = 0;
foreach (var configObject in configObjects)
foreach (var it in lstProfiles)
{
var objectString = JsonUtils.Serialize(configObject);
var v2rayCon = JsonUtils.Deserialize<V2rayConfig>(objectString);
if (v2rayCon?.inbounds?.Count > 0 && v2rayCon.outbounds?.Count > 0)
it.subid = subid;
it.isSub = isSub;
if (AddCustomServer(config, it, true) == 0)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, objectString);

var profileIt = new ProfileItem
{
coreType = ECoreType.Xray,
address = fileName,
remarks = v2rayCon.remarks ?? "v2ray_custom",
subid = subid,
isSub = isSub
};

if (AddCustomServer(config, profileIt, true) == 0)
{
count++;
}
count++;
}
}
if (count > 0)
Expand All @@ -1235,58 +1219,39 @@ static bool Contains(string str, params string[] s)
}
}

ProfileItem profileItem = new();
ProfileItem? profileItem = null;
//Is sing-box configuration
if (profileItem is null)
{
profileItem = SingboxFmt.ResolveFull(strData, subRemarks);
}
//Is v2ray configuration
var v2rayConfig = JsonUtils.Deserialize<V2rayConfig>(strData);
if (v2rayConfig?.inbounds?.Count > 0
&& v2rayConfig.outbounds?.Count > 0)
if (profileItem is null)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, strData);

profileItem.coreType = ECoreType.Xray;
profileItem.address = fileName;
profileItem.remarks = v2rayConfig.remarks ?? "v2ray_custom";
profileItem = V2rayFmt.ResolveFull(strData, subRemarks);
}
//Is Clash configuration
else if (Contains(strData, "port", "socks-port", "proxies"))
if (profileItem is null)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.yaml");
File.WriteAllText(fileName, strData);

profileItem.coreType = ECoreType.mihomo;
profileItem.address = fileName;
profileItem.remarks = "clash_custom";
profileItem = ClashFmt.ResolveFull(strData, subRemarks);
}
//Is hysteria configuration
else if (Contains(strData, "server", "up", "down", "listen", "<html>", "<body>"))
if (profileItem is null)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, strData);

profileItem.coreType = ECoreType.hysteria;
profileItem.address = fileName;
profileItem.remarks = "hysteria_custom";
profileItem = Hysteria2Fmt.ResolveFull2(strData, subRemarks);
}
if (profileItem is null)
{
profileItem = Hysteria2Fmt.ResolveFull(strData, subRemarks);
}
//Is naiveproxy configuration
else if (Contains(strData, "listen", "proxy", "<html>", "<body>"))
if (profileItem is null)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, strData);

profileItem.coreType = ECoreType.naiveproxy;
profileItem.address = fileName;
profileItem.remarks = "naiveproxy_custom";
profileItem = NaiveproxyFmt.ResolveFull(strData, subRemarks);
}
//Is Other configuration
else
if (profileItem is null || Utils.IsNullOrEmpty(profileItem.address))
{
return -1;
//var fileName = Utile.GetTempPath($"{Utile.GetGUID(false)}.txt");
//File.WriteAllText(fileName, strData);

//profileItem.address = fileName;
//profileItem.remarks = "other_custom";
}

if (isSub && !Utils.IsNullOrEmpty(subid))
Expand All @@ -1299,12 +1264,6 @@ static bool Contains(string str, params string[] s)
}
profileItem.subid = subid;
profileItem.isSub = isSub;

if (Utils.IsNullOrEmpty(profileItem.address))
{
return -1;
}

if (AddCustomServer(config, profileItem, true) == 0)
{
return 1;
Expand All @@ -1327,31 +1286,12 @@ private static int AddBatchServers4SsSIP008(Config config, string strData, strin
RemoveServerViaSubid(config, subid, isSub);
}

//SsSIP008
var lstSsServer = JsonUtils.Deserialize<List<SsServer>>(strData);
if (lstSsServer?.Count <= 0)
{
var ssSIP008 = JsonUtils.Deserialize<SsSIP008>(strData);
if (ssSIP008?.servers?.Count > 0)
{
lstSsServer = ssSIP008.servers;
}
}

var lstSsServer = ShadowsocksFmt.ResolveSip008(strData);
if (lstSsServer?.Count > 0)
{
int counter = 0;
foreach (var it in lstSsServer)
foreach (var ssItem in lstSsServer)
{
var ssItem = new ProfileItem()
{
subid = subid,
remarks = it.remarks,
security = it.method,
id = it.password,
address = it.server,
port = Utils.ToInt(it.server_port)
};
ssItem.subid = subid;
ssItem.isSub = isSub;
if (AddShadowsocksServer(config, ssItem) == 0)
Expand Down
17 changes: 17 additions & 0 deletions v2rayN/v2rayN/Handler/Fmt/BaseFmt.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Specialized;
using System.IO;
using v2rayN.Enums;
using v2rayN.Models;

Expand Down Expand Up @@ -182,5 +183,21 @@ protected static int ResolveStdTransport(NameValueCollection query, ref ProfileI
}
return 0;
}

protected static bool Contains(string str, params string[] s)
{
foreach (var item in s)
{
if (str.Contains(item, StringComparison.OrdinalIgnoreCase)) return true;
}
return false;
}

protected static string WriteAllText(string strData, string ext = "json")
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.{ext}");
File.WriteAllText(fileName, strData);
return fileName;
}
}
}
26 changes: 26 additions & 0 deletions v2rayN/v2rayN/Handler/Fmt/ClashFmt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using v2rayN.Enums;
using v2rayN.Models;

namespace v2rayN.Handler.Fmt
{
internal class ClashFmt : BaseFmt
{
public static ProfileItem? ResolveFull(string strData, string? subRemarks)
{
if (Contains(strData, "port", "socks-port", "proxies"))
{
var fileName = WriteAllText(strData, "yaml");

var profileItem = new ProfileItem
{
coreType = ECoreType.mihomo,
address = fileName,
remarks = subRemarks ?? "clash_custom"
};
return profileItem;
}

return null;
}
}
}
1 change: 0 additions & 1 deletion v2rayN/v2rayN/Handler/Fmt/FmtHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ internal class FmtHandler
}
}


public static ProfileItem? ResolveConfig(string config, out string msg)
{
msg = ResUI.ConfigurationFormatIncorrect;
Expand Down
36 changes: 36 additions & 0 deletions v2rayN/v2rayN/Handler/Fmt/Hysteria2Fmt.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,41 @@ internal class Hysteria2Fmt : BaseFmt
url = $"{Global.ProtocolShares[EConfigType.Hysteria2]}{url}/{query}{remark}";
return url;
}

public static ProfileItem? ResolveFull(string strData, string? subRemarks)
{
if (Contains(strData, "server", "up", "down", "listen", "<html>", "<body>"))
{
var fileName = WriteAllText(strData);

var profileItem = new ProfileItem
{
coreType = ECoreType.hysteria,
address = fileName,
remarks = subRemarks ?? "hysteria_custom"
};
return profileItem;
}

return null;
}

public static ProfileItem? ResolveFull2(string strData, string? subRemarks)
{
if (Contains(strData, "server", "auth", "up", "down", "listen"))
{
var fileName = WriteAllText(strData);

var profileItem = new ProfileItem
{
coreType = ECoreType.hysteria2,
address = fileName,
remarks = subRemarks ?? "hysteria2_custom"
};
return profileItem;
}

return null;
}
}
}
26 changes: 26 additions & 0 deletions v2rayN/v2rayN/Handler/Fmt/NaiveproxyFmt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using v2rayN.Enums;
using v2rayN.Models;

namespace v2rayN.Handler.Fmt
{
internal class NaiveproxyFmt : BaseFmt
{
public static ProfileItem? ResolveFull(string strData, string? subRemarks)
{
if (Contains(strData, "listen", "proxy", "<html>", "<body>"))
{
var fileName = WriteAllText(strData);

var profileItem = new ProfileItem
{
coreType = ECoreType.naiveproxy,
address = fileName,
remarks = subRemarks ?? "naiveproxy_custom"
};
return profileItem;
}

return null;
}
}
}
33 changes: 33 additions & 0 deletions v2rayN/v2rayN/Handler/Fmt/ShadowsocksFmt.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,5 +146,38 @@ internal class ShadowsocksFmt : BaseFmt

return item;
}

public static List<ProfileItem>? ResolveSip008(string result)
{
//SsSIP008
var lstSsServer = JsonUtils.Deserialize<List<SsServer>>(result);
if (lstSsServer?.Count <= 0)
{
var ssSIP008 = JsonUtils.Deserialize<SsSIP008>(result);
if (ssSIP008?.servers?.Count > 0)
{
lstSsServer = ssSIP008.servers;
}
}

if (lstSsServer?.Count > 0)
{
List<ProfileItem> lst = [];
foreach (var it in lstSsServer)
{
var ssItem = new ProfileItem()
{
remarks = it.remarks,
security = it.method,
id = it.password,
address = it.server,
port = Utils.ToInt(it.server_port)
};
lst.Add(ssItem);
}
return lst;
}
return null;
}
}
}
Loading

0 comments on commit 74a0a93

Please sign in to comment.