84 lines
2.3 KiB
Objective-C
84 lines
2.3 KiB
Objective-C
//
|
|
// SUAutomaticUpdateDriver.m
|
|
// Sparkle
|
|
//
|
|
// Created by Andy Matuschak on 5/6/08.
|
|
// Copyright 2008 Andy Matuschak. All rights reserved.
|
|
//
|
|
|
|
#import "SUAutomaticUpdateDriver.h"
|
|
|
|
#import "SUAutomaticUpdateAlert.h"
|
|
#import "SUHost.h"
|
|
#import "SUConstants.h"
|
|
|
|
@implementation SUAutomaticUpdateDriver
|
|
|
|
- (void)unarchiverDidFinish:(SUUnarchiver *)ua
|
|
{
|
|
alert = [[SUAutomaticUpdateAlert alloc] initWithAppcastItem:updateItem host:host delegate:self];
|
|
|
|
// If the app is a menubar app or the like, we need to focus it first and alter the
|
|
// update prompt to behave like a normal window. Otherwise if the window were hidden
|
|
// there may be no way for the application to be activated to make it visible again.
|
|
if ([host isBackgroundApplication])
|
|
{
|
|
[[alert window] setHidesOnDeactivate:NO];
|
|
[NSApp activateIgnoringOtherApps:YES];
|
|
}
|
|
|
|
if ([NSApp isActive])
|
|
[[alert window] makeKeyAndOrderFront:self];
|
|
else
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:NSApplicationDidBecomeActiveNotification object:NSApp];
|
|
}
|
|
|
|
- (void)applicationDidBecomeActive:(NSNotification *)aNotification
|
|
{
|
|
[[alert window] makeKeyAndOrderFront:self];
|
|
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"NSApplicationDidBecomeActiveNotification" object:NSApp];
|
|
}
|
|
|
|
- (void)automaticUpdateAlert:(SUAutomaticUpdateAlert *)aua finishedWithChoice:(SUAutomaticInstallationChoice)choice;
|
|
{
|
|
switch (choice)
|
|
{
|
|
case SUInstallNowChoice:
|
|
[self installWithToolAndRelaunch:YES];
|
|
break;
|
|
|
|
case SUInstallLaterChoice:
|
|
postponingInstallation = YES;
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:NSApplicationWillTerminateNotification object:nil];
|
|
break;
|
|
|
|
case SUDoNotInstallChoice:
|
|
[host setObject:[updateItem versionString] forUserDefaultsKey:SUSkippedVersionKey];
|
|
[self abortUpdate];
|
|
break;
|
|
}
|
|
}
|
|
|
|
- (BOOL)shouldInstallSynchronously { return postponingInstallation; }
|
|
|
|
- (void)installWithToolAndRelaunch:(BOOL)relaunch
|
|
{
|
|
showErrors = YES;
|
|
[super installWithToolAndRelaunch:relaunch];
|
|
}
|
|
|
|
- (void)applicationWillTerminate:(NSNotification *)note
|
|
{
|
|
[self installWithToolAndRelaunch:NO];
|
|
}
|
|
|
|
- (void)abortUpdateWithError:(NSError *)error
|
|
{
|
|
if (showErrors)
|
|
[super abortUpdateWithError:error];
|
|
else
|
|
[self abortUpdate];
|
|
}
|
|
|
|
@end
|