Now reads from Google's API instead of the Apache location due to the Apache location being deprecated.

This commit is contained in:
GRMrGecko 2011-09-15 20:54:40 -05:00
parent b2a45eef97
commit cd98c92b94
4 changed files with 1123 additions and 1053 deletions

View File

@ -43,6 +43,8 @@ extern NSString * const MGMQuitAfterLaunch;
NSMutableDictionary *channelRevisions;
NSString *chromiumPath;
NSMutableArray *revisionsArray;
IBOutlet NSPopUpButton *channelPopUp;
IBOutlet NSTextField *buildWarningField;
IBOutlet NSPopUpButton *buildPopUp;

View File

@ -43,7 +43,8 @@ NSString * const MGMChromiumZip = @"chrome-mac.zip";
NSString * const MGMTMPPath = @"/tmp";
NSString * const MGMChannelsURL = @"http://omahaproxy.appspot.com/all.json?os=mac";
static NSString *MGMSnapshotURL = @"http://build.chromium.org/f/chromium/snapshots/Mac/";
static NSString *MGMSnapshotURL = @"https://commondatastorage.googleapis.com/chromium-browser-snapshots/";
NSString * const MGMSnapshotPrefix = @"Mac/";
NSString * const MGMSVNLogsURL = @"http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&range=%@:%@&mode=html&os=mac";
NSString * const MGMCChannel = @"channel";
@ -57,6 +58,27 @@ NSString * const MGMUBUpdate = @"Update";
NSString * const MGMUBInstall = @"Install";
NSString * const MGMUBCancel = @"Cancel";
@interface NSString (MGMAddonsSort)
- (NSComparisonResult)numberCompare:(id)theItem;
@end
@implementation NSString (MGMAddonsSort)
- (NSComparisonResult)numberCompare:(id)theItem {
unsigned int theNumber = 0;
unsigned int number = 0;
if ([theItem isKindOfClass:[NSString class]])
sscanf([theItem UTF8String], "%u", &theNumber);
sscanf([self UTF8String], "%u", &number);
if (number<theNumber)
return NSOrderedAscending;
else if (number>theNumber)
return NSOrderedDescending;
return NSOrderedSame;
}
@end
@interface NSOpenPanel (MGMIgnore)
- (void)setDirectoryURL:(NSURL *)url;
- (void)setDirectory:(NSString *)path;
@ -131,7 +153,9 @@ NSString * const MGMUBCancel = @"Cancel";
[handler setFailWithError:@selector(channels:didFailWithError:)];
[handler setFinish:@selector(channelsFinished:)];
[connectionManager addHandler:handler];
handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:MGMSnapshotURL]] delegate:self];
revisionsArray = [NSMutableArray new];
NSString *url = [MGMSnapshotURL stringByAppendingFormat:@"?delimiter=/&prefix=%@", MGMSnapshotPrefix];
handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] delegate:self];
[handler setFailWithError:@selector(revisions:didFailWithError:)];
[handler setFinish:@selector(revisionsFinished:)];
[connectionManager addHandler:handler];
@ -192,42 +216,86 @@ NSString * const MGMUBCancel = @"Cancel";
[alert setMessageText:@"Error loading revisions"];
[alert setInformativeText:[theError localizedDescription]];
[alert runModal];
}
- (void)revisionsFinished:(MGMURLBasicHandler *)theHandler {
NSString *returnedString = [theHandler string];
[buildPopUp removeAllItems];
[progress setDoubleValue:0.50];
NSMenu *items = [NSMenu new];
unsigned long length = [returnedString length];
NSRange range = NSMakeRange(0, length);
while (range.location!=length) {
NSRange urlRange = [returnedString rangeOfString:@"/\">" options:0 range:range];
if (urlRange.location==NSNotFound)
break;
range.location = urlRange.location+urlRange.length;
range.length = length-range.location;
urlRange = [returnedString rangeOfString:@"</a>" options:0 range:range];
if (urlRange.location==NSNotFound)
continue;
NSRange revisionRange = NSMakeRange(range.location, urlRange.location-range.location);
range.location = urlRange.location+urlRange.length;
range.length = length-range.location;
urlRange = [returnedString rangeOfString:@"/" options:0 range:revisionRange];
if (urlRange.location==NSNotFound)
continue;
revisionRange.length -= 1;
[revisionsArray sortUsingSelector:@selector(numberCompare:)];
for (unsigned int i=0; i<[revisionsArray count]; i++) {
NSMenuItem *item = [NSMenuItem new];
[item setTitle:[returnedString substringWithRange:revisionRange]];
[item setTitle:[revisionsArray objectAtIndex:i]];
[items addItem:item];
[item release];
}
[buildPopUp removeAllItems];
[buildPopUp setMenu:items];
[items release];
[revisionsArray release];
revisionsArray = nil;
[self channelSelect:self];
}
- (void)revisionsFinished:(MGMURLBasicHandler *)theHandler {
NSError *error = nil;
NSXMLDocument *xml = [[NSXMLDocument alloc] initWithData:[theHandler data] options:NSXMLDocumentTidyXML error:&error];
[progress setDoubleValue:0.50];
if (error!=nil) {
NSLog(@"%@", error);
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error parsing revisions"];
[alert setInformativeText:[error localizedDescription]];
[alert runModal];
NSMenu *items = [NSMenu new];
[revisionsArray sortUsingSelector:@selector(numberCompare:)];
for (unsigned int i=0; i<[revisionsArray count]; i++) {
NSMenuItem *item = [NSMenuItem new];
[item setTitle:[revisionsArray objectAtIndex:i]];
[items addItem:item];
[item release];
}
[buildPopUp removeAllItems];
[buildPopUp setMenu:items];
[items release];
[revisionsArray release];
revisionsArray = nil;
[self channelSelect:self];
} else {
NSXMLElement *rootElement = [xml rootElement];
NSArray *isTruncated = [rootElement elementsForName:@"IsTruncated"];
NSArray *commonPrefixes = [rootElement elementsForName:@"CommonPrefixes"];
for (int i=0; i<[commonPrefixes count]; i++) {
NSArray *prefix = [[commonPrefixes objectAtIndex:i] elementsForName:@"Prefix"];
if ([prefix count]<1)
continue;
NSArray *parsed = [[[prefix objectAtIndex:0] stringValue] componentsSeparatedByString:@"/"];
if ([parsed count]<2)
continue;
[revisionsArray addObject:[parsed objectAtIndex:1]];
}
NSArray *nextMarkers = [rootElement elementsForName:@"NextMarker"];
if ([isTruncated count]>0 && [[[isTruncated objectAtIndex:0] stringValue] isEqual:@"true"] && [nextMarkers count]>0) {
NSString *nextMarker = [[nextMarkers objectAtIndex:0] stringValue];
NSString *url = [MGMSnapshotURL stringByAppendingFormat:@"?delimiter=/&prefix=%@&marker=%@", MGMSnapshotPrefix, nextMarker];
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] delegate:self];
[handler setFailWithError:@selector(revisions:didFailWithError:)];
[handler setFinish:@selector(revisionsFinished:)];
[connectionManager addHandler:handler];
} else {
NSMenu *items = [NSMenu new];
[revisionsArray sortUsingSelector:@selector(numberCompare:)];
for (unsigned int i=0; i<[revisionsArray count]; i++) {
NSMenuItem *item = [NSMenuItem new];
[item setTitle:[revisionsArray objectAtIndex:i]];
[items addItem:item];
[item release];
}
[buildPopUp removeAllItems];
[buildPopUp setMenu:items];
[items release];
[revisionsArray release];
revisionsArray = nil;
[self channelSelect:self];
}
}
[xml release];
}
- (IBAction)channelSelect:(id)sender {
[[NSUserDefaults standardUserDefaults] setInteger:[channelPopUp indexOfSelectedItem] forKey:MGMChannel];
@ -247,7 +315,7 @@ NSString * const MGMUBCancel = @"Cancel";
if (itemIndex==NSNotFound) {
[buildWarningField setHidden:NO];
for (unsigned int i=0; i<[revisions count]; i++) {
if ([(NSString *)[revisions objectAtIndex:i] compare:revision]==NSOrderedDescending) {
if ([(NSString *)[revisions objectAtIndex:i] numberCompare:revision]==NSOrderedDescending) {
itemIndex = i;
break;
}
@ -263,7 +331,7 @@ NSString * const MGMUBCancel = @"Cancel";
[self buildSelect:self];
}
- (IBAction)buildSelect:(id)sender {
NSURL *buildURL = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:@"REVISIONS"];
NSURL *buildURL = [[[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:MGMSnapshotPrefix] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:@"REVISIONS"];
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:buildURL] delegate:self];
[handler setFailWithError:@selector(revision:didFailWithError:)];
[handler setReceiveResponse:@selector(revision:didReceiveResponse:)];
@ -397,7 +465,7 @@ NSString * const MGMUBCancel = @"Cancel";
NSString *revision1, *revision2, *tmp;
revision1 = [yourBuildField stringValue];
revision2 = [buildPopUp titleOfSelectedItem];
if ([revision1 compare:revision2]==NSOrderedDescending) {
if ([revision1 numberCompare:revision2]==NSOrderedDescending) {
tmp = revision1;
revision1 = revision2;
revision2 = tmp;
@ -418,7 +486,7 @@ NSString * const MGMUBCancel = @"Cancel";
[progress startAnimation:self];
startTime = [[NSDate date] timeIntervalSince1970];
NSURL *url = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:MGMChromiumZip];
NSURL *url = [[[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:MGMSnapshotPrefix] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:MGMChromiumZip];
[updateHandler release];
updateHandler = [[MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:url] delegate:self] retain];
[updateHandler setFile:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];

View File

@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.2</string>
<string>0.2.1</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.2</string>
<string>0.2.1</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>MGMGRBugsEmail</key>
@ -37,7 +37,7 @@
<key>MGMGRTimeZone</key>
<string>CST</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/</string>
<string>Copyright (c) 2011 Mr. Gecko&apos;s Media (James Coleman). http://mrgeckosmedia.com/</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>

View File

@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">10J869</string>
<string key="IBDocument.InterfaceBuilderVersion">823</string>
<string key="IBDocument.AppKitVersion">1038.35</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<string key="IBDocument.SystemVersion">11B26</string>
<string key="IBDocument.InterfaceBuilderVersion">851</string>
<string key="IBDocument.AppKitVersion">1138</string>
<string key="IBDocument.HIToolboxVersion">566.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">823</string>
<string key="NS.object.0">851</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -52,7 +52,7 @@
<object class="NSTextFieldCell" key="NSCell" id="967858895">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">The URL to check for new versions and get all revisions. This must be a apache directory URL, other wise it'll fail. After changing, close the Preferences and restart Chromatic to update.</string>
<string key="NSContents">The URL to check for new versions and get all revisions. This must be a Google API directory URL, other wise it'll fail. After changing, close the Preferences and restart Chromatic to update.</string>
<object class="NSFont" key="NSSupport" id="870937857">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
@ -65,7 +65,7 @@
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="457567397">
@ -108,7 +108,7 @@
<object class="NSFont" key="NSSupport" id="288161355">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
<int key="NSfFlags">1040</int>
</object>
<reference key="NSControlView" ref="608728680"/>
<int key="NSButtonFlags">1215582719</int>
@ -153,7 +153,7 @@
<int key="NSCellFlags2">272630784</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="288161355"/>
<string key="NSPlaceholderString">http://build.chromium.org/f/chromium/snapshots/Mac/</string>
<string key="NSPlaceholderString">https://commondatastorage.googleapis.com/chromium-browser-snapshots/</string>
<reference key="NSControlView" ref="212680802"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor">
@ -387,7 +387,7 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{{32, 250}, {487, 179}}</string>
<string>{{329, 250}, {487, 179}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{628, 654}</string>
<string>{{217, 442}, {480, 272}}</string>