Modify PithosNodes to use the global concurrent dispatch queue for ASIPithosRequest...
[pithos-macos] / pithos-macos / PithosContainerNode.m
index cccdd13..15cd662 100644 (file)
@@ -131,10 +131,13 @@ static NSImage *sharedIcon = nil;
                 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];
@@ -193,13 +196,14 @@ static NSImage *sharedIcon = nil;
 #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];
@@ -208,7 +212,9 @@ static NSImage *sharedIcon = nil;
         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];
@@ -220,9 +226,11 @@ static NSImage *sharedIcon = nil;
             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) {
@@ -340,10 +348,13 @@ static NSImage *sharedIcon = nil;
             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];
@@ -364,9 +375,11 @@ static NSImage *sharedIcon = nil;
     } else {
         [self containerRequestFailed:containerRequest];
     }
+    [pool drain];
 }
 
 - (void)containerMetadataRequestFinished:(ASIPithosContainerRequest *)request {
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     NSLog(@"URL: %@", [request url]);
     NSLog(@"cached: %d", [request didUseCachedResponse]);
     
@@ -384,9 +397,11 @@ static NSImage *sharedIcon = nil;
             refreshMetadataContainerRequest = nil;
         }
     }
+    [pool drain];
 }
 
 - (void)containerMetadataRequestFailed:(ASIPithosContainerRequest *)request {
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     if ([request isEqualTo:applyMetadataContainerRequest]) {
         [PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataContainerRequest];
         @synchronized(self) {
@@ -400,6 +415,7 @@ static NSImage *sharedIcon = nil;
             refreshMetadataContainerRequest = nil;
         }
     }
+    [pool drain];
 }
 
 #pragma mark -
@@ -417,8 +433,14 @@ static NSImage *sharedIcon = nil;
                                                                                                                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];
         }
     }
@@ -429,8 +451,14 @@ static NSImage *sharedIcon = nil;
         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];
         }