From a2838b82173d72494a03f4e9c0d5e339c8a01e27 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Thu, 13 Aug 2020 01:06:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=9B=E7=A8=8B=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=A8=A1=E5=BC=8F=E6=96=87=E4=BB=B6=E5=90=8D=E4=BC=9A?= =?UTF-8?q?=E8=A2=AB=E6=9B=B4=E6=94=B9=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=A8=A1=E5=BC=8F=E4=B8=8D=E5=8F=AF=E7=94=A8=E6=8F=90?= =?UTF-8?q?=E9=86=92=EF=BC=8C=E6=8A=BD=E5=8F=96=E8=BF=9B=E7=A8=8B=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=BC=96=E8=BE=91=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Netch/Forms/MainForm.cs | 35 ++++++++------ Netch/Forms/Mode/Process.Designer.cs | 20 ++++++++ Netch/Forms/Mode/Process.cs | 8 ++-- Netch/Forms/Mode/Process.resx | 3 ++ Netch/Models/Mode.cs | 71 +++++++++++++++------------- 5 files changed, 85 insertions(+), 52 deletions(-) diff --git a/Netch/Forms/MainForm.cs b/Netch/Forms/MainForm.cs index 9489b8d4..f3f0e73b 100644 --- a/Netch/Forms/MainForm.cs +++ b/Netch/Forms/MainForm.cs @@ -334,23 +334,28 @@ namespace Netch.Forms private void EditModePictureBox_Click(object sender, EventArgs e) { // 当前ModeComboBox中至少有一项 - if (ModeComboBox.Items.Count > 0 && ModeComboBox.SelectedIndex != -1) - { - SaveConfigs(); - var selectedMode = (Models.Mode) ModeComboBox.SelectedItem; - // 只允许修改进程加速的模式 - if (selectedMode.Type == 0) - { - //Process.Start(Environment.CurrentDirectory + "\\mode\\" + selectedMode.FileName + ".txt"); - var process = new Process(selectedMode); - process.Text = "Edit Process Mode"; - process.Show(); - Hide(); - } - } - else + if (ModeComboBox.Items.Count <= 0 || ModeComboBox.SelectedIndex == -1) { MessageBoxX.Show(i18N.Translate("Please select a mode first")); + return; + } + + SaveConfigs(); + var selectedMode = (Models.Mode) ModeComboBox.SelectedItem; + switch (selectedMode.Type) + { + case 0: + { + var process = new Process(selectedMode); + process.Show(); + Hide(); + break; + } + default: + { + MessageBoxX.Show($"Current not support editing {selectedMode.TypeToString()} Mode"); + break; + } } } diff --git a/Netch/Forms/Mode/Process.Designer.cs b/Netch/Forms/Mode/Process.Designer.cs index 7b49a61f..4f6fbc74 100644 --- a/Netch/Forms/Mode/Process.Designer.cs +++ b/Netch/Forms/Mode/Process.Designer.cs @@ -31,6 +31,7 @@ namespace Netch.Forms.Mode /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Process)); this.ConfigurationGroupBox = new System.Windows.Forms.GroupBox(); this.UseCustomFilenameBox = new System.Windows.Forms.CheckBox(); @@ -43,9 +44,12 @@ namespace Netch.Forms.Mode this.RuleListBox = new System.Windows.Forms.ListBox(); this.RemarkTextBox = new System.Windows.Forms.TextBox(); this.RemarkLabel = new System.Windows.Forms.Label(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.ControlButton = new System.Windows.Forms.Button(); + this.DeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ConfigurationGroupBox.SuspendLayout(); this.ProcessGroupBox.SuspendLayout(); + this.contextMenuStrip.SuspendLayout(); this.SuspendLayout(); // // ConfigurationGroupBox @@ -156,6 +160,12 @@ namespace Netch.Forms.Mode this.RemarkLabel.TabIndex = 0; this.RemarkLabel.Text = "Remark"; // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.DeleteToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(153, 48); + // // ControlButton // this.ControlButton.Location = new System.Drawing.Point(277, 362); @@ -166,6 +176,13 @@ namespace Netch.Forms.Mode this.ControlButton.UseVisualStyleBackColor = true; this.ControlButton.Click += new System.EventHandler(this.ControlButton_Click); // + // DeleteToolStripMenuItem + // + this.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem"; + this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.DeleteToolStripMenuItem.Text = "Delete"; + this.DeleteToolStripMenuItem.Click += new System.EventHandler(this.deleteRule_Click); + // // Process // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -187,11 +204,14 @@ namespace Netch.Forms.Mode this.ConfigurationGroupBox.PerformLayout(); this.ProcessGroupBox.ResumeLayout(false); this.ProcessGroupBox.PerformLayout(); + this.contextMenuStrip.ResumeLayout(false); this.ResumeLayout(false); } #endregion + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem DeleteToolStripMenuItem; private System.Windows.Forms.GroupBox ConfigurationGroupBox; private System.Windows.Forms.Label RemarkLabel; private System.Windows.Forms.GroupBox ProcessGroupBox; diff --git a/Netch/Forms/Mode/Process.cs b/Netch/Forms/Mode/Process.cs index af3409ed..3c7425b6 100644 --- a/Netch/Forms/Mode/Process.cs +++ b/Netch/Forms/Mode/Process.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; @@ -34,6 +33,7 @@ namespace Netch.Forms.Mode mode.Rule.ForEach(i => RuleListBox.Items.Add(i)); EditMode = true; + RemarkTextBox.TextChanged -= RemarkTextBox_TextChanged; FilenameTextBox.Enabled = false; FilenameLabel.Enabled = false; UseCustomFilenameBox.Enabled = false; @@ -109,6 +109,7 @@ namespace Netch.Forms.Mode AddButton.Text = i18N.Translate(AddButton.Text); ScanButton.Text = i18N.Translate(ScanButton.Text); ControlButton.Text = i18N.Translate(ControlButton.Text); + DeleteToolStripMenuItem.Text = i18N.Translate(DeleteToolStripMenuItem.Text); FilenameTextBox.Enabled = false; FilenameLabel.Enabled = false; @@ -129,10 +130,7 @@ namespace Netch.Forms.Mode return; if (e.Button == MouseButtons.Right) { - var strip = new ContextMenuStrip(); - strip.Items.Add(i18N.Translate("Delete")); - strip.Items[0].Click += deleteRule_Click; - strip.Show(RuleListBox, e.Location); //鼠标右键按下弹出菜单 + contextMenuStrip.Show(RuleListBox, e.Location); } } diff --git a/Netch/Forms/Mode/Process.resx b/Netch/Forms/Mode/Process.resx index b3c3547f..6bfce0a3 100644 --- a/Netch/Forms/Mode/Process.resx +++ b/Netch/Forms/Mode/Process.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + diff --git a/Netch/Models/Mode.cs b/Netch/Models/Mode.cs index 183ff2eb..fb64f996 100644 --- a/Netch/Models/Mode.cs +++ b/Netch/Models/Mode.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Globalization; +using System.Linq; namespace Netch.Models { @@ -20,9 +21,9 @@ namespace Netch.Models /// 0. Socks5 + 进程加速 /// 1. Socks5 + TUN/TAP 规则内 IP CIDR 加速 /// 2. Socks5 + TUN/TAP 全局,绕过规则内 IP CIDR - /// 3. Socks5 + HTTP 代理(自动设置到系统代理) - /// 4. Socks5 代理(不自动设置到系统代理) - /// 5. Socks5 + HTTP 代理(不自动设置到系统代理) + /// 3. Socks5 + HTTP 代理(设置到系统代理) + /// 4. Socks5 代理(不设置到系统代理) + /// 5. Socks5 + HTTP 代理(不设置到系统代理) /// public int Type = 0; @@ -34,7 +35,7 @@ namespace Netch.Models /// /// 规则 /// - public List Rule = new List(); + public readonly List Rule = new List(); /// /// 获取备注 @@ -42,7 +43,7 @@ namespace Netch.Models /// 备注 public override string ToString() { - return string.Format("[{0}] {1}", Type + 1, Remark); + return $"[{Type + 1}] {Remark}"; } /// @@ -51,38 +52,30 @@ namespace Netch.Models /// 模式文件字符串 public string ToFileString() { - string FileString; + string fileString; - // 进程模式 - if (Type == 0) + switch (Type) { - FileString = $"# {Remark}\r\n"; + case 0: + // 进程模式 + fileString = $"# {Remark}"; + break; + case 1: + // TUN/TAP 规则内 IP CIDR,无 Bypass China 设置 + fileString = $"# {Remark}, {Type}, 0"; + break; + default: + fileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}"; + break; } - // TUN/TAP 规则内 IP CIDR,无 Bypass China 设置 - else if (Type == 1) - { - FileString = $"# {Remark}, {Type}, 0\r\n"; - } + fileString += Global.EOF; - // TUN/TAP 全局,绕过规则内 IP CIDR - // HTTP 代理(自动设置到系统代理) - // Socks5 代理(不自动设置到系统代理) - // Socks5 + HTTP 代理(不自动设置到系统代理) - else - { - FileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}\r\n"; - } + fileString = Rule.Aggregate(fileString, (current, item) => $"{current}{item}{Global.EOF}"); + // 去除最后的行尾符 + fileString = fileString.Substring(0, fileString.Length - 2); - foreach (var item in Rule) - { - FileString = $"{FileString}{item}\r\n"; - } - - // 去除最后两个多余回车符和换行符 - FileString = FileString.Substring(0, FileString.Length - 2); - - return FileString; + return fileString; } /// @@ -131,5 +124,19 @@ namespace Netch.Models } } } + + public string TypeToString() + { + return Type switch + { + 0 => "Process", + 1 => "TUNTAP", + 2 => "TUNTAP", + 3 => "SYSTEM", + 4 => "S5", + 5 => "S5+HTTP", + _ => "ERROR", + }; + } } -} +} \ No newline at end of file