Browse Source

update the peer list in place rather than replacing it

Grant Limberg 9 years ago
parent
commit
f3e527e130
2 changed files with 36 additions and 6 deletions
  1. 16 4
      windows/WinUI/PeersPage.xaml.cs
  2. 20 2
      windows/WinUI/ZeroTierPeer.cs

+ 16 - 4
windows/WinUI/PeersPage.xaml.cs

@@ -29,13 +29,25 @@ namespace WinUI
             dataGrid.ItemsSource = peersList;
         }
 
-        public void SetPeers(List<ZeroTierPeer> peerList)
+        public void SetPeers(List<ZeroTierPeer> list)
         {
-            if (peerList == null)
+            if (list == null)
                 return;
 
-            this.peersList = peerList;
-            dataGrid.ItemsSource = this.peersList;
+            
+            foreach(ZeroTierPeer p in list)
+            {
+                ZeroTierPeer curPeer = peersList.Find(peer => peer.Equals(p));
+                if (curPeer == null)
+                {
+                    peersList.Add(p);                    
+                }
+                else
+                {
+                    curPeer.Update(p);
+                }
+            }
+
             dataGrid.Items.Refresh();
         }
     }

+ 20 - 2
windows/WinUI/ZeroTierPeer.cs

@@ -7,7 +7,7 @@ using Newtonsoft.Json;
 
 namespace WinUI
 {
-    public class ZeroTierPeer
+    public class ZeroTierPeer : IEquatable<ZeroTierPeer>
     {
         [JsonProperty("address")]
         public string Address { get; set; }
@@ -57,7 +57,7 @@ namespace WinUI
         public int VersionMinor { get; set; }
 
         [JsonProperty("versionRev")]
-        public int Versionrev { get; set; }
+        public int VersionRev { get; set; }
 
         [JsonProperty("version")]
         public string Version { get; set; }
@@ -94,5 +94,23 @@ namespace WinUI
                 return pathStr;
             }
         }
+
+        public bool Equals(ZeroTierPeer other)
+        {
+            return this.Address.Equals(other.Address, StringComparison.InvariantCultureIgnoreCase);
+        }
+
+        public void Update(ZeroTierPeer other)
+        {
+            _lastUnicast = other._lastUnicast;
+            _lastMulticast = other._lastMulticast;
+            VersionMajor = other.VersionMajor;
+            VersionMinor = other.VersionMinor;
+            VersionRev = other.VersionRev;
+            Version = other.Version;
+            Latency = other.Latency;
+            Role = other.Role;
+            Paths = other.Paths;
+        }
     }
 }