cog/Frameworks/Sparkle/SUUserInitiatedUpdateDriver.m

89 lines
2.1 KiB
Objective-C

//
// SUUserInitiatedUpdateDriver.m
// Sparkle
//
// Created by Andy Matuschak on 5/30/08.
// Copyright 2008 Andy Matuschak. All rights reserved.
//
#import "SUUserInitiatedUpdateDriver.h"
#import "SUStatusController.h"
#import "SUHost.h"
@implementation SUUserInitiatedUpdateDriver
- (void)closeCheckingWindow
{
if (checkingController)
{
[[checkingController window] close];
[checkingController release];
checkingController = nil;
}
}
- (void)cancelCheckForUpdates:sender
{
[self closeCheckingWindow];
isCanceled = YES;
}
- (void)checkForUpdatesAtURL:(NSURL *)URL host:(SUHost *)aHost
{
checkingController = [[SUStatusController alloc] initWithHost:aHost];
[[checkingController window] center]; // Force the checking controller to load its window.
[checkingController beginActionWithTitle:SULocalizedString(@"Checking for updates...", nil) maxProgressValue:0.0 statusText:nil];
[checkingController setButtonTitle:SULocalizedString(@"Cancel", nil) target:self action:@selector(cancelCheckForUpdates:) isDefault:NO];
[checkingController showWindow:self];
[super checkForUpdatesAtURL:URL host:aHost];
// For background applications, obtain focus.
// Useful if the update check is requested from another app like System Preferences.
if ([aHost isBackgroundApplication])
{
[NSApp activateIgnoringOtherApps:YES];
}
}
- (void)appcastDidFinishLoading:(SUAppcast *)ac
{
if (isCanceled)
{
[self abortUpdate];
return;
}
[self closeCheckingWindow];
[super appcastDidFinishLoading:ac];
}
- (void)abortUpdateWithError:(NSError *)error
{
[self closeCheckingWindow];
[super abortUpdateWithError:error];
}
- (void)abortUpdate
{
[self closeCheckingWindow];
[super abortUpdate];
}
- (void)appcast:(SUAppcast *)ac failedToLoadWithError:(NSError *)error
{
if (isCanceled)
{
[self abortUpdate];
return;
}
[super appcast:ac failedToLoadWithError:error];
}
- (BOOL)itemContainsValidUpdate:(SUAppcastItem *)ui
{
// We don't check to see if this update's been skipped, because the user explicitly *asked* if he had the latest version.
return [self hostSupportsItem:ui] && [self isItemNewer:ui];
}
@end