QTfrontend/util/platform/M3InstallController.m
changeset 8381 588a8e6e2041
parent 6479 4f08821cbff5
child 8440 ea4d6a7a2937
equal deleted inserted replaced
8380:0b375a3ceaa0 8381:588a8e6e2041
       
     1 /*****************************************************************
       
     2  M3InstallController.m
       
     3 
       
     4  Created by Martin Pilkington on 02/06/2007.
       
     5 
       
     6  Copyright (c) 2006-2009 M Cubed Software
       
     7 
       
     8  Permission is hereby granted, free of charge, to any person
       
     9  obtaining a copy of this software and associated documentation
       
    10  files (the "Software"), to deal in the Software without
       
    11  restriction, including without limitation the rights to use,
       
    12  copy, modify, merge, publish, distribute, sublicense, and/or sell
       
    13  copies of the Software, and to permit persons to whom the
       
    14  Software is furnished to do so, subject to the following
       
    15  conditions:
       
    16 
       
    17  The above copyright notice and this permission notice shall be
       
    18  included in all copies or substantial portions of the Software.
       
    19 
       
    20  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
       
    21  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
       
    22  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
       
    23  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
       
    24  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
       
    25  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
       
    26  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
       
    27  OTHER DEALINGS IN THE SOFTWARE.
       
    28 
       
    29  *****************************************************************/
       
    30 
       
    31 #import "M3InstallController.h"
       
    32 #import "NSWorkspace_RBAdditions.h"
       
    33 
       
    34 #import <Foundation/Foundation.h>
       
    35 
       
    36 @implementation M3InstallController
       
    37 
       
    38 - (id) init {
       
    39         if ((self = [super init])) {
       
    40 		NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
       
    41 		NSString *title = [NSString stringWithFormat:NSLocalizedString(@"%@ is currently running from a disk image", @"AppName is currently running from a disk image"), appName];
       
    42 		NSString *body = [NSString stringWithFormat:NSLocalizedString(@"Would you like to install %@ in your applications folder before quitting?", @"Would you like to install App Name in your applications folder before quitting?"), appName];
       
    43 		alert = [[NSAlert alertWithMessageText:title
       
    44 								 defaultButton:NSLocalizedString(@"Install", @"Install")
       
    45 							   alternateButton:NSLocalizedString(@"Don't Install", @"Don't Install")
       
    46 								   otherButton:nil
       
    47 					 informativeTextWithFormat:body] retain];
       
    48 		//[alert setShowsSuppressionButton:YES];
       
    49 	}
       
    50 	return self;
       
    51 }
       
    52 
       
    53 - (void)displayInstaller {
       
    54 	NSString *imageFilePath = [[[NSWorkspace sharedWorkspace] propertiesForPath:[[NSBundle mainBundle] bundlePath]] objectForKey:NSWorkspace_RBimagefilepath];
       
    55 	if (imageFilePath && ![imageFilePath isEqualToString:[NSString stringWithFormat:@"/Users/.%@/%@.sparseimage", NSUserName(), NSUserName()]] && ![[NSUserDefaults standardUserDefaults] boolForKey:@"M3DontAskInstallAgain"]) {
       
    56 		NSInteger returnValue = [alert runModal];
       
    57 		if (returnValue == NSAlertDefaultReturn) {
       
    58 			[self installApp];
       
    59 		}
       
    60 		if ([[alert suppressionButton] state] == NSOnState) {
       
    61 			[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"M3DontAskInstallAgain"];
       
    62 		}
       
    63 	}
       
    64 }
       
    65 
       
    66 - (void)installApp {
       
    67 	NSString *appsPath = [[NSString stringWithString:@"/Applications"] stringByAppendingPathComponent:[[[NSBundle mainBundle] bundlePath] lastPathComponent]];
       
    68 	NSString *userAppsPath = [[[NSString stringWithString:@"~/Applications"] stringByAppendingPathComponent:[[[NSBundle mainBundle] bundlePath] lastPathComponent]] stringByExpandingTildeInPath];
       
    69 	NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
       
    70 
       
    71 	//Delete the app that is installed
       
    72 	if ([[NSFileManager defaultManager] fileExistsAtPath:appsPath]) {
       
    73 		[[NSFileManager defaultManager] removeFileAtPath:appsPath handler:nil];
       
    74 	}
       
    75 	//Delete the app that is installed
       
    76 	if ([[NSFileManager defaultManager] copyPath:[[NSBundle mainBundle] bundlePath] toPath:appsPath
       
    77 										  handler:nil]) {
       
    78 		NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"%@ installed successfully", @"App Name installed successfully"), appName],
       
    79 						[NSString stringWithFormat:NSLocalizedString(@"%@ was installed in /Applications", @"App Name was installed in /Applications"), appName],
       
    80 						NSLocalizedString(@"Quit", @"Quit"), nil, nil);
       
    81 	} else {
       
    82 		if ([[NSFileManager defaultManager] fileExistsAtPath:userAppsPath]) {
       
    83 			[[NSFileManager defaultManager] removeFileAtPath:userAppsPath handler:nil];
       
    84 		}
       
    85 		if ([[NSFileManager defaultManager] copyPath:[[NSBundle mainBundle] bundlePath] toPath:userAppsPath
       
    86 												handler:nil]) {
       
    87 		NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"%@ installed successfully", @"AppName installed successfully"), appName],
       
    88 				[NSString stringWithFormat:NSLocalizedString(@"%@ was installed in %@", @"App Name was installed in %@"), appName, [[NSString stringWithString:@"~/Applications"] stringByExpandingTildeInPath]],
       
    89 						NSLocalizedString(@"Quit", @"Quit"), nil, nil);
       
    90 		} else {
       
    91 			NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"Could not install %@", @"Could not install App Name"), appName],
       
    92 							NSLocalizedString(@"An error occurred when installing", @"An error occurred when installing"), NSLocalizedString(@"Quit", @"Quit"), nil, nil);
       
    93 		}
       
    94 	}
       
    95 }
       
    96 
       
    97 @end