summaryrefslogtreecommitdiff
path: root/macui/ZeroTier One
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2016-11-15 16:55:24 -0800
committerGrant Limberg <grant.limberg@zerotier.com>2016-11-15 16:55:24 -0800
commit456c7ca66117c55444631ebd706afc9f26ab2cd4 (patch)
tree0119e8ad819ff49ad925461aa51d4231f14bc3ad /macui/ZeroTier One
parentbab75186f5538ab9a188569793d24fb393e2e078 (diff)
downloadinfinitytier-456c7ca66117c55444631ebd706afc9f26ab2cd4.tar.gz
infinitytier-456c7ca66117c55444631ebd706afc9f26ab2cd4.zip
only changed items in the full network list are updated now
Diffstat (limited to 'macui/ZeroTier One')
-rw-r--r--macui/ZeroTier One/Network.h6
-rw-r--r--macui/ZeroTier One/Network.m59
-rw-r--r--macui/ZeroTier One/ShowNetworksViewController.h2
-rw-r--r--macui/ZeroTier One/ShowNetworksViewController.m40
4 files changed, 103 insertions, 4 deletions
diff --git a/macui/ZeroTier One/Network.h b/macui/ZeroTier One/Network.h
index 0f3c4964..957ff8d5 100644
--- a/macui/ZeroTier One/Network.h
+++ b/macui/ZeroTier One/Network.h
@@ -59,4 +59,10 @@ enum NetworkType {
- (NSString*)statusString;
- (NSString*)typeString;
+- (BOOL)hasSameNetworkId:(UInt64)networkId;
+
+- (BOOL)isEqualToNetwork:(Network*)network;
+- (BOOL)isEqual:(id)object;
+- (NSUInteger)hash;
+
@end
diff --git a/macui/ZeroTier One/Network.m b/macui/ZeroTier One/Network.m
index 16efc6e3..8474acaa 100644
--- a/macui/ZeroTier One/Network.m
+++ b/macui/ZeroTier One/Network.m
@@ -275,4 +275,63 @@ NSString *NetworkAllowDefaultKey = @"allowDefault";
}
}
+- (BOOL)hasSameNetworkId:(UInt64)networkId
+{
+ return self.nwid == networkId;
+}
+
+- (BOOL)isEqualToNetwork:(Network*)network
+{
+ return [self.assignedAddresses isEqualToArray:network.assignedAddresses] &&
+ self.bridge == network.bridge &&
+ self.broadcastEnabled == network.broadcastEnabled &&
+ self.dhcp == network.dhcp &&
+ [self.mac isEqualToString:network.mac] &&
+ self.mtu == network.mtu &&
+ self.netconfRevision == network.netconfRevision &&
+ [self.name isEqualToString:network.name] &&
+ self.nwid == network.nwid &&
+ [self.portDeviceName isEqualToString:network.portDeviceName] &&
+ self.status == network.status &&
+ self.type == network.type &&
+ self.allowManaged == network.allowManaged &&
+ self.allowGlobal == network.allowGlobal &&
+ self.allowDefault == network.allowDefault &&
+ self.connected == network.connected;
+}
+
+- (BOOL)isEqual:(id)object
+{
+ if (self == object) {
+ return YES;
+ }
+
+ if (![object isKindOfClass:[Network class]]) {
+ return NO;
+ }
+
+ return [self isEqualToNetwork:object];
+}
+
+- (NSUInteger)hash
+{
+ return [self.assignedAddresses hash] ^
+ self.bridge ^
+ self.broadcastEnabled ^
+ self.dhcp ^
+ [self.mac hash] ^
+ self.mtu ^
+ self.netconfRevision ^
+ [self.name hash] ^
+ self.nwid ^
+ [self.portDeviceName hash] ^
+ self.portError ^
+ self.status ^
+ self.type ^
+ self.allowManaged ^
+ self.allowGlobal ^
+ self.allowDefault ^
+ self.connected;
+}
+
@end
diff --git a/macui/ZeroTier One/ShowNetworksViewController.h b/macui/ZeroTier One/ShowNetworksViewController.h
index 5c251674..6138958d 100644
--- a/macui/ZeroTier One/ShowNetworksViewController.h
+++ b/macui/ZeroTier One/ShowNetworksViewController.h
@@ -23,7 +23,7 @@
@interface ShowNetworksViewController : NSViewController<NSTableViewDelegate, NSTableViewDataSource>
-@property (nonatomic) NSArray<Network*> *networkList;
+@property (nonatomic) NSMutableArray<Network*> *networkList;
@property (nonatomic) NetworkMonitor *netMonitor;
@property (nonatomic) BOOL visible;
diff --git a/macui/ZeroTier One/ShowNetworksViewController.m b/macui/ZeroTier One/ShowNetworksViewController.m
index e3a1e52c..8ca32ed0 100644
--- a/macui/ZeroTier One/ShowNetworksViewController.m
+++ b/macui/ZeroTier One/ShowNetworksViewController.m
@@ -21,6 +21,17 @@
#import "NetworkInfoCell.h"
#import "Network.h"
+BOOL hasNetworkWithID(NSArray<Network*> *list, UInt64 nwid)
+{
+ for(Network *n in list) {
+ if(n.nwid == nwid) {
+ return YES;
+ }
+ }
+
+ return NO;
+}
+
@interface ShowNetworksViewController ()
@end
@@ -30,6 +41,8 @@
- (void)viewDidLoad {
[super viewDidLoad];
+ self.networkList = [NSMutableArray array];
+
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
[self.tableView setBackgroundColor:[NSColor clearColor]];
@@ -50,9 +63,30 @@
}
- (void)setNetworks:(NSArray<Network *> *)list {
- _networkList = list;
- if(_visible) {
- [_tableView reloadData];
+ for (Network *n in list) {
+ if ([_networkList containsObject:n]) {
+ // don't need to do anything here. Already an identical object in the list
+ continue;
+ }
+ else {
+ // network not in the list based on equality. Did an object change? or is it a new item?
+ if (hasNetworkWithID(_networkList, n.nwid)) {
+
+ for (int i = 0; i < [_networkList count]; ++i) {
+ Network *n2 = [_networkList objectAtIndex:i];
+ if (n.nwid == n2.nwid)
+ {
+ [_networkList replaceObjectAtIndex:i withObject:n];
+ [_tableView reloadDataForRowIndexes:[NSIndexSet indexSetWithIndex:i]
+ columnIndexes:[NSIndexSet indexSetWithIndex:0]];
+ }
+ }
+ }
+ else {
+ [_networkList addObject:n];
+ [_tableView reloadData];
+ }
+ }
}
}