From cb018090932585c1cd9612cea4a3a2e4f5ec644a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 2 Dec 2021 16:47:35 +0800 Subject: [PATCH] Optimize Duplicate Server --- v2rayN/v2rayN/Forms/MainForm.cs | 8 +--- v2rayN/v2rayN/Handler/ConfigHandler.cs | 57 ++++++++++++++++++++++++++ v2rayN/v2rayN/Tool/Utils.cs | 32 +-------------- 3 files changed, 60 insertions(+), 37 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index d2920ae1..320fd707 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -587,13 +587,9 @@ namespace v2rayN.Forms private void menuRemoveDuplicateServer_Click(object sender, EventArgs e) { - Utils.DedupServerList(config.vmess, out List servers, config.keepOlderDedupl); int oldCount = config.vmess.Count; - int newCount = servers.Count; - if (servers != null) - { - config.vmess = servers; - } + ConfigHandler.DedupServerList(ref config); + int newCount = config.vmess.Count; RefreshServers(); LoadV2ray(); UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount)); diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 0b83a515..739d8d3b 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -987,6 +987,63 @@ namespace v2rayN.Handler return 0; } + public static int DedupServerList(ref Config config) + { + var itemId = config.getItemId(); + + List source = config.vmess; + bool keepOlder = config.keepOlderDedupl; + + List list = new List(); + if (!keepOlder) source.Reverse(); // Remove the early items first + + bool _isAdded(Mode.VmessItem o, Mode.VmessItem n) + { + return o.configVersion == n.configVersion && + o.configType == n.configType && + o.address == n.address && + o.port == n.port && + o.id == n.id && + o.alterId == n.alterId && + o.security == n.security && + o.network == n.network && + o.headerType == n.headerType && + o.requestHost == n.requestHost && + o.path == n.path && + o.streamSecurity == n.streamSecurity; + // skip (will remove) different remarks + } + foreach (Mode.VmessItem item in source) + { + if (!list.Exists(i => _isAdded(i, item))) + { + list.Add(item); + } + } + if (!keepOlder) list.Reverse(); + config.vmess = list; + + var index_ = config.vmess.FindIndex(it => it.getItemId() == itemId); + if (index_ >= 0) + { + config.index = index_; + } + else + { + if (config.vmess.Count > 0) + { + config.index = 0; + } + else + { + config.index = -1; + } + } + Global.reloadV2ray = true; + + return 0; + } + #endregion #region UI diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 23a1b805..b6aed414 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -348,37 +348,7 @@ namespace v2rayN return $"{string.Format("{0:f1}", result)} {unit}"; } - public static void DedupServerList(List source, out List result, bool keepOlder) - { - List list = new List(); - if (!keepOlder) source.Reverse(); // Remove the early items first - - bool _isAdded(Mode.VmessItem o, Mode.VmessItem n) - { - return o.configVersion == n.configVersion && - o.configType == n.configType && - o.address == n.address && - o.port == n.port && - o.id == n.id && - o.alterId == n.alterId && - o.security == n.security && - o.network == n.network && - o.headerType == n.headerType && - o.requestHost == n.requestHost && - o.path == n.path && - o.streamSecurity == n.streamSecurity; - // skip (will remove) different remarks - } - foreach (Mode.VmessItem item in source) - { - if (!list.Exists(i => _isAdded(i, item))) - { - list.Add(item); - } - } - if (!keepOlder) list.Reverse(); - result = list; - } + public static string UrlEncode(string url) {