From caeebacb4b11ae98cfe0ef613dc2a98fafb5c251 Mon Sep 17 00:00:00 2001 From: Matthieu Lalonde Date: Sat, 4 Jun 2011 10:08:54 -0400 Subject: [PATCH] Added clients status and copying of menu items --- DDWRT_MonitorAppDelegate.h | 12 +++-- DDWRT_MonitorAppDelegate.m | 98 ++++++++++++++++++++++++++++++++++- English.lproj/MainMenu.xib | 103 +++++++++++++++++++++++++++++++++++-- 3 files changed, 202 insertions(+), 11 deletions(-) diff --git a/DDWRT_MonitorAppDelegate.h b/DDWRT_MonitorAppDelegate.h index f6608a3..8a09ddd 100644 --- a/DDWRT_MonitorAppDelegate.h +++ b/DDWRT_MonitorAppDelegate.h @@ -34,7 +34,6 @@ IBOutlet id menuUptime; IBOutlet id menuLoad; IBOutlet id menuWanIP; - IBOutlet id menuConnections; IBOutlet id menuWanStatus; IBOutlet id menuWanUptime; @@ -50,6 +49,12 @@ IBOutlet id menuWanDNSItem2; IBOutlet id menuWanBandwidthGraph; + + IBOutlet id menuClients; + IBOutlet id menuClientsCount; + IBOutlet id menuClientsConnections; + IBOutlet id menuClientsSeparator; + NSUserDefaults *defaults; // application prefs: @@ -109,15 +114,14 @@ - (IBAction) refreshWanMenu:(id)sender; - (void) wanRequestCallback:(NSData *)data; - (IBAction) refreshClientsMenu:(id)sender; +- (void) cbClientsRequest:(NSData*)data; - (void) saveConfig:(id)sender; - (void) updateThroughput:(NSTimer*)timer; - (void) throughputCallback:(NSData *)data; - (void) doUpdateStatus:(NSData *)data; +- (IBAction) copyParentMenuTitle:(id)sender; - (NSString *) stringFromFileSize:(unsigned long long)theSize; -//@property (assign) IBOutlet NSWindow *window; - -- (void) connection:(NSURLConnection*)connection didReceiveData:(NSData*)data; @end diff --git a/DDWRT_MonitorAppDelegate.m b/DDWRT_MonitorAppDelegate.m index cea6d50..818b746 100644 --- a/DDWRT_MonitorAppDelegate.m +++ b/DDWRT_MonitorAppDelegate.m @@ -407,7 +407,7 @@ [menuUptime setTitle:uptime]; [menuLoad setTitle:load]; [menuLoad setHidden:false]; - [menuConnections setTitle:[NSString stringWithFormat:@"Connections: %@", ipconn]]; + [menuClientsConnections setTitle:[NSString stringWithFormat:@"%@ Connection%@", ipconn, ([ipconn isEqualToString:@"1"] ? @"" : @"s")]]; [wrt_client getStatusUpdate:@"Status_Internet.live.asp" delegate:self callback:@selector(wanRequestCallback:)]; } @@ -506,7 +506,101 @@ - (void) refreshClientsMenu:(id)sender { - //[self updateThroughput:nil]; + [wrt_client getStatusUpdate:@"Status_Lan.live.asp" delegate:self callback:@selector(cbClientsRequest:)]; +} + +- (void) cbClientsRequest:(NSData*)data +{ + NSString * clientsStringData; + + NSString *stringData = [ [NSString alloc] initWithData:data encoding:NSASCIIStringEncoding ]; + NSString *keyData = @"{arp_table::"; + + clientsStringData = [ stringData substringFromIndex:([stringData rangeOfString:keyData].location + [keyData length]) ]; + clientsStringData = [ clientsStringData substringToIndex:[clientsStringData rangeOfString:@"}"].location ]; + + // Remove any white spaces + NSArray *parts = [clientsStringData componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + NSArray *filteredArray = [parts filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]]; + clientsStringData = [filteredArray componentsJoinedByString:@" "]; + parts = nil; + filteredArray = nil; + + // Remove any quotes + parts = [clientsStringData componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\'"]]; + filteredArray = [parts filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]]; + clientsStringData = [filteredArray componentsJoinedByString:@""]; + + NSArray *clientsData = [clientsStringData componentsSeparatedByString:@","]; + + long clientIndex; + NSMenu *clientMenu; + NSMenu *copyMenu; + NSMenuItem *copyMenuItem; + NSMenuItem *clientMenuItem; + NSMenuItem *clientItem; + + unsigned long clientsCount = [clientsData count] / 4; + [menuClientsCount setTitle:[NSString stringWithFormat:@"%lu Active Client%@", clientsCount, (clientsCount > 1 ? @"s" : @"")]]; + + for (clientIndex = 0; clientIndex < [clientsData count]; clientIndex+=4) { + NSLog(@"Client: %@ IP: %@ MAC: %@ Connections: %@", + [clientsData objectAtIndex:clientIndex], + [clientsData objectAtIndex:clientIndex+1], + [clientsData objectAtIndex:clientIndex+2], + [clientsData objectAtIndex:clientIndex+3]); + + clientMenu = [[NSMenu alloc] init]; + + // Hostname + copyMenu = [[NSMenu alloc] init]; + copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""]; + [copyMenuItem setEnabled:true]; + [copyMenuItem setTarget:self]; + [copyMenu addItem:copyMenuItem]; + + clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:clientIndex] action:nil keyEquivalent:@""]; + [clientMenuItem setSubmenu:copyMenu]; + [clientMenu addItem:clientMenuItem]; + + // IP + copyMenu = [[NSMenu alloc] init]; + copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""]; + [copyMenuItem setEnabled:true]; + [copyMenuItem setTarget:self]; + [copyMenu addItem:copyMenuItem]; + + clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+1)] action:nil keyEquivalent:@""]; + [clientMenuItem setSubmenu:copyMenu]; + [clientMenu addItem:clientMenuItem]; + + // MAC + copyMenu = [[NSMenu alloc] init]; + copyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Copy" action:@selector(copyParentMenuTitle:) keyEquivalent:@""]; + [copyMenuItem setEnabled:true]; + [copyMenuItem setTarget:self]; + [copyMenu addItem:copyMenuItem]; + + clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+2)] action:nil keyEquivalent:@""]; + [clientMenuItem setSubmenu:copyMenu]; + [clientMenu addItem:clientMenuItem]; + + // Connections + clientMenuItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:(clientIndex+3)] action:nil keyEquivalent:@""]; + [clientMenu addItem:clientMenuItem]; + + clientItem = [[NSMenuItem alloc] initWithTitle:[clientsData objectAtIndex:clientIndex] action:nil keyEquivalent:@""]; + [clientItem setSubmenu:clientMenu]; + + [menuClients addItem:clientItem]; + } +} + +- (IBAction) copyParentMenuTitle:(id)sender +{ + NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; + [pasteBoard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, nil] owner: nil]; + [pasteBoard setString:[[sender parentItem] title] forType:NSStringPboardType]; } - (NSString *) stringFromFileSize:(unsigned long long)theSize diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 0d12eaf..e12839e 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -353,7 +353,7 @@ YES - Clients: 0 + clients-count 2147483647 @@ -380,6 +380,7 @@ + YES host-list-item 2147483647 @@ -1514,6 +1515,70 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 814 + + + menuClientsCount + + + + 816 + + + + menuClientsSeparator + + + + 817 + + + + menuClients + + + + 818 + + + + menuClientsConnections + + + + 819 + + + + copyParentMenuTitle: + + + + 820 + + + + copyParentMenuTitle: + + + + 821 + + + + copyParentMenuTitle: + + + + 822 + + + + copyParentMenuTitle: + + + + 823 + @@ -2566,7 +2631,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - 814 + 823 @@ -2578,6 +2643,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES YES + copyParentMenuTitle: refreshClientsMenu: refreshMenu: refreshSystemMenu: @@ -2589,12 +2655,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA id id id + id YES YES + copyParentMenuTitle: refreshClientsMenu: refreshMenu: refreshSystemMenu: @@ -2602,6 +2670,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES + + copyParentMenuTitle: + id + refreshClientsMenu: id @@ -2640,7 +2712,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA configLabelRefresh configLabelStatus configStateStatus - menuConnections + menuClients + menuClientsConnections + menuClientsCount + menuClientsSeparator menuLoad menuUptime menuWanBandwidthGraph @@ -2687,6 +2762,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA id id id + id + id + id @@ -2709,7 +2787,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA configLabelRefresh configLabelStatus configStateStatus - menuConnections + menuClients + menuClientsConnections + menuClientsCount + menuClientsSeparator menuLoad menuUptime menuWanBandwidthGraph @@ -2791,7 +2872,19 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSProgressIndicator - menuConnections + menuClients + id + + + menuClientsConnections + id + + + menuClientsCount + id + + + menuClientsSeparator id