89 lines
2.1 KiB
Objective-C
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
|