Files
textmate/Frameworks/SoftwareUpdate/src/ReleaseNotesWindowController.mm
Allan Odgaard 9894969e67 Initial commit
2012-08-09 16:25:56 +02:00

75 lines
2.3 KiB
Plaintext

#import "ReleaseNotesWindowController.h"
static NSString* const kUserDefaultsReleaseNotesDigestKey = @"releaseNotesDigest";
static NSData* Digest (NSString* someString)
{
char const* str = [someString UTF8String];
char md[SHA_DIGEST_LENGTH];
CC_SHA1((unsigned char*)str, strlen(str), (unsigned char*)md);
return [NSData dataWithBytes:md length:sizeof(md)];
}
@interface ReleaseNotesWindowController ()
@property (nonatomic, retain) NSURL* releaseNotesURL;
@end
@implementation ReleaseNotesWindowController
@synthesize releaseNotesURL;
- (id)initWithURL:(NSURL*)aURL
{
if(self = [super initWithWindowNibName:@"ReleaseNotes"])
{
self.releaseNotesURL = aURL;
}
return self;
}
+ (void)showPath:(NSString*)aPath
{
[[[self alloc] initWithURL:[NSURL fileURLWithPath:aPath]] showWindow:nil];
}
+ (void)showPathIfUpdated:(NSString*)aPath
{
if(NSString* releaseNotes = [NSString stringWithContentsOfFile:aPath encoding:NSUTF8StringEncoding error:NULL])
{
NSData* lastDigest = [[NSUserDefaults standardUserDefaults] dataForKey:kUserDefaultsReleaseNotesDigestKey];
NSData* currentDigest = Digest(releaseNotes);
if(lastDigest)
{
if(![lastDigest isEqualToData:currentDigest])
[[[self alloc] initWithURL:[NSURL fileURLWithPath:aPath]] showWindow:nil];
}
else
{
[[NSUserDefaults standardUserDefaults] setObject:currentDigest forKey:kUserDefaultsReleaseNotesDigestKey];
}
}
}
- (void)windowDidLoad
{
[self.window setLevel:NSFloatingWindowLevel];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:releaseNotesURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]];
[webView setPolicyDelegate:self];
}
- (void)webView:(WebView*)sender decidePolicyForNavigationAction:(NSDictionary*)actionInformation request:(NSURLRequest*)request frame:(WebFrame*)frame decisionListener:(id <WebPolicyDecisionListener>)listener
{
if([[NSWorkspace sharedWorkspace] openURL:request.URL])
[listener ignore];
else if([NSURLConnection canHandleRequest:request])
[listener use];
}
- (void)windowWillClose:(NSNotification*)aNotification
{
if(NSString* releaseNotes = [NSString stringWithContentsOfFile:[releaseNotesURL path] encoding:NSUTF8StringEncoding error:NULL])
[[NSUserDefaults standardUserDefaults] setObject:Digest(releaseNotes) forKey:kUserDefaultsReleaseNotesDigestKey];
[webView setPolicyDelegate:nil];
[self release];
}
@end