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