ASIPithosAccountRequest *applyMetadataAccountRequest;
ASIPithosAccountRequest *refreshMetadataAccountRequest;
+
+ BOOL reset;
}
@property(nonatomic, retain) ASIPithos *pithos;
- (id)initWithPithos:(ASIPithos *)aPithos {
if ((self = [super init])) {
- self.pithos = aPithos;
+ pithos = [aPithos retain];
}
return self;
}
pithos = [aPithos retain];
[url release];
url = nil;
+ [accountRequest clearDelegatesAndCancel];
+ [accountRequest release];
+ accountRequest = nil;
+ [refreshMetadataAccountRequest clearDelegatesAndCancel];
+ [refreshMetadataAccountRequest release];
+ refreshMetadataAccountRequest = nil;
+ [applyMetadataAccountRequest clearDelegatesAndCancel];
+ [applyMetadataAccountRequest release];
+ applyMetadataAccountRequest = nil;
+ reset = YES;
}
}
- (NSArray *)children {
@synchronized(self) {
+ if (reset) {
+ [accountRequest clearDelegatesAndCancel];
+ [accountRequest release];
+ accountRequest = nil;
+ [refreshMetadataAccountRequest clearDelegatesAndCancel];
+ [refreshMetadataAccountRequest release];
+ refreshMetadataAccountRequest = nil;
+ [applyMetadataAccountRequest clearDelegatesAndCancel];
+ [applyMetadataAccountRequest release];
+ applyMetadataAccountRequest = nil;
+ [children release];
+ children = nil;
+ [newChildren release];
+ newChildren = nil;
+ self.pithosAccount = nil;
+ freshness = PithosNodeStateRefreshNeeded;
+ forcedRefresh = YES;
+ reset = NO;
+ [self postChildrenUpdatedNotificationName];
+ }
switch (freshness) {
case PithosNodeStateFresh:
break;
- (void)accountRequestFailed:(ASIPithosAccountRequest *)request {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSString *message;
+ NSError *error = [accountRequest error];
+ if (error)
+ message = [NSString stringWithFormat:@"Account listing %@ failed: %@", accountRequest.url, [error localizedDescription]];
+ else
+ message = [NSString stringWithFormat:@"Account listing %@ failed: (%d) %@",
+ accountRequest.url, accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+ });
NSUInteger retries = [[accountRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
if (retries > 0) {
ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
accountRequest = newAccountRequest;
[[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
} else {
- NSString *message;
- NSError *error = [accountRequest error];
- if (error)
- message = [NSString stringWithFormat:@"Account listing failed: %@", error];
- else
- message = [NSString stringWithFormat:@"Account listing failed: (%d) %@",
- accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
- dispatch_async(dispatch_get_main_queue(), ^{
- [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
- });
[newChildren release];
newChildren = nil;
[accountRequest release];
- (void)containerRequestFailed:(ASIPithosContainerRequest *)request {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSString *message;
+ NSError *error = [containerRequest error];
+ if (error)
+ message = [NSString stringWithFormat:@"Container listing %@ failed: %@", containerRequest.url, [error localizedDescription]];
+ else
+ message = [NSString stringWithFormat:@"Container listing %@ failed: (%d) %@",
+ containerRequest.url, containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+ });
NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
if (retries > 0) {
ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
containerRequest = newContainerRequest;
[[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
} else {
- NSString *message;
- NSError *error = [containerRequest error];
- if (error)
- message = [NSString stringWithFormat:@"Container listing failed: %@", error];
- else
- message = [NSString stringWithFormat:@"Container listing failed: (%d) %@",
- containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
- dispatch_async(dispatch_get_main_queue(), ^{
- [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
- });
[newChildren release];
newChildren = nil;
[containerRequest release];
NSMutableArray *sharingAccounts;
ASIPithosRequest *sharingAccountsRequest;
+
+ BOOL reset;
}
@property(nonatomic, retain) ASIPithos *pithos;
- (id)initWithPithos:(ASIPithos *)aPithos {
if ((self = [super init])) {
- self.pithos = aPithos;
+ pithos = [aPithos retain];
self.sharingAccount = @"";
}
return self;
pithos = [aPithos retain];
[url release];
url = nil;
+ [sharingAccountsRequest clearDelegatesAndCancel];
+ [sharingAccountsRequest release];
+ sharingAccountsRequest = nil;
+ reset = YES;
}
}
- (NSArray *)children {
@synchronized(self) {
+ if (reset) {
+ [sharingAccountsRequest clearDelegatesAndCancel];
+ [sharingAccountsRequest release];
+ sharingAccountsRequest = nil;
+ [children release];
+ children = nil;
+ [newChildren release];
+ newChildren = nil;
+ freshness = PithosNodeStateRefreshNeeded;
+ forcedRefresh = YES;
+ reset = NO;
+ [self postChildrenUpdatedNotificationName];
+ }
switch (freshness) {
case PithosNodeStateFresh:
break;
- (void)sharingAccountsRequestFailed:(ASIPithosRequest *)request {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSString *message;
+ NSError *error = [sharingAccountsRequest error];
+ if (error)
+ message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: %@",
+ sharingAccountsRequest.url, [error localizedDescription]];
+ else
+ message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: (%d) %@",
+ sharingAccountsRequest.url, sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+ });
NSUInteger retries = [[sharingAccountsRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
if (retries > 0) {
ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:sharingAccountsRequest];
sharingAccountsRequest = newSharingAccountsRequest;
[[PithosUtilities prepareRequest:sharingAccountsRequest priority:[[sharingAccountsRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
} else {
- NSString *message;
- NSError *error = [sharingAccountsRequest error];
- if (error)
- message = [NSString stringWithFormat:@"Sharing accounts listing failed: %@", error];
- else
- message = [NSString stringWithFormat:@"Sharing accounts listing failed: (%d) %@",
- sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
- dispatch_async(dispatch_get_main_queue(), ^{
- [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
- });
[newChildren release];
newChildren = nil;
[sharingAccountsRequest release];