diff options
-rw-r--r-- | ZeroTier One/AppDelegate.m | 13 | ||||
-rw-r--r-- | ZeroTier One/JoinNetworkViewController.m | 6 | ||||
-rw-r--r-- | ZeroTier One/NetworkInfoCell.m | 12 | ||||
-rw-r--r-- | ZeroTier One/NetworkMonitor.m | 37 | ||||
-rw-r--r-- | ZeroTier One/ServiceCom.h | 1 | ||||
-rw-r--r-- | ZeroTier One/ServiceCom.m | 131 |
6 files changed, 183 insertions, 17 deletions
diff --git a/ZeroTier One/AppDelegate.m b/ZeroTier One/AppDelegate.m index 048fa385..a0012838 100644 --- a/ZeroTier One/AppDelegate.m +++ b/ZeroTier One/AppDelegate.m @@ -271,8 +271,11 @@ [[ServiceCom sharedInstance] leaveNetwork:nwid error:&error]; if (error) { - // TODO: Display error message + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Ok"]; + [alert runModal]; } } else { @@ -283,7 +286,13 @@ allowDefault:(network.allowDefault && ![Network defaultRouteExists:self.networks]) error:&error]; - // TODO: Display error message + if (error) { + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Ok"]; + + [alert runModal]; + } } } diff --git a/ZeroTier One/JoinNetworkViewController.m b/ZeroTier One/JoinNetworkViewController.m index f91589d9..e75cc841 100644 --- a/ZeroTier One/JoinNetworkViewController.m +++ b/ZeroTier One/JoinNetworkViewController.m @@ -80,7 +80,11 @@ NSString * const JoinedNetworksKey = @"com.zerotier.one.joined-networks"; error:&error]; if(error) { - // TODO: display error message + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Ok"]; + + [alert runModal]; return; } diff --git a/ZeroTier One/NetworkInfoCell.m b/ZeroTier One/NetworkInfoCell.m index 6ffb9e71..b37fa8a8 100644 --- a/ZeroTier One/NetworkInfoCell.m +++ b/ZeroTier One/NetworkInfoCell.m @@ -50,7 +50,11 @@ error:&error]; if (error) { - // TODO: Display error message + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Ok"]; + + [alert runModal]; } } @@ -60,7 +64,11 @@ [[ServiceCom sharedInstance] leaveNetwork:nwid error:&error]; if (error) { - // TODO: Display error message + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Ok"]; + + [alert runModal]; } } diff --git a/ZeroTier One/NetworkMonitor.m b/ZeroTier One/NetworkMonitor.m index 59451325..e219e762 100644 --- a/ZeroTier One/NetworkMonitor.m +++ b/ZeroTier One/NetworkMonitor.m @@ -11,6 +11,9 @@ #import "ServiceCom.h" #import "NodeStatus.h" +@import AppKit; + + NSString * const NetworkUpdateKey = @"com.zerotier.one.network-list"; NSString * const StatusUpdateKey = @"com.zerotier.one.status"; @@ -85,9 +88,22 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status"; } error:&error]; if(error) { - // TODO: Display error message - [self stop]; + + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res = [alert runModal]; + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + } + else if(res == NSAlertSecondButtonReturn) { + [self start]; + return; + } } [[ServiceCom sharedInstance] getNodeStatus:^(NodeStatus *status) { @@ -101,9 +117,22 @@ NSString * const StatusUpdateKey = @"com.zerotier.one.status"; } error:&error]; if (error) { - // TODO: Display error message - [self stop]; + + NSAlert *alert = [NSAlert alertWithError:error]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res = [alert runModal]; + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + } + else if(res == NSAlertSecondButtonReturn) { + [self start]; + return; + } } } diff --git a/ZeroTier One/ServiceCom.h b/ZeroTier One/ServiceCom.h index b24dd4a2..b7ef8dda 100644 --- a/ZeroTier One/ServiceCom.h +++ b/ZeroTier One/ServiceCom.h @@ -15,6 +15,7 @@ { NSString *baseURL; NSURLSession *session; + BOOL _isQuitting; } + (ServiceCom*)sharedInstance; diff --git a/ZeroTier One/ServiceCom.m b/ZeroTier One/ServiceCom.m index 46468e25..7c1b38be 100644 --- a/ZeroTier One/ServiceCom.m +++ b/ZeroTier One/ServiceCom.m @@ -10,6 +10,7 @@ #import "AuthtokenCopy.h" #import "Network.h" #import "NodeStatus.h" +@import AppKit; @interface ServiceCom (Private) @@ -34,6 +35,7 @@ if(self) { baseURL = @"http://localhost:9993"; session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; + _isQuitting = NO; } return self; @@ -171,24 +173,62 @@ NSURL *url = [NSURL URLWithString:urlString]; NSURLSessionDataTask *task = [session dataTaskWithURL:url - completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - if (error) { - NSLog(@"Error: %@", error); + if (err) { + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + _isQuitting = YES; + } + }]; return; } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; NSInteger status = [httpResponse statusCode]; - NSError *err; + NSError *err2; if (status == 200) { NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 - error:&err]; + error:&err2]; if (err) { - NSLog(@"Error fetching network list: %@", err); + NSLog(@"Error fetching network list: %@", err2); + + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err2]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + _isQuitting = YES; + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + } + }]; return; } @@ -218,7 +258,25 @@ completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { if(err) { - NSLog(@"Error: %@", err); + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + _isQuitting = YES; + } + }]; return; } @@ -233,6 +291,25 @@ if(err2) { NSLog(@"Error fetching node status: %@", err2); + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err2]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + _isQuitting = YES; + } + }]; return; } @@ -282,8 +359,27 @@ NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - if(error) { + if(err) { NSLog(@"Error posting join request: %@", err); + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + _isQuitting = YES; + } + }]; } NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; @@ -320,6 +416,25 @@ [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { if(err) { NSLog(@"Error posting delete request: %@", err); + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + NSAlert *alert = [NSAlert alertWithError:err]; + alert.alertStyle = NSCriticalAlertStyle; + [alert addButtonWithTitle:@"Quit"]; + [alert addButtonWithTitle:@"Retry"]; + + NSModalResponse res; + if (!_isQuitting) { + res = [alert runModal]; + } + else { + return; + } + + if(res == NSAlertFirstButtonReturn) { + [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; + _isQuitting = YES; + } + }]; return; } |