if (sharingAccount)
[containerRequest setRequestUserFromDefaultTo:sharingAccount];
containerRequest.delegate = self;
- containerRequest.didFinishSelector = @selector(containerRequestFinished:);
- containerRequest.didFailSelector = @selector(containerRequestFailed:);
+ containerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
+ containerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
containerRequest.userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInteger:NSOperationQueuePriorityVeryHigh], @"priority",
[NSNumber numberWithUnsignedInteger:10], @"retries",
+ NSStringFromSelector(@selector(containerRequestFinished:)), @"didFinishSelector",
+ NSStringFromSelector(@selector(containerRequestFailed:)), @"didFailSelector",
nil];
if (!forcedRefresh)
containerRequest.downloadCache = [ASIDownloadCache sharedCache];
#pragma mark ASIHTTPRequestDelegate
- (void)containerRequestFailed:(ASIPithosContainerRequest *)request {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
if (retries > 0) {
ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
[(NSMutableDictionary *)(newContainerRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
[containerRequest release];
containerRequest = newContainerRequest;
- [[PithosUtilities prepareRequest:containerRequest priority:NSOperationQueuePriorityVeryHigh] startAsynchronous];
+ [[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
} else {
NSString *message;
NSError *error = [containerRequest error];
else
message = [NSString stringWithFormat:@"Container listing failed: (%d) %@",
containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
- [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+ });
[newChildren release];
newChildren = nil;
[containerRequest release];
freshness = PithosNodeStateRefreshNeeded;
}
}
+ [pool drain];
}
- (void)containerRequestFinished:(ASIPithosContainerRequest *)request {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"List container finished: %@", [containerRequest url]);
NSLog(@"Cached: %d", [containerRequest didUseCachedResponse]);
if (containerRequest.responseStatusCode == 200) {
if (sharingAccount)
[containerRequest setRequestUserFromDefaultTo:sharingAccount];
containerRequest.delegate = self;
- containerRequest.didFinishSelector = @selector(containerRequestFinished:);
- containerRequest.didFailSelector = @selector(containerRequestFailed:);
+ containerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
+ containerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
containerRequest.userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInteger:NSOperationQueuePriorityVeryHigh], @"priority",
[NSNumber numberWithUnsignedInteger:10], @"retries",
+ NSStringFromSelector(@selector(containerRequestFinished:)), @"didFinishSelector",
+ NSStringFromSelector(@selector(containerRequestFailed:)), @"didFailSelector",
nil];
if (!forcedRefresh)
containerRequest.downloadCache = [ASIDownloadCache sharedCache];
} else {
[self containerRequestFailed:containerRequest];
}
+ [pool drain];
}
- (void)containerMetadataRequestFinished:(ASIPithosContainerRequest *)request {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"URL: %@", [request url]);
NSLog(@"cached: %d", [request didUseCachedResponse]);
refreshMetadataContainerRequest = nil;
}
}
+ [pool drain];
}
- (void)containerMetadataRequestFailed:(ASIPithosContainerRequest *)request {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if ([request isEqualTo:applyMetadataContainerRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataContainerRequest];
@synchronized(self) {
refreshMetadataContainerRequest = nil;
}
}
+ [pool drain];
}
#pragma mark -
metadata:pithosContainer.metadata
update:NO] retain];
applyMetadataContainerRequest.delegate = self;
- applyMetadataContainerRequest.didFinishSelector = @selector(containerMetadataRequestFinished:);
- applyMetadataContainerRequest.didFailSelector = @selector(containerMetadataRequestFailed:);
+ applyMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
+ applyMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
+ applyMetadataContainerRequest.userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInteger:NSOperationQueuePriorityHigh], @"priority",
+ [NSNumber numberWithUnsignedInteger:10], @"retries",
+ NSStringFromSelector(@selector(containerMetadataRequestFinished:)), @"didFinishSelector",
+ NSStringFromSelector(@selector(containerMetadataRequestFailed:)), @"didFailSelector",
+ nil];
[[PithosUtilities prepareRequest:applyMetadataContainerRequest priority:NSOperationQueuePriorityHigh] startAsynchronous];
}
}
if (refreshMetadataContainerRequest == nil) {
refreshMetadataContainerRequest = [[ASIPithosContainerRequest containerMetadataRequestWithContainerName:pithosContainer.name] retain];
refreshMetadataContainerRequest.delegate = self;
- refreshMetadataContainerRequest.didFinishSelector = @selector(containerMetadataRequestFinished:);
- refreshMetadataContainerRequest.didFailSelector = @selector(containerMetadataRequestFailed:);
+ refreshMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
+ refreshMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
+ refreshMetadataContainerRequest.userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInteger:NSOperationQueuePriorityHigh], @"priority",
+ [NSNumber numberWithUnsignedInteger:10], @"retries",
+ NSStringFromSelector(@selector(containerMetadataRequestFinished:)), @"didFinishSelector",
+ NSStringFromSelector(@selector(containerMetadataRequestFailed:)), @"didFailSelector",
+ nil];
refreshMetadataContainerRequest.downloadCache = [ASIDownloadCache sharedCache];
[[PithosUtilities prepareRequest:refreshMetadataContainerRequest priority:NSOperationQueuePriorityHigh] startAsynchronous];
}