49 lines
1.2 KiB
Objective-C
49 lines
1.2 KiB
Objective-C
//
|
|
// SUBinaryDeltaUnarchiver.m
|
|
// Sparkle
|
|
//
|
|
// Created by Mark Rowe on 2009-06-03.
|
|
// Copyright 2009 Mark Rowe. All rights reserved.
|
|
//
|
|
|
|
#import "SUBinaryDeltaCommon.h"
|
|
#import "SUBinaryDeltaUnarchiver.h"
|
|
#import "SUBinaryDeltaApply.h"
|
|
#import "SUUnarchiver_Private.h"
|
|
#import "SUHost.h"
|
|
#import "NTSynchronousTask.h"
|
|
|
|
@implementation SUBinaryDeltaUnarchiver
|
|
|
|
+ (BOOL)canUnarchivePath:(NSString *)path
|
|
{
|
|
return binaryDeltaSupported() && [[path pathExtension] isEqualToString:@"delta"];
|
|
}
|
|
|
|
- (void)applyBinaryDelta
|
|
{
|
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
|
NSString *sourcePath = [[updateHost bundle] bundlePath];
|
|
NSString *targetPath = [[archivePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:[sourcePath lastPathComponent]];
|
|
|
|
int result = applyBinaryDelta(sourcePath, targetPath, archivePath);
|
|
if (!result)
|
|
[self performSelectorOnMainThread:@selector(notifyDelegateOfSuccess) withObject:nil waitUntilDone:NO];
|
|
else
|
|
[self performSelectorOnMainThread:@selector(notifyDelegateOfFailure) withObject:nil waitUntilDone:NO];
|
|
|
|
[pool drain];
|
|
}
|
|
|
|
- (void)start
|
|
{
|
|
[NSThread detachNewThreadSelector:@selector(applyBinaryDelta) toTarget:self withObject:nil];
|
|
}
|
|
|
|
+ (void)load
|
|
{
|
|
[self registerImplementation:self];
|
|
}
|
|
|
|
@end
|