From ee038ca7cfce6b5c1e0edb7b66e4ca30323b6cda Mon Sep 17 00:00:00 2001 From: "Wainaina George (Swagfin)" Date: Fri, 10 Mar 2023 00:03:09 +0300 Subject: [PATCH] chore: minor refactoring --- PortProxyGUI/Data/Rule.cs | 2 +- PortProxyGUI/PortProxyGUI.cs | 38 +++++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/PortProxyGUI/Data/Rule.cs b/PortProxyGUI/Data/Rule.cs index a9816ff..1d3bb9b 100644 --- a/PortProxyGUI/Data/Rule.cs +++ b/PortProxyGUI/Data/Rule.cs @@ -13,7 +13,7 @@ namespace PortProxyGUI.Data public int ConnectPort { get; set; } public string Comment { get; set; } public string Group { get; set; } - public string PingStatus { get; set; } + public string PingStatus { get; set; } = "Checking..."; public bool Valid => ListenPort > 0 && ConnectPort > 0; diff --git a/PortProxyGUI/PortProxyGUI.cs b/PortProxyGUI/PortProxyGUI.cs index 01a3962..f84dfcc 100644 --- a/PortProxyGUI/PortProxyGUI.cs +++ b/PortProxyGUI/PortProxyGUI.cs @@ -1,6 +1,8 @@ using NStandard; using System; +using System.Collections.Generic; using System.Data; +using System.Drawing; using System.Linq; using System.Net.NetworkInformation; using System.Windows.Forms; @@ -13,7 +15,7 @@ namespace PortProxyGUI public SetProxy SetProxyForm; public About AboutForm; private ListViewColumnSorter lvwColumnSorter; - + private List> hostStatus { get; set; } = new List>(); public PortProxyGUI() { InitializeComponent(); @@ -156,7 +158,13 @@ namespace PortProxyGUI new ListViewSubItem(item, rule.ListenPort.ToString()) { Tag = "Number" }, new ListViewSubItem(item, rule.ConnectTo), new ListViewSubItem(item, rule.ConnectPort.ToString ()) { Tag = "Number" }, - new ListViewSubItem(item, rule.PingStatus ?? string.Empty), + new ListViewSubItem(item, rule.PingStatus ?? string.Empty) + { + Tag ="Connect To Ping Status", + ForeColor = rule.PingStatus.Equals("Success") ? Color.Green + : rule.PingStatus.Equals("Checking...") ? Color.DarkGray + : Color.MediumVioletRed + }, new ListViewSubItem(item, rule.Comment ?? string.Empty) }); @@ -324,15 +332,31 @@ namespace PortProxyGUI try { var items = listViewProxies.Items.OfType(); + hostStatus = new List>(); foreach (var item in items) { try { - var rule = ParseRule(item); - //Ping Host - PingCheckerUtil.GetPingResult(rule.ConnectTo, 2, out IPStatus ipStatus, out _, out _); - rule.PingStatus = ipStatus.ToString(); - UpdateListViewItem(item, rule, item.ImageIndex); + //Custom Color for cells + item.UseItemStyleForSubItems = false; + //Proceed + Data.Rule rule = ParseRule(item); + //Check if host already pinged host + var alreadyChkdHost = hostStatus.FirstOrDefault(x => x.Key.Equals(rule.ConnectTo, StringComparison.OrdinalIgnoreCase)); + if (!string.IsNullOrEmpty(alreadyChkdHost.Key)) + { + //Skip Checking Status since already checked + rule.PingStatus = alreadyChkdHost.Value.ToString(); + UpdateListViewItem(item, rule, item.ImageIndex); + } + else + { + //If not yet checked + PingCheckerUtil.GetPingResult(rule.ConnectTo, 2, out IPStatus ipStatus, out _, out _); + hostStatus.Add(new KeyValuePair(rule.ConnectTo, ipStatus)); + rule.PingStatus = ipStatus.ToString(); + UpdateListViewItem(item, rule, item.ImageIndex); + } } catch { } }