2 // DiracDocController.m
5 // Created by Ichi Kanaya on 11/04/21.
6 // Copyright 2011 大阪大学. All rights reserved.
10 #import "DiracDocController.h"
12 #import "DiracURLLoader.h"
13 #import "DiracStatusXMLParser.h"
15 #define WINDOW_SIZE (24 * 3600)
17 @implementation DiracDocController
24 // Initialization code here.
33 - (void)awakeFromNib {
34 DiracDoc *_doc = (DiracDoc *)doc;
35 [_doc registerMeAsAController: self];
36 timer = [NSTimer scheduledTimerWithTimeInterval: 30 * 60
38 selector: @selector(timer_fire:)
41 [progressIndicator setUsesThreadedAnimation: YES];
44 - (void)timer_fire: (NSTimer *)timer {
48 - (IBAction)reload: (id)sender {
49 NSString *userName = [userNameTextField stringValue];
51 DiracDoc *_doc = (DiracDoc *)doc;
52 _doc.userName = userName;
58 NSString *userName = ((DiracDoc *)doc).userName;
59 [userNameTextField setStringValue: userName];
60 [window setTitle: userName];
61 [self loadTimeLineByUserName: userName];
64 - (void)loadTimeLineByUserName: (NSString *)userName {
65 static NSString *urlFormat = @"http://twitter.com/status/user_timeline/%@.xml";
66 NSString *url = [NSString stringWithFormat: urlFormat, userName];
68 [progressIndicator startAnimation: self];
69 DiracURLLoader *loder = [[[DiracURLLoader alloc] init] autorelease];
70 [[NSNotificationCenter defaultCenter] addObserver: self
71 selector: @selector(loadTimeLineDidEnd:)
72 name: @"connectionDidFinishNotification"
74 [[NSNotificationCenter defaultCenter] addObserver: self
75 selector: @selector(loadTimeLineFailed:)
76 name: @"connectionDidFailWithError"
79 // [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
81 [loder loadFromUrl: url method: @"GET"];
84 - (void) loadTimeLineDidEnd: (NSNotification *)notification {
85 DiracURLLoader *loder = (DiracURLLoader *)[notification object];
86 NSData *xmlData = loder.data;
87 DiracStatusXMLParser *parser = [[[DiracStatusXMLParser alloc] init] autorelease];
88 self.statuses = [parser parseStatuses: xmlData];
90 NSTimeInterval biggest_time_interval = -1;
91 for (NSDictionary *status in statuses) {
92 NSDate *created_date = [NSDate dateWithNaturalLanguageString: [status objectForKey: @"created_at"]];
93 NSTimeInterval interval = [created_date timeIntervalSinceNow];
94 if (interval > -WINDOW_SIZE) {
96 if (interval < biggest_time_interval) {
97 biggest_time_interval = interval;
101 float divider = (-biggest_time_interval < WINDOW_SIZE) ? -biggest_time_interval : WINDOW_SIZE;
102 float diracCount = (float)count / divider * 3600;
103 [levelIndicator setFloatValue: diracCount * 1000];
104 [progressIndicator stopAnimation: self];
105 NSLog(@"%@ is twittering at a speed of %f[dirac].", ((DiracDoc *)doc).userName, diracCount);
108 - (void) loadTimeLineFailed: (NSNotification *)notification {