DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
//
//  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