2005-06-02 18:16:43 +00:00
|
|
|
//
|
|
|
|
// UpdateController.m
|
|
|
|
// Cog
|
|
|
|
//
|
|
|
|
// Created by Vincent Spader on 3/26/05.
|
|
|
|
// Copyright 2005 __MyCompanyName__. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "UpdateController.h"
|
|
|
|
|
|
|
|
@implementation UpdateController
|
|
|
|
|
|
|
|
- (void)checkForUpdate
|
|
|
|
{
|
|
|
|
[okayButton setEnabled:NO];
|
|
|
|
[checkingIndicator startAnimation:self];
|
|
|
|
|
|
|
|
[statusView setStringValue:@"Checking for update..."];
|
|
|
|
|
|
|
|
macPAD = [[MacPADSocket alloc] init];
|
|
|
|
[macPAD setDelegate:self];
|
|
|
|
|
|
|
|
[macPAD performCheckWithURL:[NSURL URLWithString:@"http://cogosx.sourceforge.net/Cog.plist"]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)updateDisplay:(MacPADSocket *)socket info:(NSDictionary *)info
|
|
|
|
{
|
|
|
|
int result;
|
|
|
|
result = [[info objectForKey:MacPADErrorCode] intValue];
|
|
|
|
if (result == kMacPADResultNewVersion) //New version available
|
|
|
|
{
|
|
|
|
[statusView setStringValue:@"Update available!"];
|
|
|
|
updateAvailable = YES;
|
|
|
|
}
|
|
|
|
else if (result == kMacPADResultNoNewVersion) //No new version available
|
|
|
|
{
|
|
|
|
[statusView setStringValue:@"No updates available."];
|
|
|
|
updateAvailable = NO;
|
|
|
|
}
|
|
|
|
else //Error connecting to update server
|
|
|
|
{
|
|
|
|
[statusView setStringValue:@"Error connecting to update server."];
|
|
|
|
updateAvailable = NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
[self setDownloadURL:[macPAD productDownloadURL]];
|
|
|
|
|
|
|
|
[macPAD release];
|
|
|
|
macPAD = nil;
|
|
|
|
|
|
|
|
[checkingIndicator stopAnimation:self];
|
|
|
|
[okayButton setEnabled:YES];
|
|
|
|
|
|
|
|
// DBLog(@"THINGS: %i %i", updateAvailable, checkInBackground);
|
|
|
|
if (updateAvailable == YES && checkInBackground == YES)
|
|
|
|
{
|
|
|
|
// DBLog(@"SHOW THE GD WINDOW");
|
|
|
|
[updateWindow makeKeyAndOrderFront: self];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)macPADErrorOccurred:(NSNotification *)aNotification
|
|
|
|
{
|
|
|
|
DBLog(@"Update error occurred");
|
|
|
|
[self updateDisplay:[aNotification object] info:[aNotification userInfo]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)macPADCheckFinished:(NSNotification *)aNotification
|
|
|
|
{
|
|
|
|
// DBLog(@"CHECK FINISHED");
|
|
|
|
[self updateDisplay:[aNotification object] info:[aNotification userInfo]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (IBAction)openUpdateWindow:(id)sender
|
|
|
|
{
|
|
|
|
[updateWindow makeKeyAndOrderFront: sender];
|
|
|
|
|
|
|
|
checkInBackground = NO;
|
|
|
|
|
|
|
|
[self checkForUpdate];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)windowWillClose:(id)sender
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)checkForUpdateInBackground
|
|
|
|
{
|
|
|
|
checkInBackground = YES;
|
|
|
|
|
|
|
|
[self checkForUpdate];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (IBAction)okay:(id)sender
|
|
|
|
{
|
|
|
|
if (updateAvailable == YES)
|
|
|
|
{
|
|
|
|
DBLog(@"OPENING URL: %@", downloadURL);
|
|
|
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:downloadURL]];
|
|
|
|
}
|
|
|
|
[updateWindow close];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void) awakeFromNib
|
|
|
|
{
|
|
|
|
NSNumber *doCheck = [[NSUserDefaults standardUserDefaults] objectForKey: @"Cog:CheckForUpdateAtStartup"];
|
|
|
|
NSNumber *lastCheckDateNum = [[NSUserDefaults standardUserDefaults] objectForKey: @"Cog:LastUpdateCheckDate"];
|
|
|
|
NSDate *lastCheckDate = nil;
|
|
|
|
|
|
|
|
if( doCheck == nil ) // No setting in prefs yet? First launch?
|
|
|
|
{
|
2005-06-02 20:38:36 +00:00
|
|
|
doCheck = [NSNumber numberWithBool:YES];
|
2005-06-02 18:16:43 +00:00
|
|
|
|
|
|
|
// Save user's preference to prefs file:
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject: doCheck forKey: @"Cog:CheckForUpdateAtStartup"];
|
|
|
|
}
|
|
|
|
|
|
|
|
[autoCheckButton setState: [doCheck boolValue]]; // Update prefs button
|
|
|
|
|
|
|
|
// If user wants us to check for updates at startup, do so:
|
|
|
|
if( [doCheck boolValue] )
|
|
|
|
{
|
|
|
|
NSTimeInterval timeSinceLastCheck;
|
|
|
|
|
|
|
|
// Determine how long since last check:
|
|
|
|
if( lastCheckDateNum == nil )
|
|
|
|
lastCheckDate = [NSDate distantPast]; // If there's no date in prefs, use something guaranteed to be past.
|
|
|
|
else
|
|
|
|
lastCheckDate = [NSDate dateWithTimeIntervalSinceReferenceDate: [lastCheckDateNum doubleValue]];
|
|
|
|
timeSinceLastCheck = -[lastCheckDate timeIntervalSinceNow];
|
|
|
|
|
|
|
|
// If last check was more than DAYS_BETWEEN_CHECKS days ago, check again now:
|
|
|
|
if( timeSinceLastCheck > (3600 * 24 * DAYS_BETWEEN_CHECKS) )
|
|
|
|
{
|
|
|
|
// DBLog(@"CHECKING FOR UPDATE");
|
|
|
|
[self checkForUpdateInBackground];
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject: [NSNumber numberWithDouble: [NSDate timeIntervalSinceReferenceDate]] forKey: @"Cog:LastUpdateCheckDate"];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
-(IBAction) takeBoolFromObject: (id)sender
|
|
|
|
{
|
|
|
|
if( [sender respondsToSelector: @selector(boolValue)] )
|
|
|
|
[self setCheckAtStartup: [sender boolValue]];
|
|
|
|
else
|
|
|
|
[self setCheckAtStartup: [sender state]];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void) setCheckAtStartup: (BOOL)shouldCheck
|
|
|
|
{
|
|
|
|
NSNumber *doCheck = [NSNumber numberWithBool: shouldCheck];
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject: doCheck forKey: @"Cog:CheckForUpdateAtStartup"];
|
|
|
|
|
|
|
|
[autoCheckButton setState: shouldCheck];
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject: [NSNumber numberWithDouble: 0] forKey: @"Cog:LastUpdateCheckDate"];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//BULLSHIT STUFF
|
|
|
|
- (void)setDownloadURL:(NSString *)d
|
|
|
|
{
|
|
|
|
[d retain];
|
|
|
|
[downloadURL release];
|
|
|
|
downloadURL = d;
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|