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
|
|
|
|
}
|
|
|
|
|
}
|