diff --git a/v2rayN/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/v2rayN/Forms/MainForm.Designer.cs index 0a309df6..39988104 100644 --- a/v2rayN/v2rayN/Forms/MainForm.Designer.cs +++ b/v2rayN/v2rayN/Forms/MainForm.Designer.cs @@ -47,6 +47,7 @@ this.menuCopyServer = new System.Windows.Forms.ToolStripMenuItem(); this.menuSetDefaultServer = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.menuMoveToGroup = new System.Windows.Forms.ToolStripMenuItem(); this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem(); this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem(); this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem(); @@ -64,9 +65,9 @@ this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem(); this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem(); + this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.tabGroup = new System.Windows.Forms.TabControl(); this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); - this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.gbMsgTitle = new System.Windows.Forms.GroupBox(); @@ -208,6 +209,7 @@ this.menuCopyServer, this.menuSetDefaultServer, this.toolStripSeparator3, + this.menuMoveToGroup, this.menuMoveTop, this.menuMoveUp, this.menuMoveDown, @@ -226,6 +228,7 @@ this.menuExport2ShareUrl, this.menuExport2SubContent}); this.cmsLv.Name = "cmsLv"; + this.cmsLv.OwnerItem = this.tsbServer; resources.ApplyResources(this.cmsLv, "cmsLv"); // // menuAddVmessServer @@ -310,6 +313,12 @@ this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); // + // menuMoveToGroup + // + this.menuMoveToGroup.Name = "menuMoveToGroup"; + resources.ApplyResources(this.menuMoveToGroup, "menuMoveToGroup"); + this.menuMoveToGroup.Click += new System.EventHandler(this.menuMoveToGroup_Click); + // // menuMoveTop // this.menuMoveTop.Name = "menuMoveTop"; @@ -410,6 +419,13 @@ resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent"); this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click); // + // tsbServer + // + this.tsbServer.DropDown = this.cmsLv; + this.tsbServer.Image = global::v2rayN.Properties.Resources.server; + resources.ApplyResources(this.tsbServer, "tsbServer"); + this.tsbServer.Name = "tsbServer"; + // // tabGroup // resources.ApplyResources(this.tabGroup, "tabGroup"); @@ -422,13 +438,6 @@ resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); this.qrCodeControl.Name = "qrCodeControl"; // - // tsbServer - // - this.tsbServer.DropDown = this.cmsLv; - this.tsbServer.Image = global::v2rayN.Properties.Resources.server; - resources.ApplyResources(this.tsbServer, "tsbServer"); - this.tsbServer.Name = "tsbServer"; - // // splitContainer1 // resources.ApplyResources(this.splitContainer1, "splitContainer1"); @@ -1076,6 +1085,7 @@ private System.Windows.Forms.ToolStripMenuItem tsbGlobalHotkeySetting; private System.Windows.Forms.TabControl tabGroup; private System.Windows.Forms.ToolStripMenuItem tsbGroupSetting; + private System.Windows.Forms.ToolStripMenuItem menuMoveToGroup; } } diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 6f325a62..f741842f 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -485,6 +485,23 @@ namespace v2rayN.Forms } tabGroup.SelectedIndex = 0; + + //menuMoveToGroup + menuMoveToGroup.DropDownItems.Clear(); + + List lst = new List(); + foreach (var item in config.groupItem) + { + string name = item.remarks; + + ToolStripMenuItem ts = new ToolStripMenuItem(name) + { + Tag = item.id, + }; + ts.Click += new EventHandler(ts_Group_Click); + lst.Add(ts); + } + menuMoveToGroup.DropDownItems.AddRange(lst.ToArray()); } private void tabGroup_SelectedIndexChanged(object sender, EventArgs e) @@ -501,6 +518,29 @@ namespace v2rayN.Forms lvServers.Focus(); } + + private void ts_Group_Click(object sender, EventArgs e) + { + try + { + ToolStripItem ts = (ToolStripItem)sender; + var groupIdSelected = Utils.ToString(ts.Tag); + + int index = GetLvSelectedIndex(); + if (index < 0) + { + return; + } + + if (ConfigHandler.MoveServerToGroup(config, lstSelecteds, groupIdSelected) == 0) + { + RefreshServers(); + } + } + catch + { + } + } #endregion #region v2ray 操作 @@ -688,7 +728,7 @@ namespace v2rayN.Forms private void menuRemoveDuplicateServer_Click(object sender, EventArgs e) { int oldCount = lstVmess.Count; - int newCount = ConfigHandler.DedupServerList(ref config, ref lstVmess); + int newCount = ConfigHandler.DedupServerList(ref config, ref lstVmess); RefreshServers(); _ = LoadV2ray(); UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount)); @@ -720,11 +760,11 @@ namespace v2rayN.Forms private void menuPingServer_Click(object sender, EventArgs e) { - Speedtest("ping"); + Speedtest(ESpeedActionType.Ping); } private void menuTcpingServer_Click(object sender, EventArgs e) { - Speedtest("tcping"); + Speedtest(ESpeedActionType.Tcping); } private void menuRealPingServer_Click(object sender, EventArgs e) @@ -737,7 +777,7 @@ namespace v2rayN.Forms //UI.Show(UIRes.I18N("SpeedServerTips")); - Speedtest("realping"); + Speedtest(ESpeedActionType.Realping); } private void menuSpeedServer_Click(object sender, EventArgs e) @@ -750,13 +790,13 @@ namespace v2rayN.Forms //UI.Show(UIRes.I18N("SpeedServerTips")); - Speedtest("speedtest"); + Speedtest(ESpeedActionType.Speedtest); } - private void Speedtest(string actionType) + private void Speedtest(ESpeedActionType actionType) { if (GetLvSelectedIndex() < 0) return; ClearTestResult(); - SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lstSelecteds, actionType, UpdateSpeedtestHandler); + SpeedtestHandler statistics = new SpeedtestHandler(ref config, v2rayHandler, lstSelecteds, actionType, UpdateSpeedtestHandler); } private void tsbTestMe_Click(object sender, EventArgs e) @@ -1280,7 +1320,9 @@ namespace v2rayN.Forms item.Selected = true; } } - + private void menuMoveToGroup_Click(object sender, EventArgs e) + { + } #endregion #region 系统代理相关 diff --git a/v2rayN/v2rayN/Forms/MainForm.resx b/v2rayN/v2rayN/Forms/MainForm.resx index 7a643648..e9c6dd11 100644 --- a/v2rayN/v2rayN/Forms/MainForm.resx +++ b/v2rayN/v2rayN/Forms/MainForm.resx @@ -206,6 +206,12 @@ 352, 6 + + 355, 22 + + + Move to Group + 355, 22 @@ -302,8 +308,20 @@ Export subscription (base64) share to clipboard + + Magenta + + + 64, 53 + + + Servers + + + ImageAboveText + - 356, 622 + 356, 666 cmsLv @@ -452,18 +470,6 @@ 0 - - Magenta - - - 64, 53 - - - Servers - - - ImageAboveText - Fill @@ -549,7 +555,7 @@ Set message filters - 228, 158 + 228, 136 cmsMsgBox @@ -1205,6 +1211,12 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + menuMoveToGroup + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + menuMoveTop diff --git a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx index 97a5be43..593d0710 100644 --- a/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx +++ b/v2rayN/v2rayN/Forms/MainForm.zh-Hans.resx @@ -573,4 +573,7 @@ 关闭窗口 + + 移至分组 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs index 0cf56c5c..fdc6fc4a 100644 --- a/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -1115,7 +1115,17 @@ namespace v2rayN.Handler return 0; } + public static int MoveServerToGroup(Config config, List indexs, string groupId) + { + foreach (var item in indexs) + { + item.groupId = groupId; + } + ToJsonFile(config); + + return 0; + } #endregion #region UI