OSDN Git Service

The first working revision.
[dirac/master.git] / Dirac / DiracDocController.m
1 //
2 //  DiracDocController.m
3 //  Dirac
4 //
5 //  Created by Ichi Kanaya on 11/04/21.
6 //  Copyright 2011 大阪大学. All rights reserved.
7 //
8
9 #import <math.h>
10 #import "DiracDocController.h"
11 #import "DiracDoc.h"
12 #import "DiracURLLoader.h"
13 #import "DiracStatusXMLParser.h"
14
15 #define WINDOW_SIZE (24 * 3600)
16
17 @implementation DiracDocController
18
19 @synthesize statuses;
20
21 - (id)init {
22     self = [super init];
23     if (self) {
24         // Initialization code here.
25     }
26     return self;
27 }
28
29 - (void)dealloc {
30     [super dealloc];
31 }
32
33 - (void)awakeFromNib {
34     DiracDoc *_doc = (DiracDoc *)doc;
35     [_doc registerMeAsAController: self];
36     timer = [NSTimer scheduledTimerWithTimeInterval: 30 * 60
37                                              target: self
38                                            selector: @selector(timer_fire:)
39                                            userInfo: nil
40                                             repeats: YES];
41     [progressIndicator setUsesThreadedAnimation: YES];
42 }
43
44 - (void)timer_fire: (NSTimer *)timer {
45     [self reload: self];
46 }
47
48 - (IBAction)reload: (id)sender {
49     NSString *userName = [userNameTextField stringValue];
50     if (userName) {
51         DiracDoc *_doc = (DiracDoc *)doc;
52         _doc.userName = userName;
53         [self load];
54     }
55 }
56
57 - (void)load {
58     NSString *userName = ((DiracDoc *)doc).userName;
59     [userNameTextField setStringValue: userName];
60     [window setTitle: userName];
61     [self loadTimeLineByUserName: userName];
62 }
63
64 - (void)loadTimeLineByUserName: (NSString *)userName {
65     static NSString *urlFormat = @"http://twitter.com/status/user_timeline/%@.xml";
66     NSString *url = [NSString stringWithFormat: urlFormat, userName];
67     
68     [progressIndicator startAnimation: self];
69     DiracURLLoader *loder = [[[DiracURLLoader alloc] init] autorelease];
70     [[NSNotificationCenter defaultCenter] addObserver: self                         
71                                              selector: @selector(loadTimeLineDidEnd:)
72                                                  name: @"connectionDidFinishNotification"
73                                                object: loder];
74     [[NSNotificationCenter defaultCenter] addObserver: self
75                                              selector: @selector(loadTimeLineFailed:)
76                                                  name: @"connectionDidFailWithError"
77                                                object: loder];
78     
79     // [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
80     
81     [loder loadFromUrl: url method: @"GET"];
82 }
83
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];
89     int count = 0;
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) {
95             ++count;
96             if (interval < biggest_time_interval) {
97                 biggest_time_interval = interval;
98             }
99         }
100     }
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);
106 }
107
108 - (void) loadTimeLineFailed: (NSNotification *)notification {
109     // do something
110 }
111
112 @end