+ (void)initialize {
if (self == [PithosAccountNode class])
- sharedIcon = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kUserIcon)] retain];
+ sharedIcon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kUserIcon)];
}
#pragma mark -
- (id)initWithPithos:(ASIPithos *)aPithos {
if ((self = [super init])) {
- pithos = [aPithos retain];
+ pithos = aPithos;
}
return self;
}
- (void)dealloc {
[accountRequest clearDelegatesAndCancel];
- [accountRequest release];
[refreshMetadataAccountRequest clearDelegatesAndCancel];
- [refreshMetadataAccountRequest release];
[applyMetadataAccountRequest clearDelegatesAndCancel];
- [applyMetadataAccountRequest release];
- [containers release];
- [pithosAccount release];
- [pithos release];
- [super dealloc];
}
#pragma mark -
- (void)setPithos:(ASIPithos *)aPithos {
if (aPithos && ![aPithos isEqualTo:pithos]) {
- [pithos release];
- pithos = [aPithos retain];
- [url release];
+ pithos = aPithos;
url = nil;
[accountRequest clearDelegatesAndCancel];
- [accountRequest release];
accountRequest = nil;
[refreshMetadataAccountRequest clearDelegatesAndCancel];
- [refreshMetadataAccountRequest release];
refreshMetadataAccountRequest = nil;
[applyMetadataAccountRequest clearDelegatesAndCancel];
- [applyMetadataAccountRequest release];
applyMetadataAccountRequest = nil;
reset = YES;
}
@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;
break;
case PithosNodeStateRefreshNeeded:
freshness = PithosNodeStateRefreshing;
- accountRequest = [[ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+ accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
limit:0
marker:nil
shared:shared
- until:nil] retain];
+ until:nil];
if (sharingAccount)
[accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
else if (!forcedRefresh)
break;
case PithosNodeStateRefreshFinished:
if (newChildren) {
- [children release];
children = newChildren;
newChildren = nil;
}
- (NSString *)displayName {
if (displayName == nil)
return [NSString stringWithString:(sharingAccount ? sharingAccount : @"account")];
- return [[displayName copy] autorelease];
+ return [displayName copy];
}
- (NSImage *)icon {
if (icon == nil)
- icon = [sharedIcon retain];
+ icon = sharedIcon;
return icon;
}
if (retries > 0) {
ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
[(NSMutableDictionary *)(newAccountRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
- [accountRequest release];
accountRequest = newAccountRequest;
[[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
} else {
- [newChildren release];
newChildren = nil;
- [accountRequest release];
accountRequest = nil;
- [containers release];
containers = nil;
forcedRefresh = NO;
@synchronized(self) {
newChildren = [[NSMutableArray alloc] init];
NSMutableIndexSet *keptNodes = [NSMutableIndexSet indexSet];
for (ASIPithosContainer *container in containers) {
- PithosContainerNode *node = [[[PithosContainerNode alloc] initWithPithos:pithos pithosContainer:container] autorelease];
+ PithosContainerNode *node = [[PithosContainerNode alloc] initWithPithos:pithos pithosContainer:container];
node.parent = self;
node.shared = shared;
node.sharingAccount = sharingAccount;
}]] makeObjectsPerformSelector:@selector(pithosNodeWillBeRemoved)];
}
// Else cache was used and all results were fetched during this request, so existing children can be reused
- [accountRequest release];
accountRequest = nil;
- [containers release];
containers = nil;
forcedRefresh = NO;
@synchronized(self) {
}
[self postChildrenUpdatedNotificationName];
} else {
- [accountRequest release];
// Do an additional request to fetch more objects
- accountRequest = [[ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+ accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
limit:0
marker:[[someContainers lastObject] name]
shared:shared
- until:nil] retain];
+ until:nil];
if (sharingAccount)
[accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
else if (!forcedRefresh)
}
} else if (accountRequest.responseStatusCode == 304) {
// Account is not modified, so existing children can be reused
- [accountRequest release];
accountRequest = nil;
- [containers release];
containers = nil;
forcedRefresh = NO;
@synchronized(self) {
if ([request isEqualTo:applyMetadataAccountRequest]) {
@synchronized(self) {
- [applyMetadataAccountRequest release];
applyMetadataAccountRequest = nil;
}
[self refreshInfo];
} else if ([request isEqualTo:refreshMetadataAccountRequest]) {
self.pithosAccount = [refreshMetadataAccountRequest account];
@synchronized(self) {
- [refreshMetadataAccountRequest release];
refreshMetadataAccountRequest = nil;
}
}
[(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
if ([request isEqualTo:applyMetadataAccountRequest]) {
@synchronized(self) {
- [applyMetadataAccountRequest release];
applyMetadataAccountRequest = newRequest;
}
} else if ([request isEqualTo:refreshMetadataAccountRequest]) {
@synchronized(self) {
- [refreshMetadataAccountRequest release];
refreshMetadataAccountRequest = newRequest;
}
}
[[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
- [newRequest release];
} else {
if ([request isEqualTo:applyMetadataAccountRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataAccountRequest];
@synchronized(self) {
- [applyMetadataAccountRequest release];
applyMetadataAccountRequest = nil;
}
} else if ([request isEqualTo:refreshMetadataAccountRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataAccountRequest];
@synchronized(self) {
- [refreshMetadataAccountRequest release];
refreshMetadataAccountRequest = nil;
}
}
NSMutableDictionary *groups = pithosAccount.groups;
if ([groups count] == 0)
groups = [NSMutableDictionary dictionaryWithObject:@"" forKey:@"group"];
- applyMetadataAccountRequest = [[ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
+ applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
groups:groups
metadata:pithosAccount.metadata
- update:NO] retain];
+ update:NO];
applyMetadataAccountRequest.delegate = self;
applyMetadataAccountRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
applyMetadataAccountRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
- (void)refreshInfo {
@synchronized(self) {
if (refreshMetadataAccountRequest == nil) {
- refreshMetadataAccountRequest = [[ASIPithosAccountRequest accountMetadataRequestWithPithos:pithos] retain];
+ refreshMetadataAccountRequest = [ASIPithosAccountRequest accountMetadataRequestWithPithos:pithos];
refreshMetadataAccountRequest.delegate = self;
refreshMetadataAccountRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
refreshMetadataAccountRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);