mirror of
https://github.com/2dust/v2rayN.git
synced 2025-05-13 11:48:07 +00:00
Refactor to select active nodes when updating subscriptions
This commit is contained in:
parent
6ec61433fb
commit
033c16c992
1 changed files with 29 additions and 44 deletions
|
@ -1034,14 +1034,14 @@ namespace ServiceLib.Handler
|
||||||
/// <param name="strData"></param>
|
/// <param name="strData"></param>
|
||||||
/// <param name="subid"></param>
|
/// <param name="subid"></param>
|
||||||
/// <returns>成功导入的数量</returns>
|
/// <returns>成功导入的数量</returns>
|
||||||
private static async Task<int> AddBatchServers(Config config, string strData, string subid, bool isSub, List<ProfileItem> lstOriSub)
|
private static async Task<int> AddBatchServersCommon(Config config, string strData, string subid, bool isSub)
|
||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(strData))
|
if (Utils.IsNullOrEmpty(strData))
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
string subFilter = string.Empty;
|
var subFilter = string.Empty;
|
||||||
//remove sub items
|
//remove sub items
|
||||||
if (isSub && Utils.IsNotEmpty(subid))
|
if (isSub && Utils.IsNotEmpty(subid))
|
||||||
{
|
{
|
||||||
|
@ -1049,16 +1049,14 @@ namespace ServiceLib.Handler
|
||||||
subFilter = (await AppHandler.Instance.GetSubItem(subid))?.Filter ?? "";
|
subFilter = (await AppHandler.Instance.GetSubItem(subid))?.Filter ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
int countServers = 0;
|
var countServers = 0;
|
||||||
//Check for duplicate indexId
|
|
||||||
List<string>? lstDbIndexId = null;
|
|
||||||
List<ProfileItem> lstAdd = new();
|
List<ProfileItem> lstAdd = new();
|
||||||
var arrData = strData.Split(Environment.NewLine.ToCharArray()).Where(t => !t.IsNullOrEmpty());
|
var arrData = strData.Split(Environment.NewLine.ToCharArray()).Where(t => !t.IsNullOrEmpty());
|
||||||
if (isSub)
|
if (isSub)
|
||||||
{
|
{
|
||||||
arrData = arrData.Distinct();
|
arrData = arrData.Distinct();
|
||||||
}
|
}
|
||||||
foreach (string str in arrData)
|
foreach (var str in arrData)
|
||||||
{
|
{
|
||||||
//maybe sub
|
//maybe sub
|
||||||
if (!isSub && (str.StartsWith(Global.HttpsProtocol) || str.StartsWith(Global.HttpProtocol)))
|
if (!isSub && (str.StartsWith(Global.HttpsProtocol) || str.StartsWith(Global.HttpProtocol)))
|
||||||
|
@ -1075,37 +1073,14 @@ namespace ServiceLib.Handler
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//exist sub items
|
//exist sub items //filter
|
||||||
if (isSub && Utils.IsNotEmpty(subid))
|
if (isSub && Utils.IsNotEmpty(subid) && Utils.IsNotEmpty(subFilter))
|
||||||
{
|
|
||||||
var existItem = lstOriSub?.FirstOrDefault(t => t.IsSub == isSub
|
|
||||||
&& config.UiItem.EnableUpdateSubOnlyRemarksExist ? t.Remarks == profileItem.Remarks : CompareProfileItem(t, profileItem, true));
|
|
||||||
if (existItem != null)
|
|
||||||
{
|
|
||||||
//Check for duplicate indexId
|
|
||||||
if (lstDbIndexId is null)
|
|
||||||
{
|
|
||||||
lstDbIndexId = await AppHandler.Instance.ProfileItemIndexes("");
|
|
||||||
}
|
|
||||||
if (lstAdd.Any(t => t.IndexId == existItem.IndexId)
|
|
||||||
|| lstDbIndexId.Any(t => t == existItem.IndexId))
|
|
||||||
{
|
|
||||||
profileItem.IndexId = string.Empty;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
profileItem.IndexId = existItem.IndexId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//filter
|
|
||||||
if (Utils.IsNotEmpty(subFilter))
|
|
||||||
{
|
{
|
||||||
if (!Regex.IsMatch(profileItem.Remarks, subFilter))
|
if (!Regex.IsMatch(profileItem.Remarks, subFilter))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
profileItem.Subid = subid;
|
profileItem.Subid = subid;
|
||||||
profileItem.IsSub = isSub;
|
profileItem.IsSub = isSub;
|
||||||
|
|
||||||
|
@ -1138,7 +1113,7 @@ namespace ServiceLib.Handler
|
||||||
return countServers;
|
return countServers;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<int> AddBatchServers4Custom(Config config, string strData, string subid, bool isSub, List<ProfileItem> lstOriSub)
|
private static async Task<int> AddBatchServers4Custom(Config config, string strData, string subid, bool isSub)
|
||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(strData))
|
if (Utils.IsNullOrEmpty(strData))
|
||||||
{
|
{
|
||||||
|
@ -1222,10 +1197,7 @@ namespace ServiceLib.Handler
|
||||||
{
|
{
|
||||||
await RemoveServerViaSubid(config, subid, isSub);
|
await RemoveServerViaSubid(config, subid, isSub);
|
||||||
}
|
}
|
||||||
if (isSub && lstOriSub?.Count == 1)
|
|
||||||
{
|
|
||||||
profileItem.IndexId = lstOriSub[0].IndexId;
|
|
||||||
}
|
|
||||||
profileItem.Subid = subid;
|
profileItem.Subid = subid;
|
||||||
profileItem.IsSub = isSub;
|
profileItem.IsSub = isSub;
|
||||||
profileItem.PreSocksPort = preSocksPort;
|
profileItem.PreSocksPort = preSocksPort;
|
||||||
|
@ -1239,7 +1211,7 @@ namespace ServiceLib.Handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<int> AddBatchServers4SsSIP008(Config config, string strData, string subid, bool isSub, List<ProfileItem> lstOriSub)
|
private static async Task<int> AddBatchServers4SsSIP008(Config config, string strData, string subid, bool isSub)
|
||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(strData))
|
if (Utils.IsNullOrEmpty(strData))
|
||||||
{
|
{
|
||||||
|
@ -1278,34 +1250,47 @@ namespace ServiceLib.Handler
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
List<ProfileItem>? lstOriSub = null;
|
List<ProfileItem>? lstOriSub = null;
|
||||||
|
ProfileItem? activeProfile = null;
|
||||||
if (isSub && Utils.IsNotEmpty(subid))
|
if (isSub && Utils.IsNotEmpty(subid))
|
||||||
{
|
{
|
||||||
lstOriSub = await AppHandler.Instance.ProfileItems(subid);
|
lstOriSub = await AppHandler.Instance.ProfileItems(subid);
|
||||||
|
activeProfile = lstOriSub?.FirstOrDefault(t => t.IndexId == config.IndexId);
|
||||||
}
|
}
|
||||||
|
|
||||||
var counter = 0;
|
var counter = 0;
|
||||||
if (Utils.IsBase64String(strData))
|
if (Utils.IsBase64String(strData))
|
||||||
{
|
{
|
||||||
counter = await AddBatchServers(config, Utils.Base64Decode(strData), subid, isSub, lstOriSub);
|
counter = await AddBatchServersCommon(config, Utils.Base64Decode(strData), subid, isSub);
|
||||||
}
|
}
|
||||||
if (counter < 1)
|
if (counter < 1)
|
||||||
{
|
{
|
||||||
counter = await AddBatchServers(config, strData, subid, isSub, lstOriSub);
|
counter = await AddBatchServersCommon(config, strData, subid, isSub);
|
||||||
}
|
}
|
||||||
if (counter < 1)
|
if (counter < 1)
|
||||||
{
|
{
|
||||||
counter = await AddBatchServers(config, Utils.Base64Decode(strData), subid, isSub, lstOriSub);
|
counter = await AddBatchServersCommon(config, Utils.Base64Decode(strData), subid, isSub);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (counter < 1)
|
if (counter < 1)
|
||||||
{
|
{
|
||||||
counter = await AddBatchServers4SsSIP008(config, strData, subid, isSub, lstOriSub);
|
counter = await AddBatchServers4SsSIP008(config, strData, subid, isSub);
|
||||||
}
|
}
|
||||||
|
|
||||||
//maybe other sub
|
//maybe other sub
|
||||||
if (counter < 1)
|
if (counter < 1)
|
||||||
{
|
{
|
||||||
counter = await AddBatchServers4Custom(config, strData, subid, isSub, lstOriSub);
|
counter = await AddBatchServers4Custom(config, strData, subid, isSub);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Select active node
|
||||||
|
if (activeProfile != null)
|
||||||
|
{
|
||||||
|
var lstSub = await AppHandler.Instance.ProfileItems(subid);
|
||||||
|
var existItem = lstSub?.FirstOrDefault(t => config.UiItem.EnableUpdateSubOnlyRemarksExist ? t.Remarks == activeProfile.Remarks : CompareProfileItem(t, activeProfile, true));
|
||||||
|
if (existItem != null)
|
||||||
|
{
|
||||||
|
await ConfigHandler.SetDefaultServerIndex(config, existItem.IndexId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return counter;
|
return counter;
|
||||||
|
|
Loading…
Reference in a new issue