Handle download errors
This commit is contained in:
@@ -16,7 +16,8 @@
|
||||
NSString *filename;
|
||||
GameInstall *game;
|
||||
NSTask *task;
|
||||
NSString * status;
|
||||
NSString *status;
|
||||
NSString *error;
|
||||
int bytesCompleted;
|
||||
int bytesTotal;
|
||||
}
|
||||
@@ -25,6 +26,7 @@
|
||||
@property(readonly) NSString *status;
|
||||
@property(readonly) int bytesCompleted;
|
||||
@property(readonly) int bytesTotal;
|
||||
@property(readonly) NSString *error;
|
||||
|
||||
+ (id)downloadWithURL:(NSString *)aURL filename:(NSString *)aFilename key:(NSString *)aKey game:(GameInstall *)aGame;
|
||||
- (id)initWithURL:(NSString *)aURL filename:(NSString *)aFilename key:(NSString *)aKey game:(GameInstall *)game;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
@synthesize status;
|
||||
@synthesize bytesCompleted;
|
||||
@synthesize bytesTotal;
|
||||
@synthesize error;
|
||||
|
||||
+ (id)downloadWithURL:(NSString *)aURL filename:(NSString *)aFilename key:(NSString *)aKey game:(GameInstall *)aGame
|
||||
{
|
||||
@@ -32,17 +33,17 @@
|
||||
filename = [aFilename retain];
|
||||
key = [aKey retain];
|
||||
game = [aGame retain];
|
||||
error = @"";
|
||||
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath:filename])
|
||||
{
|
||||
status = @"COMPLETE";
|
||||
bytesCompleted = bytesTotal = [[[NSFileManager defaultManager] attributesOfItemAtPath:filename error:nil] fileSize];
|
||||
bytesCompleted = bytesTotal = [[[NSFileManager defaultManager] attributesOfItemAtPath:filename error:NULL] fileSize];
|
||||
}
|
||||
else
|
||||
{
|
||||
status = @"AVAILABLE";
|
||||
bytesCompleted = -1;
|
||||
bytesTotal = -1;
|
||||
bytesCompleted = bytesTotal = -1;
|
||||
}
|
||||
}
|
||||
return self;
|
||||
@@ -68,7 +69,13 @@
|
||||
if ([type isEqualToString:@"Error"])
|
||||
{
|
||||
status = @"ERROR";
|
||||
[error autorelease];
|
||||
if ([[message substringToIndex:36] isEqualToString:@"The remote server returned an error:"])
|
||||
error = [[message substringFromIndex:37] retain];
|
||||
else
|
||||
error = [message retain];
|
||||
}
|
||||
|
||||
else if ([type isEqualToString:@"Status"])
|
||||
{
|
||||
if ([message isEqualToString:@"Completed"])
|
||||
@@ -95,8 +102,6 @@
|
||||
- (BOOL)start
|
||||
{
|
||||
status = @"DOWNLOADING";
|
||||
|
||||
NSLog(@"Starting download...");
|
||||
task = [game runAsyncUtilityWithArg:[NSString stringWithFormat:@"--download-url=%@,%@",url,filename]
|
||||
delegate:self
|
||||
responseSelector:@selector(utilityResponded:)
|
||||
@@ -107,13 +112,13 @@
|
||||
|
||||
- (BOOL)cancel
|
||||
{
|
||||
NSLog(@"Cancelling");
|
||||
status = @"ERROR";
|
||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||
[nc removeObserver:self name:NSFileHandleReadCompletionNotification object:[[task standardOutput] fileHandleForReading]];
|
||||
[nc removeObserver:self name:NSTaskDidTerminateNotification object:task];
|
||||
error = @"Download Cancelled";
|
||||
[[JSBridge sharedInstance] notifyDownloadProgress:self];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self
|
||||
name:NSFileHandleReadCompletionNotification
|
||||
object:[[task standardOutput] fileHandleForReading]];
|
||||
[task terminate];
|
||||
[task release]; task = nil;
|
||||
return YES;
|
||||
}
|
||||
|
||||
@@ -124,6 +129,12 @@
|
||||
[nc removeObserver:self name:NSFileHandleReadCompletionNotification object:[[task standardOutput] fileHandleForReading]];
|
||||
[nc removeObserver:self name:NSTaskDidTerminateNotification object:task];
|
||||
[task release]; task = nil;
|
||||
|
||||
if (status == @"ERROR")
|
||||
{
|
||||
[[NSFileManager defaultManager] removeItemAtPath:filename error:NULL];
|
||||
bytesCompleted = bytesTotal = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -49,6 +49,7 @@ static JSBridge *SharedInstance;
|
||||
@"startDownload", NSStringFromSelector(@selector(startDownload:)),
|
||||
@"cancelDownload", NSStringFromSelector(@selector(cancelDownload:)),
|
||||
@"downloadStatus", NSStringFromSelector(@selector(downloadStatus:)),
|
||||
@"downloadError", NSStringFromSelector(@selector(downloadError:)),
|
||||
@"bytesCompleted", NSStringFromSelector(@selector(bytesCompleted:)),
|
||||
@"bytesTotal", NSStringFromSelector(@selector(bytesTotal:)),
|
||||
nil] retain];
|
||||
@@ -67,12 +68,6 @@ static JSBridge *SharedInstance;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)notifyDownloadProgress:(Download *)download
|
||||
{
|
||||
[[[controller webView] windowScriptObject] evaluateWebScript:
|
||||
[NSString stringWithFormat:@"downloadProgressed('%@')",[download key]]];
|
||||
}
|
||||
|
||||
#pragma mark JS API methods
|
||||
|
||||
- (BOOL)launchMod:(NSString *)aMod
|
||||
@@ -119,6 +114,15 @@ static JSBridge *SharedInstance;
|
||||
return [d status];
|
||||
}
|
||||
|
||||
- (NSString *)downloadError:(NSString *)key
|
||||
{
|
||||
Download *d = [controller downloadWithKey:key];
|
||||
if (d == nil)
|
||||
return @"";
|
||||
|
||||
return [d error];
|
||||
}
|
||||
|
||||
- (BOOL)startDownload:(NSString *)key
|
||||
{
|
||||
Download *d = [controller downloadWithKey:key];
|
||||
@@ -143,6 +147,13 @@ static JSBridge *SharedInstance;
|
||||
return (d == nil) ? -1 : [d bytesTotal];
|
||||
}
|
||||
|
||||
- (void)notifyDownloadProgress:(Download *)download
|
||||
{
|
||||
[[[controller webView] windowScriptObject] evaluateWebScript:
|
||||
[NSString stringWithFormat:@"downloadProgressed('%@')",[download key]]];
|
||||
}
|
||||
|
||||
|
||||
- (void)log:(NSString *)message
|
||||
{
|
||||
NSLog(@"js: %@",message);
|
||||
|
||||
Reference in New Issue
Block a user