diff --git a/Netch/Forms/SubscribeForm.Designer.cs b/Netch/Forms/SubscribeForm.Designer.cs
index 83698bdf..8188fad1 100644
--- a/Netch/Forms/SubscribeForm.Designer.cs
+++ b/Netch/Forms/SubscribeForm.Designer.cs
@@ -40,11 +40,13 @@
this.RemarkTextBox = new System.Windows.Forms.TextBox();
this.RemarkLabel = new System.Windows.Forms.Label();
this.SubscribeLinkListView = new System.Windows.Forms.ListView();
+ this.EnableColumnHeader = new System.Windows.Forms.ColumnHeader();
this.RemarkColumnHeader = new System.Windows.Forms.ColumnHeader();
this.LinkColumnHeader = new System.Windows.Forms.ColumnHeader();
this.UserAgentHeader = new System.Windows.Forms.ColumnHeader();
this.pContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.DeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.deleteServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.CopyLinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.UseSelectedServerCheckBox = new System.Windows.Forms.CheckBox();
this.MainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
@@ -143,19 +145,29 @@
// SubscribeLinkListView
//
this.SubscribeLinkListView.AllowColumnReorder = true;
- this.SubscribeLinkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {this.RemarkColumnHeader, this.LinkColumnHeader, this.UserAgentHeader});
+ this.SubscribeLinkListView.CheckBoxes = true;
+ this.SubscribeLinkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[]
+ {
+ this.EnableColumnHeader, this.RemarkColumnHeader, this.LinkColumnHeader, this.UserAgentHeader
+ });
this.SubscribeLinkListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.SubscribeLinkListView.FullRowSelect = true;
this.SubscribeLinkListView.HideSelection = false;
this.SubscribeLinkListView.Location = new System.Drawing.Point(8, 8);
+ this.SubscribeLinkListView.MultiSelect = false;
this.SubscribeLinkListView.Name = "SubscribeLinkListView";
this.SubscribeLinkListView.Size = new System.Drawing.Size(668, 200);
this.SubscribeLinkListView.TabIndex = 0;
this.SubscribeLinkListView.UseCompatibleStateImageBehavior = false;
this.SubscribeLinkListView.View = System.Windows.Forms.View.Details;
+ this.SubscribeLinkListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.SubscribeLinkListView_ItemChecked);
this.SubscribeLinkListView.SelectedIndexChanged += new System.EventHandler(this.SubscribeLinkListView_SelectedIndexChanged);
this.SubscribeLinkListView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.SubscribeLinkListView_MouseUp);
//
+ // EnableColumnHeader
+ //
+ this.EnableColumnHeader.Text = "Status";
+ //
// RemarkColumnHeader
//
this.RemarkColumnHeader.Text = "Remark";
@@ -164,7 +176,7 @@
// LinkColumnHeader
//
this.LinkColumnHeader.Text = "Link";
- this.LinkColumnHeader.Width = 400;
+ this.LinkColumnHeader.Width = 364;
//
// UserAgentHeader
//
@@ -173,21 +185,31 @@
//
// pContextMenuStrip
//
- this.pContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.DeleteToolStripMenuItem, this.CopyLinkToolStripMenuItem});
+ this.pContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
+ {
+ this.DeleteToolStripMenuItem, this.deleteServerToolStripMenuItem, this.CopyLinkToolStripMenuItem
+ });
this.pContextMenuStrip.Name = "pContextMenuStrip";
- this.pContextMenuStrip.Size = new System.Drawing.Size(130, 48);
+ this.pContextMenuStrip.Size = new System.Drawing.Size(151, 70);
//
// DeleteToolStripMenuItem
//
this.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem";
- this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(129, 22);
+ this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.DeleteToolStripMenuItem.Text = "Delete";
this.DeleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click);
//
+ // deleteServerToolStripMenuItem
+ //
+ this.deleteServerToolStripMenuItem.Name = "deleteServerToolStripMenuItem";
+ this.deleteServerToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
+ this.deleteServerToolStripMenuItem.Text = "DeleteServer";
+ this.deleteServerToolStripMenuItem.Click += new System.EventHandler(this.deleteServerToolStripMenuItem_Click);
+ //
// CopyLinkToolStripMenuItem
//
this.CopyLinkToolStripMenuItem.Name = "CopyLinkToolStripMenuItem";
- this.CopyLinkToolStripMenuItem.Size = new System.Drawing.Size(129, 22);
+ this.CopyLinkToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.CopyLinkToolStripMenuItem.Text = "CopyLink";
this.CopyLinkToolStripMenuItem.Click += new System.EventHandler(this.CopyLinkToolStripMenuItem_Click);
//
@@ -253,6 +275,7 @@
this.ControlsPanel.PerformLayout();
this.ResumeLayout(false);
}
+ private System.Windows.Forms.ColumnHeader EnableColumnHeader;
private System.Windows.Forms.Panel ControlsPanel;
private System.Windows.Forms.TableLayoutPanel MainTableLayoutPanel;
@@ -275,5 +298,7 @@
private System.Windows.Forms.CheckBox UseSelectedServerCheckBox;
#endregion
+
+ private System.Windows.Forms.ToolStripMenuItem deleteServerToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/Netch/Forms/SubscribeForm.cs b/Netch/Forms/SubscribeForm.cs
index aa80bd27..e9fef796 100644
--- a/Netch/Forms/SubscribeForm.cs
+++ b/Netch/Forms/SubscribeForm.cs
@@ -1,4 +1,5 @@
using System;
+using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
using Netch.Models;
@@ -21,12 +22,15 @@ namespace Netch.Forms
foreach (var item in Global.Settings.SubscribeLink)
{
- SubscribeLinkListView.Items.Add(new ListViewItem(new[]
+ var viewItem = new ListViewItem(new[]
{
+ "",
item.Remark,
item.Link,
!string.IsNullOrEmpty(item.UserAgent) ? item.UserAgent : WebUtil.DefaultUserAgent
- }));
+ });
+ viewItem.Checked = item.Enable;
+ SubscribeLinkListView.Items.Add(viewItem);
}
}
@@ -119,6 +123,7 @@ namespace Netch.Forms
Global.Settings.SubscribeLink.Add(new SubscribeLink
{
+ Enable = true,
Remark = RemarkTextBox.Text,
Link = LinkTextBox.Text,
UserAgent = UserAgentTextBox.Text
@@ -135,7 +140,9 @@ namespace Netch.Forms
{
RenameServersGroup(target.Remark, RemarkTextBox.Text);
}
+ ListViewItem listViewItem = SubscribeLinkListView.Items[_editingIndex];
+ target.Enable = listViewItem.Checked;
target.Link = LinkTextBox.Text;
target.Remark = RemarkTextBox.Text;
target.UserAgent = UserAgentTextBox.Text;
@@ -173,31 +180,21 @@ namespace Netch.Forms
///
private void SubscribeLinkListView_SelectedIndexChanged(object sender, EventArgs e)
{
- var editingCanOverwrite = true;
- if (_editingIndex != -1)
+ var listView = (ListView) sender;
+ if (listView.SelectedItems.Count == 0)
{
- var targetItem = SubscribeLinkListView.Items[_editingIndex].SubItems;
- editingCanOverwrite = RemarkTextBox.Text == targetItem[0].Text &&
- LinkTextBox.Text == targetItem[1].Text &&
- UserAgentTextBox.Text == targetItem[2].Text;
- }
-
- if (SubscribeLinkListView.SelectedItems.Count == 1)
- {
- if (editingCanOverwrite)
- {
- SelectEditing(SubscribeLinkListView.SelectedItems[0].Index);
- }
- }
- else if (SubscribeLinkListView.SelectedItems.Count > 1)
- {
- }
- else if (editingCanOverwrite)
- {
- // 不选
// 重置
ResetEditingGroup();
+ return;
}
+ _editingIndex = listView.SelectedItems[0].Index;
+
+ ListViewItem target = SubscribeLinkListView.Items[_editingIndex];
+
+ AddSubscriptionBox.Text = target.SubItems[1].Text;
+ RemarkTextBox.Text = target.SubItems[1].Text;
+ LinkTextBox.Text = target.SubItems[2].Text;
+ UserAgentTextBox.Text = target.SubItems[3].Text;
}
private void SubscribeLinkListView_MouseUp(object sender, MouseEventArgs e)
@@ -211,17 +208,6 @@ namespace Netch.Forms
}
}
- private void SelectEditing(int index)
- {
- _editingIndex = index;
- ListViewItem target;
- target = SubscribeLinkListView.Items[index];
- AddSubscriptionBox.Text = target.SubItems[0].Text;
- RemarkTextBox.Text = target.SubItems[0].Text;
- LinkTextBox.Text = target.SubItems[1].Text;
- UserAgentTextBox.Text = target.SubItems[2].Text;
- }
-
private void ResetEditingGroup()
{
_editingIndex = -1;
@@ -235,5 +221,36 @@ namespace Netch.Forms
{
ResetEditingGroup();
}
+
+ private void SubscribeLinkListView_ItemChecked(object sender, ItemCheckedEventArgs e)
+ {
+ _editingIndex = e.Item.Index;
+ ListViewItem listViewItem = SubscribeLinkListView.Items[e.Item.Index];
+
+ AddSubscriptionBox.Text = listViewItem.SubItems[1].Text;
+ RemarkTextBox.Text = listViewItem.SubItems[1].Text;
+ LinkTextBox.Text = listViewItem.SubItems[2].Text;
+ UserAgentTextBox.Text = listViewItem.SubItems[3].Text;
+
+ var settingSub = Global.Settings.SubscribeLink[_editingIndex];
+ settingSub.Enable = listViewItem.Checked;
+ settingSub.Remark = listViewItem.SubItems[1].Text;
+ settingSub.Link = listViewItem.SubItems[2].Text;
+ settingSub.UserAgent = listViewItem.SubItems[3].Text;
+
+ Configuration.Save();
+ }
+
+ private void deleteServerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (SubscribeLinkListView.SelectedItems.Count > 0)
+ {
+ var item = SubscribeLinkListView.SelectedItems[0];
+
+ if (MessageBoxX.Show(i18N.Translate("Confirm deletion?"), confirm: true) != DialogResult.OK)
+ return;
+ DeleteServersInGroup(item.SubItems[1].Text);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Netch/Models/SubscribeLink.cs b/Netch/Models/SubscribeLink.cs
index 6c5f865a..67e15042 100644
--- a/Netch/Models/SubscribeLink.cs
+++ b/Netch/Models/SubscribeLink.cs
@@ -2,6 +2,11 @@
{
public class SubscribeLink
{
+ ///
+ /// 启用状态
+ ///
+ public bool Enable;
+
///
/// 备注
///
@@ -17,4 +22,4 @@
///
public string UserAgent;
}
-}
+}
\ No newline at end of file
diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN
index 1a7b2e8c..46b1a1c3 100644
--- a/Netch/Resources/zh-CN
+++ b/Netch/Resources/zh-CN
@@ -70,6 +70,13 @@
"Updating in the background": "正在后台更新中",
"Update {1} server(s) from {0}": "从 {0} 更新 {1} 个服务器",
"Update servers error from {0}": "从 {0} 更新服务器失败",
+ "Delete the corresponding group of items in the server list?": "是否删除订阅对应服务器?",
+ "Confirm deletion?": "确认删除?",
+ "DeleteServer": "删除订阅节点",
+ "Status": "状态",
+ "Remark": "备注",
+ "Link": "链接",
+ "Unselect": "取消选择",
"Options": "选项",
"NF Service": "NF 服务",
@@ -81,16 +88,16 @@
"Modes have been reload": "模式已重载",
"Clean DNS Cache": "清理 DNS 缓存",
"DNS cache cleanup succeeded": "DNS 缓存清理成功",
-
+
"Update PAC": "更新 PAC",
"PAC updated successfully": "PAC 更新成功",
"PAC update failed": "PAC 更新失败",
-
+
"Update ACL": "更新 ACL 规则",
"Update ACL with proxy": "使用代理更新 ACL 规则",
"ACL updated successfully": "ACL 更新成功",
"ACL update failed": "ACL 更新失败",
-
+
"Open Directory": "打开目录",
"About": "关于",
diff --git a/Netch/Utils/Subscription.cs b/Netch/Utils/Subscription.cs
index e0f980a7..c886a40d 100644
--- a/Netch/Utils/Subscription.cs
+++ b/Netch/Utils/Subscription.cs
@@ -24,6 +24,10 @@ namespace Netch.Utils
{
try
{
+ if (!item.Enable)
+ {
+ return;
+ }
var request = WebUtil.CreateRequest(item.Link);
if (!string.IsNullOrEmpty(item.UserAgent)) request.UserAgent = item.UserAgent;
diff --git a/Netch/Utils/Utils.cs b/Netch/Utils/Utils.cs
index 7baeda19..b8019c0a 100644
--- a/Netch/Utils/Utils.cs
+++ b/Netch/Utils/Utils.cs
@@ -216,6 +216,14 @@ namespace Netch.Utils
func.Invoke(component);
switch (component)
{
+ case ListView listView:
+ // ListView sub item
+ foreach (var item in listView.Columns.Cast())
+ {
+ ComponentIterator(item, func);
+ }
+
+ break;
case ToolStripMenuItem toolStripMenuItem:
// Iterator Menu strip sub item
foreach (var item in toolStripMenuItem.DropDownItems.Cast())
diff --git a/Netch/Utils/i18N.cs b/Netch/Utils/i18N.cs
index 588fefe3..cdd4b9a6 100644
--- a/Netch/Utils/i18N.cs
+++ b/Netch/Utils/i18N.cs
@@ -121,6 +121,9 @@ namespace Netch.Utils
case ToolStripItem c:
c.Text = Translate(c.Text);
break;
+ case ColumnHeader c:
+ c.Text = Translate(c.Text);
+ break;
}
});
}