diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 4f4fe2e9..70a84327 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -115,6 +115,7 @@ this.tsbPromotion = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.tsbClose = new System.Windows.Forms.ToolStripButton(); + this.menuRemoveDuplicateServer = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -172,6 +173,7 @@ this.menuScanScreen, this.toolStripSeparator1, this.menuRemoveServer, + this.menuRemoveDuplicateServer, this.menuCopyServer, this.menuSetDefaultServer, this.toolStripSeparator3, @@ -727,6 +729,12 @@ this.tsbClose.Name = "tsbClose"; this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click); // + // menuRemoveDuplicateServer + // + this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; + resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); + this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click); + // // MainForm // resources.ApplyResources(this, "$this"); @@ -848,6 +856,7 @@ private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab; private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed; private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4; + private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 356178e3..63bc559a 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -580,6 +580,22 @@ namespace v2rayN.Forms } + private void menuRemoveDuplicateServer_Click(object sender, EventArgs e) + { + List servers = null; + Utils.DedupServerList(config.vmess, out servers); + if (servers != null) + { + config.vmess = servers; + } + //刷新 + RefreshServers(); + LoadV2ray(); + + // save to config file + ConfigHandler.ToJsonFile(config); + } + private void menuCopyServer_Click(object sender, EventArgs e) { int index = GetLvSelectedIndex(); @@ -1565,6 +1581,5 @@ namespace v2rayN.Forms #endregion - } } diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 89a06c02..45d6947e 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -173,6 +173,12 @@ Remove selected server (multiple choice) (Delete) + + 447, 22 + + + Remove duplicate server + 447, 22 @@ -273,7 +279,7 @@ ImageAboveText - 448, 468 + 448, 512 cmsLv @@ -1346,6 +1352,12 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuRemoveDuplicateServer + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + MainForm diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index ea88b1d6..6e2ce7b5 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -453,4 +453,7 @@ 代理速度 + + 移除重复的服务器 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index b623a3e5..57725c24 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -311,6 +311,20 @@ namespace v2rayN } } + public static void DedupServerList(List source, out List result) + { + var list = new List(); + foreach (var item in source) + { + if(!list.Exists(i => item.address == i.address && item.port == i.port)) + { + list.Add(item); + } + } + + result = list; + } + #endregion