Take the 2008 Git User's Survey and help out! [ hide ]

public
Description: A buildbot GUI for OS X
Homepage: http://code.google.com/p/buildwatch/
Clone URL: git://github.com/dustin/buildwatch.git
Search Repo:
dustin (author)
Fri Apr 18 15:45:27 -0700 2008
commit  032c1633ed5540b35f8e855ba0b5c7ca2bd86daf
tree    45b9b129d37e93b55bd3de554b2021d4072abeb9
parent  8e51f56ee75f8449ef2e84e9f8f71cb9f8c45028
buildwatch / MessageBridge.m
100644 191 lines (168 sloc) 6.033 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//
// MessageBridge.m
// BuildWatch
//
// Created by Dustin Sallings on 3/5/08.
// Copyright 2008 Dustin Sallings <dustin@spy.net>. All rights reserved.
//
 
#import "MessageBridge.h"
#import "Builder.h"
#import "keyboard_leds.h"
 
@implementation MessageBridge
 
-(id)init {
    id rv=[super init];
    builderDict=[[NSMutableDictionary alloc] initWithCapacity:10];
    return rv;
}
 
-(void)builderAdded:(NSString *)buildername {
    NSLog(@"Added builder %@", buildername);
    Builder *b=[[Builder alloc] init];
    [b setName:buildername];
    [builders addObject:b];
    [builderDict setObject:b forKey:buildername];
}
 
-(void)builderRemoved:(NSString *)buildername {
    NSLog(@"Removed builder %@", buildername);
    [builders removeObject: [builderDict objectForKey:buildername]];
    [builderDict removeObjectForKey:buildername];
}
 
-(void)disconnected:(id)sender {
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    [builders removeObjects:[builderDict allValues]];
    [builderDict removeAllObjects];
    [pool release];
}
 
-(void)builderChangedState:(NSString *)buildername state:(NSString *)state eta:(NSString *)eta {
    NSLog(@"Builder %@ changed state to %@. Eta is %@", buildername, state, eta);
    [[builderDict valueForKey:buildername] setStatus:state];
}
 
-(void)buildStarted:(NSString *)buildername {
    NSLog(@"A build started on %@", buildername);
    [GrowlApplicationBridge
        notifyWithTitle:@"Starting Build"
        description:buildername
        notificationName:@"BuildStarted"
        iconData:nil
        priority:0
        isSticky:NO
        clickContext:nil];
}
 
-(void)buildFinished:(NSString *)buildername result:(int)result {
    NSLog(@"A build finished on %@ -- result: %d", buildername, result);
    Builder *b=[builderDict valueForKey:buildername];
    [b setLastBuildResult:result];
    [b setEta:nil];
    [b setStepeta:nil];
    if(result == 0) {
        [GrowlApplicationBridge
            notifyWithTitle:@"Completed Build"
            description:buildername
            notificationName:@"BuildSuccess"
            iconData:nil
            priority:0
            isSticky:NO
            clickContext:nil];
    } else {
        if([[NSUserDefaults standardUserDefaults] boolForKey:@"location"]) {
            manipulate_led(kHIDUsage_LED_CapsLock, 1);
        }
        [GrowlApplicationBridge
            notifyWithTitle:@"Build Failure"
            description:buildername
            notificationName:@"BuildFailed"
            iconData:nil
            priority:2
            isSticky:YES
            clickContext:@"Failure Notice"];
    }
}
 
-(void)buildETAUpdate:(NSString *)buildername eta:(NSString *)eta {
    NSLog(@"ETA update for %@: %@", buildername, eta);
    if(eta != nil) {
        Builder *b=[builderDict valueForKey:buildername];
        [b setEta:[NSDate dateWithTimeIntervalSinceNow: [eta doubleValue]]];
    }
}
 
-(void)stepStarted:(NSString *)buildername stepname:(NSString *)stepname {
    NSLog(@"Build %@ started step %@", buildername, stepname);
    [[builderDict valueForKey:buildername] setStep:stepname];
    [GrowlApplicationBridge
        notifyWithTitle:@"Started Step"
        description:[NSString stringWithFormat:@"Step %@ on builder %@", stepname, buildername]
        notificationName:@"StepStarted"
        iconData:nil
        priority:0
        isSticky:NO
        clickContext:nil];
}
 
-(void)stepFinished:(NSString *)buildername
    stepname:(NSString *)stepname result:(int)result {
    NSLog(@"Build %@ completed step %@ with %d", buildername, stepname, result);
    [[builderDict valueForKey:buildername] setStep:nil];
    if(result == 0) {
        [GrowlApplicationBridge
            notifyWithTitle:@"Completed Step"
            description:[NSString stringWithFormat:@"Step %@ on builder %@", stepname, buildername]
            notificationName:@"StepSuccess"
            iconData:nil
            priority:0
            isSticky:NO
            clickContext:nil];
    } else {
        [GrowlApplicationBridge
            notifyWithTitle:@"Step Failure"
            description:[NSString stringWithFormat:@"Step %@ on builder %@", stepname, buildername]
            notificationName:@"StepFailed"
            iconData:nil
            priority:2
            isSticky:YES
            clickContext:nil];
    }
}
 
-(void)stepETAUpdate:(NSString *)buildername
    stepname:(NSString *)stepname eta:(NSString *)eta {
    NSLog(@"Step ETA update for %@ on %@: %@", stepname, buildername, eta);
    if(eta != nil) {
        Builder *b=[builderDict valueForKey:buildername];
        [b setStepeta:[NSDate dateWithTimeIntervalSinceNow: [eta doubleValue]]];
    }
}
 
- (NSDictionary *) registrationDictionaryForGrowl
{
    NSLog(@"Growl wants to know what kinda stuff we do.");
 
    NSArray *allNotifications=[[NSArray alloc] initWithObjects:
        @"BuildStarted", @"BuildSuccess", @"BuildFailed", @"StepStarted",
        @"StepSuccess", @"StepFailed", nil];
    NSArray *defaultNotifications=[[NSArray alloc] initWithObjects:
        @"BuildFailed", @"StepFailed", nil];
 
    NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:
        allNotifications, GROWL_NOTIFICATIONS_ALL,
        defaultNotifications, GROWL_NOTIFICATIONS_DEFAULT,
        nil];
 
    NSLog(@"Telling it %@", dict);
 
    [allNotifications release];
    [defaultNotifications release];
    [dict autorelease];
    return(dict);
}
 
-(void)growlIsReady
{
    NSLog(@"growl is ready");
}
 
-(NSString *)applicationNameForGrowl
{
    return(@"BuildWatch");
}
 
-(void)growlNotificationWasClicked:(id)clickContext
{
    NSLog(@"Hey! Someone clicked on the notification: %@", clickContext);
    if([[NSUserDefaults standardUserDefaults] boolForKey:@"location"]) {
        manipulate_led(kHIDUsage_LED_CapsLock, 0);
    }
}
 
-(void)awakeFromNib {
    [GrowlApplicationBridge setGrowlDelegate:self];
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(disconnected:) name:@"disconnected" object:nil];
}
 
@end