Revision cb6abe72 pithos-macos/PithosContainerNode.m
b/pithos-macos/PithosContainerNode.m | ||
---|---|---|
55 | 55 |
|
56 | 56 |
+ (void)initialize { |
57 | 57 |
if (self == [PithosContainerNode class]) |
58 |
sharedIcon = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericHardDiskIcon)] retain];
|
|
58 |
sharedIcon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericHardDiskIcon)];
|
|
59 | 59 |
} |
60 | 60 |
|
61 | 61 |
#pragma mark - |
... | ... | |
87 | 87 |
|
88 | 88 |
- (void)dealloc { |
89 | 89 |
[containerRequest clearDelegatesAndCancel]; |
90 |
[containerRequest release]; |
|
91 | 90 |
[refreshMetadataContainerRequest clearDelegatesAndCancel]; |
92 |
[refreshMetadataContainerRequest release]; |
|
93 | 91 |
[applyMetadataContainerRequest clearDelegatesAndCancel]; |
94 |
[applyMetadataContainerRequest release]; |
|
95 |
[policyQuota release]; |
|
96 |
[policyVersioning release]; |
|
97 |
[prefix release]; |
|
98 |
[objects release]; |
|
99 |
[pithosContainer release]; |
|
100 |
[pithos release]; |
|
101 |
[super dealloc]; |
|
102 | 92 |
} |
103 | 93 |
|
104 | 94 |
#pragma mark - |
... | ... | |
106 | 96 |
|
107 | 97 |
- (void)setPithos:(ASIPithos *)aPithos { |
108 | 98 |
if (aPithos && ![aPithos isEqualTo:pithos]) { |
109 |
[pithos release]; |
|
110 |
pithos = [aPithos retain]; |
|
111 |
[url release]; |
|
99 |
pithos = aPithos; |
|
112 | 100 |
url = nil; |
113 | 101 |
} |
114 | 102 |
} |
... | ... | |
129 | 117 |
break; |
130 | 118 |
case PithosNodeStateRefreshNeeded: |
131 | 119 |
freshness = PithosNodeStateRefreshing; |
132 |
containerRequest = [[ASIPithosContainerRequest listObjectsRequestWithPithos:pithos
|
|
120 |
containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos |
|
133 | 121 |
containerName:pithosContainer.name |
134 | 122 |
limit:0 |
135 | 123 |
marker:nil |
... | ... | |
138 | 126 |
path:nil |
139 | 127 |
meta:nil |
140 | 128 |
shared:shared |
141 |
until:nil] retain];
|
|
129 |
until:nil]; |
|
142 | 130 |
if (sharingAccount) |
143 | 131 |
[containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos]; |
144 | 132 |
else if (!forcedRefresh) |
... | ... | |
158 | 146 |
break; |
159 | 147 |
case PithosNodeStateRefreshFinished: |
160 | 148 |
if (newChildren) { |
161 |
[children release]; |
|
162 | 149 |
children = newChildren; |
163 | 150 |
newChildren = nil; |
164 | 151 |
} |
... | ... | |
171 | 158 |
} |
172 | 159 |
|
173 | 160 |
- (NSString *)displayName { |
174 |
return [[pithosContainer.name copy] autorelease];
|
|
161 |
return [pithosContainer.name copy];
|
|
175 | 162 |
} |
176 | 163 |
|
177 | 164 |
- (void)setDisplayName:(NSString *)aDisplayName { |
... | ... | |
180 | 167 |
- (NSImage *)icon { |
181 | 168 |
if (icon == nil) { |
182 | 169 |
if ([pithosContainer.name isEqualToString:@"pithos"]) |
183 |
icon = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kToolbarHomeIcon)] retain];
|
|
170 |
icon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kToolbarHomeIcon)];
|
|
184 | 171 |
else if ([pithosContainer.name isEqualToString:@"trash"]) |
185 |
icon = [[[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kFullTrashIcon)] retain];
|
|
172 |
icon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kFullTrashIcon)];
|
|
186 | 173 |
else |
187 |
icon = [sharedIcon retain];
|
|
174 |
icon = sharedIcon;
|
|
188 | 175 |
} |
189 | 176 |
return icon; |
190 | 177 |
} |
191 | 178 |
|
192 | 179 |
- (void)setPithosContainer:(ASIPithosContainer *)aPithosContainer { |
193 | 180 |
if (![pithosContainer isEqualTo:aPithosContainer]) { |
194 |
[pithosContainer release]; |
|
195 |
pithosContainer = [aPithosContainer retain]; |
|
181 |
pithosContainer = aPithosContainer; |
|
196 | 182 |
} |
197 | 183 |
if (pithosContainer.policy) { |
198 | 184 |
self.policyVersioning = [pithosContainer.policy objectForKey:@"versioning"]; |
... | ... | |
236 | 222 |
if (retries > 0) { |
237 | 223 |
ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest]; |
238 | 224 |
[(NSMutableDictionary *)(newContainerRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"]; |
239 |
[containerRequest release]; |
|
240 | 225 |
containerRequest = newContainerRequest; |
241 | 226 |
[[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous]; |
242 | 227 |
} else { |
243 |
[newChildren release]; |
|
244 | 228 |
newChildren = nil; |
245 |
[containerRequest release]; |
|
246 | 229 |
containerRequest = nil; |
247 |
[objects release]; |
|
248 | 230 |
objects = nil; |
249 | 231 |
forcedRefresh = NO; |
250 | 232 |
@synchronized(self) { |
... | ... | |
287 | 269 |
NSUInteger sameNameObjectIndex = [objectNames indexOfObject:[object.name substringToIndex:([object.name length] - 1)]]; |
288 | 270 |
if ((sameNameObjectIndex == NSNotFound) || |
289 | 271 |
![PithosUtilities isContentTypeDirectory:[[objects objectAtIndex:sameNameObjectIndex] contentType]]) { |
290 |
PithosSubdirNode *node = [[[PithosSubdirNode alloc] initWithPithos:pithos
|
|
272 |
PithosSubdirNode *node = [[PithosSubdirNode alloc] initWithPithos:pithos |
|
291 | 273 |
pithosContainer:pithosContainer |
292 |
pithosObject:object] autorelease];
|
|
274 |
pithosObject:object]; |
|
293 | 275 |
node.parent = self; |
294 | 276 |
node.shared = shared; |
295 | 277 |
node.sharingAccount = sharingAccount; |
... | ... | |
310 | 292 |
[newChildren addObject:node]; |
311 | 293 |
} |
312 | 294 |
} else if ([PithosUtilities isContentTypeDirectory:object.contentType]) { |
313 |
PithosSubdirNode *node = [[[PithosSubdirNode alloc] initWithPithos:pithos
|
|
295 |
PithosSubdirNode *node = [[PithosSubdirNode alloc] initWithPithos:pithos |
|
314 | 296 |
pithosContainer:pithosContainer |
315 |
pithosObject:object] autorelease];
|
|
297 |
pithosObject:object]; |
|
316 | 298 |
node.parent = self; |
317 | 299 |
node.shared = shared; |
318 | 300 |
node.sharingAccount = sharingAccount; |
... | ... | |
330 | 312 |
} |
331 | 313 |
[newChildren addObject:node]; |
332 | 314 |
} else { |
333 |
PithosObjectNode *node = [[[PithosObjectNode alloc] initWithPithos:pithos
|
|
315 |
PithosObjectNode *node = [[PithosObjectNode alloc] initWithPithos:pithos |
|
334 | 316 |
pithosContainer:pithosContainer |
335 |
pithosObject:object] autorelease];
|
|
317 |
pithosObject:object]; |
|
336 | 318 |
node.parent = self; |
337 | 319 |
node.shared = shared; |
338 | 320 |
node.sharingAccount = sharingAccount; |
... | ... | |
360 | 342 |
}]] makeObjectsPerformSelector:@selector(pithosNodeWillBeRemoved)]; |
361 | 343 |
} |
362 | 344 |
// Else cache was used and all results were fetched during this request, so existing children can be reused |
363 |
[containerRequest release]; |
|
364 | 345 |
containerRequest = nil; |
365 |
[objects release]; |
|
366 | 346 |
objects = nil; |
367 | 347 |
forcedRefresh = NO; |
368 | 348 |
@synchronized(self) { |
... | ... | |
370 | 350 |
} |
371 | 351 |
[self postChildrenUpdatedNotificationName]; |
372 | 352 |
} else { |
373 |
[containerRequest release]; |
|
374 | 353 |
// Do an additional request to fetch more objects |
375 |
containerRequest = [[ASIPithosContainerRequest listObjectsRequestWithPithos:pithos
|
|
354 |
containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos |
|
376 | 355 |
containerName:pithosContainer.name |
377 | 356 |
limit:0 |
378 | 357 |
marker:[[someObjects lastObject] name] |
... | ... | |
381 | 360 |
path:nil |
382 | 361 |
meta:nil |
383 | 362 |
shared:shared |
384 |
until:nil] retain];
|
|
363 |
until:nil]; |
|
385 | 364 |
if (sharingAccount) |
386 | 365 |
[containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos]; |
387 | 366 |
else if (!forcedRefresh) |
... | ... | |
399 | 378 |
} |
400 | 379 |
} else if (containerRequest.responseStatusCode == 304) { |
401 | 380 |
// Container is not modified, so existing children can be reused |
402 |
[containerRequest release]; |
|
403 | 381 |
containerRequest = nil; |
404 |
[objects release]; |
|
405 | 382 |
objects = nil; |
406 | 383 |
forcedRefresh = NO; |
407 | 384 |
@synchronized(self) { |
... | ... | |
421 | 398 |
|
422 | 399 |
if ([request isEqualTo:applyMetadataContainerRequest]) { |
423 | 400 |
@synchronized(self) { |
424 |
[applyMetadataContainerRequest release]; |
|
425 | 401 |
applyMetadataContainerRequest = nil; |
426 | 402 |
} |
427 | 403 |
[self refreshInfo]; |
... | ... | |
429 | 405 |
[[pithosNodeInfoController window] makeFirstResponder:nil]; |
430 | 406 |
self.pithosContainer = [refreshMetadataContainerRequest container]; |
431 | 407 |
@synchronized(self) { |
432 |
[refreshMetadataContainerRequest release]; |
|
433 | 408 |
refreshMetadataContainerRequest = nil; |
434 | 409 |
} |
435 | 410 |
} |
... | ... | |
444 | 419 |
[(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"]; |
445 | 420 |
if ([request isEqualTo:applyMetadataContainerRequest]) { |
446 | 421 |
@synchronized(self) { |
447 |
[applyMetadataContainerRequest release]; |
|
448 | 422 |
applyMetadataContainerRequest = newRequest; |
449 | 423 |
} |
450 | 424 |
} else if ([request isEqualTo:refreshMetadataContainerRequest]) { |
451 | 425 |
@synchronized(self) { |
452 |
[refreshMetadataContainerRequest release]; |
|
453 | 426 |
refreshMetadataContainerRequest = newRequest; |
454 | 427 |
} |
455 | 428 |
} |
456 | 429 |
[[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous]; |
457 |
[newRequest release]; |
|
458 | 430 |
} else { |
459 | 431 |
if ([request isEqualTo:applyMetadataContainerRequest]) { |
460 | 432 |
[PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataContainerRequest]; |
461 | 433 |
@synchronized(self) { |
462 |
[applyMetadataContainerRequest release]; |
|
463 | 434 |
applyMetadataContainerRequest = nil; |
464 | 435 |
} |
465 | 436 |
} else if ([request isEqualTo:refreshMetadataContainerRequest]) { |
466 | 437 |
[PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataContainerRequest]; |
467 | 438 |
@synchronized(self) { |
468 |
[refreshMetadataContainerRequest release]; |
|
469 | 439 |
refreshMetadataContainerRequest = nil; |
470 | 440 |
} |
471 | 441 |
} |
... | ... | |
480 | 450 |
@synchronized(self) { |
481 | 451 |
if (applyMetadataContainerRequest == nil) { |
482 | 452 |
[[pithosNodeInfoController window] makeFirstResponder:nil]; |
483 |
applyMetadataContainerRequest = [[ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithos
|
|
453 |
applyMetadataContainerRequest = [ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithos |
|
484 | 454 |
containerName:pithosContainer.name |
485 | 455 |
policy:[NSDictionary dictionaryWithObjectsAndKeys: |
486 | 456 |
policyVersioning, @"versioning", |
487 | 457 |
[policyQuota stringValue], @"quota", |
488 | 458 |
nil] |
489 | 459 |
metadata:pithosContainer.metadata |
490 |
update:NO] retain];
|
|
460 |
update:NO]; |
|
491 | 461 |
applyMetadataContainerRequest.delegate = self; |
492 | 462 |
applyMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:); |
493 | 463 |
applyMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:); |
... | ... | |
505 | 475 |
- (void)refreshInfo { |
506 | 476 |
@synchronized(self) { |
507 | 477 |
if (refreshMetadataContainerRequest == nil) { |
508 |
refreshMetadataContainerRequest = [[ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos
|
|
509 |
containerName:pithosContainer.name] retain];
|
|
478 |
refreshMetadataContainerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos |
|
479 |
containerName:pithosContainer.name]; |
|
510 | 480 |
refreshMetadataContainerRequest.delegate = self; |
511 | 481 |
refreshMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:); |
512 | 482 |
refreshMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:); |
Also available in: Unified diff