// // DiracDocController.m // Dirac // // Created by Ichi Kanaya on 11/04/21. // Copyright 2011 大阪大学. All rights reserved. // #import #import "DiracDocController.h" #import "DiracDoc.h" #import "DiracURLLoader.h" #import "DiracStatusXMLParser.h" #define WINDOW_SIZE (24 * 3600) @implementation DiracDocController @synthesize statuses; - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } - (void)dealloc { [super dealloc]; } - (void)awakeFromNib { DiracDoc *_doc = (DiracDoc *)doc; [_doc registerMeAsAController: self]; timer = [NSTimer scheduledTimerWithTimeInterval: 30 * 60 target: self selector: @selector(timer_fire:) userInfo: nil repeats: YES]; [progressIndicator setUsesThreadedAnimation: YES]; } - (void)timer_fire: (NSTimer *)timer { [self reload: self]; } - (IBAction)reload: (id)sender { NSString *userName = [userNameTextField stringValue]; if (userName) { DiracDoc *_doc = (DiracDoc *)doc; _doc.userName = userName; [self load]; } } - (void)load { NSString *userName = ((DiracDoc *)doc).userName; [userNameTextField setStringValue: userName]; [window setTitle: userName]; [self loadTimeLineByUserName: userName]; } - (void)loadTimeLineByUserName: (NSString *)userName { static NSString *urlFormat = @"http://twitter.com/status/user_timeline/%@.xml"; NSString *url = [NSString stringWithFormat: urlFormat, userName]; [progressIndicator startAnimation: self]; DiracURLLoader *loder = [[[DiracURLLoader alloc] init] autorelease]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(loadTimeLineDidEnd:) name: @"connectionDidFinishNotification" object: loder]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(loadTimeLineFailed:) name: @"connectionDidFailWithError" object: loder]; // [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [loder loadFromUrl: url method: @"GET"]; } - (void) loadTimeLineDidEnd: (NSNotification *)notification { DiracURLLoader *loder = (DiracURLLoader *)[notification object]; NSData *xmlData = loder.data; DiracStatusXMLParser *parser = [[[DiracStatusXMLParser alloc] init] autorelease]; self.statuses = [parser parseStatuses: xmlData]; int count = 0; NSTimeInterval biggest_time_interval = -1; for (NSDictionary *status in statuses) { NSDate *created_date = [NSDate dateWithNaturalLanguageString: [status objectForKey: @"created_at"]]; NSTimeInterval interval = [created_date timeIntervalSinceNow]; if (interval > -WINDOW_SIZE) { ++count; if (interval < biggest_time_interval) { biggest_time_interval = interval; } } } float divider = (-biggest_time_interval < WINDOW_SIZE) ? -biggest_time_interval : WINDOW_SIZE; float diracCount = (float)count / divider * 3600; [levelIndicator setFloatValue: diracCount * 1000]; [progressIndicator stopAnimation: self]; NSLog(@"%@ is twittering at a speed of %f[dirac].", ((DiracDoc *)doc).userName, diracCount); } - (void) loadTimeLineFailed: (NSNotification *)notification { // do something } @end