PortProxyGUI/PortProxyGUI - NET45/PortProxyGUI.cs

194 lines
7.7 KiB
C#
Raw Normal View History

2020-05-29 03:32:44 +08:00
using PortProxyGUI._extern.NStandard;
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using static System.Windows.Forms.ListViewItem;
namespace PortProxyGUI
{
public partial class PortProxyGUI : Form
{
2020-12-09 21:19:58 +08:00
public SetProxyForm SetProxyForm;
2020-05-29 03:32:44 +08:00
public About AboutForm;
2020-12-09 21:19:58 +08:00
private ListViewColumnSorter lvwColumnSorter;
2020-05-29 03:32:44 +08:00
public PortProxyGUI()
{
InitializeComponent();
2020-12-09 21:19:58 +08:00
lvwColumnSorter = new ListViewColumnSorter();
2021-03-10 01:12:07 +08:00
listViewProxies.ListViewItemSorter = lvwColumnSorter;
2020-05-29 03:32:44 +08:00
}
private void PortProxyGUI_Load(object sender, EventArgs e)
2021-03-10 01:12:07 +08:00
{
}
private void PortProxyGUI_Shown(object sender, EventArgs e)
2020-05-29 03:32:44 +08:00
{
RefreshProxyList();
}
2021-03-10 01:12:07 +08:00
private void EnableSelectedProxies()
2020-05-29 03:32:44 +08:00
{
2021-03-10 01:12:07 +08:00
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
2020-05-29 03:32:44 +08:00
foreach (var item in items)
{
2021-03-10 01:12:07 +08:00
item.ImageIndex = 1;
2020-05-29 03:32:44 +08:00
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
2021-03-10 01:12:07 +08:00
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
2020-05-29 03:32:44 +08:00
}
}
2021-03-10 01:12:07 +08:00
private void DisableSelectedProxies()
2020-12-09 21:19:58 +08:00
{
2021-03-10 01:12:07 +08:00
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
foreach (var item in items)
2020-12-09 21:19:58 +08:00
{
2021-03-10 01:12:07 +08:00
item.ImageIndex = 0;
2020-12-09 21:19:58 +08:00
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
2021-03-10 01:12:07 +08:00
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
2020-12-09 21:19:58 +08:00
}
}
2021-03-10 01:12:07 +08:00
private void DeleteSelectedProxies()
{
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
DisableSelectedProxies();
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
foreach (var item in items) listViewProxies.Items.Remove(item);
}
private void SetProxyForUpdate(SetProxyForm form)
{
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
}
2020-05-29 03:32:44 +08:00
public void RefreshProxyList()
{
2021-03-10 01:12:07 +08:00
var proxies = CmdUtil.GetProxies();
var rules = Program.SqliteDbScope.Rules;
foreach (var proxy in proxies)
2020-05-29 03:32:44 +08:00
{
2021-03-10 01:12:07 +08:00
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
proxy.Id = matchedRule?.Id;
}
2020-05-29 03:32:44 +08:00
2021-03-10 01:12:07 +08:00
var pendingAdds = proxies.Where(x => x.Id == null);
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
Program.SqliteDbScope.AddRange(pendingAdds);
Program.SqliteDbScope.UpdateRange(pendingUpdates);
listViewProxies.Items.Clear();
rules = Program.SqliteDbScope.Rules;
foreach (var rule in rules)
2020-05-29 03:32:44 +08:00
{
2021-03-10 01:12:07 +08:00
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
2020-05-29 03:32:44 +08:00
{
2021-03-10 01:12:07 +08:00
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
});
listViewProxies.Items.Add(item);
2020-05-29 03:32:44 +08:00
}
}
private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)
{
if (sender is ContextMenuStrip _sender)
{
2021-03-10 01:12:07 +08:00
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
2020-05-29 03:32:44 +08:00
if (selected is null || !selected.Enabled) return;
2021-03-10 01:12:07 +08:00
switch (selected)
2020-05-29 03:32:44 +08:00
{
2021-03-10 01:12:07 +08:00
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
case ToolStripMenuItem item when item == toolStripMenuItem_New:
2020-12-09 21:19:58 +08:00
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
SetProxyForm.UseNormalMode();
SetProxyForm.Show();
break;
2021-03-10 01:12:07 +08:00
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
2020-12-09 21:19:58 +08:00
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
SetProxyForUpdate(SetProxyForm);
SetProxyForm.Show();
2020-05-29 03:32:44 +08:00
break;
2021-03-10 01:12:07 +08:00
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
RefreshProxyList();
break;
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
2020-05-29 03:32:44 +08:00
2021-03-10 01:12:07 +08:00
case ToolStripMenuItem item when item == toolStripMenuItem_About:
2020-05-29 03:32:44 +08:00
if (AboutForm == null)
{
2020-05-29 12:37:04 +08:00
AboutForm = new About(this);
2020-05-29 03:32:44 +08:00
AboutForm.Show();
}
else AboutForm.Show();
break;
}
}
}
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
if (sender is ListView _sender)
{
2021-03-10 01:12:07 +08:00
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
2020-12-09 21:19:58 +08:00
}
}
private void listView1_DoubleClick(object sender, EventArgs e)
{
if (sender is ListView _sender)
{
var selectAny = _sender.SelectedItems.OfType<ListViewItem>().Any();
if (selectAny)
{
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
SetProxyForUpdate(SetProxyForm);
SetProxyForm.Show();
}
2020-05-29 03:32:44 +08:00
}
}
2020-12-09 21:19:58 +08:00
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
// Determine if clicked column is already the column that is being sorted.
if (e.Column == lvwColumnSorter.SortColumn)
{
// Reverse the current sort direction for this column.
if (lvwColumnSorter.Order == SortOrder.Ascending)
{
lvwColumnSorter.Order = SortOrder.Descending;
}
else
{
lvwColumnSorter.Order = SortOrder.Ascending;
}
}
else
{
// Set the column number that is to be sorted; default to ascending.
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}
// Perform the sort with these new sort options.
2021-03-10 01:12:07 +08:00
listViewProxies.Sort();
2020-12-09 21:19:58 +08:00
}
2021-03-10 01:12:07 +08:00
2020-05-29 03:32:44 +08:00
}
}