Improve handling of node requests
authorMiltiadis Vasilakis <mvasilak@gmail.com>
Fri, 15 Mar 2013 12:13:40 +0000 (14:13 +0200)
committerMiltiadis Vasilakis <mvasilak@gmail.com>
Fri, 15 Mar 2013 12:13:40 +0000 (14:13 +0200)
Fix bug where autoreleased node requests where set nil and then released.

pithos-macos/PithosAccountNode.h
pithos-macos/PithosAccountNode.m
pithos-macos/PithosContainerNode.h
pithos-macos/PithosContainerNode.m
pithos-macos/PithosObjectNode.h
pithos-macos/PithosObjectNode.m
pithos-macos/PithosSharingAccountsNode.h
pithos-macos/PithosSharingAccountsNode.m
pithos-macos/PithosSubdirNode.h
pithos-macos/PithosSubdirNode.m

index 6be678c..b96f2e7 100644 (file)
@@ -56,6 +56,9 @@
 
 @property(nonatomic, strong) ASIPithos *pithos;
 @property(nonatomic, strong) ASIPithosAccount *pithosAccount;
+@property(nonatomic, strong) ASIPithosAccountRequest *accountRequest;
+@property(nonatomic, strong) ASIPithosAccountRequest *applyMetadataAccountRequest;
+@property(nonatomic, strong) ASIPithosAccountRequest *refreshMetadataAccountRequest;
 @property(nonatomic, strong) NSMutableDictionary *translatedGroups;
 
 - (id)initWithPithos:(ASIPithos *)aPithos;
index 42a210b..329b610 100644 (file)
@@ -49,7 +49,7 @@
 static NSImage *sharedIcon = nil;
 
 @implementation PithosAccountNode
-@synthesize pithos, pithosAccount, translatedGroups;
+@synthesize pithos, pithosAccount, accountRequest, applyMetadataAccountRequest, refreshMetadataAccountRequest, translatedGroups;
 
 + (void)initialize {
        if (self == [PithosAccountNode class])
@@ -111,11 +111,11 @@ static NSImage *sharedIcon = nil;
         pithos = aPithos;
         url = nil;
         [accountRequest clearDelegatesAndCancel];
-        accountRequest = nil;
+        self.accountRequest = nil;
         [refreshMetadataAccountRequest clearDelegatesAndCancel];
-        refreshMetadataAccountRequest = nil;
+        self.refreshMetadataAccountRequest = nil;
         [applyMetadataAccountRequest clearDelegatesAndCancel];
-        applyMetadataAccountRequest = nil;
+        self.applyMetadataAccountRequest = nil;
         reset = YES;
     }
 }
@@ -139,11 +139,11 @@ static NSImage *sharedIcon = nil;
     @synchronized(self) {
         if (reset) {
             [accountRequest clearDelegatesAndCancel];
-            accountRequest = nil;
+            self.accountRequest = nil;
             [refreshMetadataAccountRequest clearDelegatesAndCancel];
-            refreshMetadataAccountRequest = nil;
+            self.refreshMetadataAccountRequest = nil;
             [applyMetadataAccountRequest clearDelegatesAndCancel];
-            applyMetadataAccountRequest = nil;
+            self.applyMetadataAccountRequest = nil;
             children = nil;
             newChildren = nil;
             self.pithosAccount = nil;
@@ -157,11 +157,11 @@ static NSImage *sharedIcon = nil;
                 break;
             case PithosNodeStateRefreshNeeded:
                 freshness = PithosNodeStateRefreshing;
-                accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos 
-                                                                                     limit:0 
-                                                                                    marker:nil 
-                                                                                    shared:shared 
-                                                                                     until:nil];
+                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+                                                                                         limit:0
+                                                                                        marker:nil
+                                                                                        shared:shared
+                                                                                         until:nil];
                 if (sharingAccount)
                     [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
                 else if (!forcedRefresh)
@@ -230,11 +230,11 @@ static NSImage *sharedIcon = nil;
         if (retries > 0) {
             ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
             [(NSMutableDictionary *)(newAccountRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
-            accountRequest = newAccountRequest;
+            self.accountRequest = newAccountRequest;
             [[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
         } else {
             newChildren = nil;
-            accountRequest = nil;
+            self.accountRequest = nil;
             forcedRefresh = NO;
             @synchronized(self) {
                 freshness = PithosNodeStateRefreshNeeded;
@@ -290,7 +290,7 @@ static NSImage *sharedIcon = nil;
                     }]] makeObjectsPerformSelector:@selector(pithosNodeWillBeRemoved)];
                 }
                 // Else cache was used and all results were fetched during this request, so existing children can be reused
-                accountRequest = nil;
+                self.accountRequest = nil;
                 forcedRefresh = NO;
                 @synchronized(self) {
                     freshness = PithosNodeStateRefreshFinished;
@@ -298,11 +298,11 @@ static NSImage *sharedIcon = nil;
                 [self postChildrenUpdatedNotificationName];
             } else {
                 // Do an additional request to fetch more objects
-                accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos 
-                                                                                     limit:0 
-                                                                                    marker:[[someContainers lastObject] name] 
-                                                                                    shared:shared 
-                                                                                     until:nil];
+                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+                                                                                         limit:0
+                                                                                        marker:[[someContainers lastObject] name]
+                                                                                        shared:shared
+                                                                                         until:nil];
                 if (sharingAccount)
                     [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
                 else if (!forcedRefresh)
@@ -321,7 +321,7 @@ static NSImage *sharedIcon = nil;
             }
         } else if (accountRequest.responseStatusCode == 304) {
             // Account is not modified, so existing children can be reused
-            accountRequest = nil;
+            self.accountRequest = nil;
             forcedRefresh = NO;
             @synchronized(self) {
                 freshness = PithosNodeStateRefreshFinished;
@@ -340,13 +340,13 @@ static NSImage *sharedIcon = nil;
         
         if ([request isEqualTo:applyMetadataAccountRequest]) {
             @synchronized(self) {
-                applyMetadataAccountRequest = nil;
+                self.applyMetadataAccountRequest = nil;
             }
             [self refreshInfo];
         } else if ([request isEqualTo:refreshMetadataAccountRequest]) {
             self.pithosAccount = [refreshMetadataAccountRequest account];
             @synchronized(self) {
-                refreshMetadataAccountRequest = nil;
+                self.refreshMetadataAccountRequest = nil;
             }
         }
     }
@@ -360,11 +360,11 @@ static NSImage *sharedIcon = nil;
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             if ([request isEqualTo:applyMetadataAccountRequest]) {
                 @synchronized(self) {
-                    applyMetadataAccountRequest = newRequest;
+                    self.applyMetadataAccountRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshMetadataAccountRequest]) {
                 @synchronized(self) {
-                    refreshMetadataAccountRequest = newRequest;
+                    self.refreshMetadataAccountRequest = newRequest;
                 }
             }
             [[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
@@ -372,12 +372,12 @@ static NSImage *sharedIcon = nil;
             if ([request isEqualTo:applyMetadataAccountRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataAccountRequest];
                 @synchronized(self) {
-                    applyMetadataAccountRequest = nil;
+                    self.applyMetadataAccountRequest = nil;
                 }
             } else if ([request isEqualTo:refreshMetadataAccountRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataAccountRequest];
                 @synchronized(self) {
-                    refreshMetadataAccountRequest = nil;
+                    self.refreshMetadataAccountRequest = nil;
                 }
             }
         }
@@ -484,10 +484,10 @@ static NSImage *sharedIcon = nil;
                 [groups setObject:[NSArray arrayWithObject:@""] forKey:@"group"];
             }
             
-            applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
-                                                                                                    groups:groups 
-                                                                                                  metadata:pithosAccount.metadata 
-                                                                                                    update:NO];
+            self.applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
+                                                                                                        groups:groups
+                                                                                                      metadata:pithosAccount.metadata
+                                                                                                        update:NO];
             applyMetadataAccountRequest.delegate = self;
             applyMetadataAccountRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             applyMetadataAccountRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
@@ -505,7 +505,7 @@ static NSImage *sharedIcon = nil;
 - (void)refreshInfo {
     @synchronized(self) {
         if (refreshMetadataAccountRequest == nil) {
-            refreshMetadataAccountRequest = [ASIPithosAccountRequest accountMetadataRequestWithPithos:pithos];
+            self.refreshMetadataAccountRequest = [ASIPithosAccountRequest accountMetadataRequestWithPithos:pithos];
             refreshMetadataAccountRequest.delegate = self;
             refreshMetadataAccountRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             refreshMetadataAccountRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
index 5481d2b..7fdc335 100644 (file)
 
 @property(nonatomic, strong) ASIPithos *pithos;
 @property(nonatomic, strong) ASIPithosContainer *pithosContainer;
+@property(nonatomic, strong) ASIPithosContainerRequest *containerRequest;
 @property(nonatomic, strong) NSString *prefix;
+@property(nonatomic, strong) ASIPithosContainerRequest *applyMetadataContainerRequest;
+@property(nonatomic, strong) ASIPithosContainerRequest *refreshMetadataContainerRequest;
 @property(nonatomic, strong) NSString *policyVersioning;
 @property(nonatomic, strong) NSNumber *policyQuota;
 
index 8ec0954..e3d6200 100644 (file)
@@ -50,7 +50,7 @@
 static NSImage *sharedIcon = nil;
 
 @implementation PithosContainerNode
-@synthesize pithos, pithosContainer, prefix;
+@synthesize pithos, pithosContainer, containerRequest, prefix, applyMetadataContainerRequest, refreshMetadataContainerRequest;
 @synthesize policyVersioning, policyQuota;
 
 + (void)initialize {
@@ -117,16 +117,16 @@ static NSImage *sharedIcon = nil;
                 break;
             case PithosNodeStateRefreshNeeded:
                 freshness = PithosNodeStateRefreshing;
-                containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos 
-                                                                              containerName:pithosContainer.name 
-                                                                                      limit:0 
-                                                                                     marker:nil 
-                                                                                     prefix:prefix 
-                                                                                  delimiter:@"/" 
-                                                                                       path:nil 
-                                                                                       meta:nil 
-                                                                                     shared:shared 
-                                                                                      until:nil];
+                self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos
+                                                                                  containerName:pithosContainer.name
+                                                                                          limit:0
+                                                                                         marker:nil
+                                                                                         prefix:prefix
+                                                                                      delimiter:@"/"
+                                                                                           path:nil
+                                                                                           meta:nil
+                                                                                         shared:shared
+                                                                                          until:nil];
                 if (sharingAccount)
                     [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
                 else if (!forcedRefresh)
@@ -222,11 +222,11 @@ static NSImage *sharedIcon = nil;
         if (retries > 0) {
             ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
             [(NSMutableDictionary *)(newContainerRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
-            containerRequest = newContainerRequest;
+            self.containerRequest = newContainerRequest;
             [[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
         } else {
             newChildren = nil;
-            containerRequest = nil;
+            self.containerRequest = nil;
             forcedRefresh = NO;
             @synchronized(self) {
                 freshness = PithosNodeStateRefreshNeeded;
@@ -345,7 +345,7 @@ static NSImage *sharedIcon = nil;
                     }]] makeObjectsPerformSelector:@selector(pithosNodeWillBeRemoved)];
                 }
                 // Else cache was used and all results were fetched during this request, so existing children can be reused
-                containerRequest = nil;
+                self.containerRequest = nil;
                 forcedRefresh = NO;
                 @synchronized(self) {
                     freshness = PithosNodeStateRefreshFinished;
@@ -353,16 +353,16 @@ static NSImage *sharedIcon = nil;
                 [self postChildrenUpdatedNotificationName];
             } else {
                 // Do an additional request to fetch more objects
-                containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos 
-                                                                              containerName:pithosContainer.name 
-                                                                                      limit:0 
-                                                                                     marker:[[someObjects lastObject] name] 
-                                                                                     prefix:prefix 
-                                                                                  delimiter:@"/" 
-                                                                                       path:nil 
-                                                                                       meta:nil 
-                                                                                     shared:shared 
-                                                                                      until:nil];
+                self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos
+                                                                                  containerName:pithosContainer.name
+                                                                                          limit:0
+                                                                                         marker:[[someObjects lastObject] name]
+                                                                                         prefix:prefix
+                                                                                      delimiter:@"/"
+                                                                                           path:nil
+                                                                                           meta:nil
+                                                                                         shared:shared
+                                                                                          until:nil];
                 if (sharingAccount)
                     [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
                 else if (!forcedRefresh)
@@ -381,7 +381,7 @@ static NSImage *sharedIcon = nil;
             }
         } else if (containerRequest.responseStatusCode == 304) {
             // Container is not modified, so existing children can be reused
-            containerRequest = nil;
+            self.containerRequest = nil;
             forcedRefresh = NO;
             @synchronized(self) {
                 freshness = PithosNodeStateRefreshFinished;
@@ -400,14 +400,14 @@ static NSImage *sharedIcon = nil;
         
         if ([request isEqualTo:applyMetadataContainerRequest]) {
             @synchronized(self) {
-                applyMetadataContainerRequest = nil;
+                self.applyMetadataContainerRequest = nil;
             }
             [self refreshInfo];
         } else if ([request isEqualTo:refreshMetadataContainerRequest]) {
             [[pithosNodeInfoController window] makeFirstResponder:nil];
             self.pithosContainer = [refreshMetadataContainerRequest container];
             @synchronized(self) {
-                refreshMetadataContainerRequest = nil;
+                self.refreshMetadataContainerRequest = nil;
             }
         }
     }
@@ -421,11 +421,11 @@ static NSImage *sharedIcon = nil;
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             if ([request isEqualTo:applyMetadataContainerRequest]) {
                 @synchronized(self) {
-                    applyMetadataContainerRequest = newRequest;
+                    self.applyMetadataContainerRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshMetadataContainerRequest]) {
                 @synchronized(self) {
-                    refreshMetadataContainerRequest = newRequest;
+                    self.refreshMetadataContainerRequest = newRequest;
                 }
             }
             [[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
@@ -433,12 +433,12 @@ static NSImage *sharedIcon = nil;
             if ([request isEqualTo:applyMetadataContainerRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataContainerRequest];
                 @synchronized(self) {
-                    applyMetadataContainerRequest = nil;
+                    self.applyMetadataContainerRequest = nil;
                 }
             } else if ([request isEqualTo:refreshMetadataContainerRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataContainerRequest];
                 @synchronized(self) {
-                    refreshMetadataContainerRequest = nil;
+                    self.refreshMetadataContainerRequest = nil;
                 }
             }
         }
@@ -452,14 +452,14 @@ static NSImage *sharedIcon = nil;
     @synchronized(self) {
         if (applyMetadataContainerRequest == nil) {
             [[pithosNodeInfoController window] makeFirstResponder:nil];
-            applyMetadataContainerRequest = [ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithos 
-                                                                                                   containerName:pithosContainer.name 
-                                                                                                          policy:[NSDictionary dictionaryWithObjectsAndKeys:
-                                                                                                                  policyVersioning, @"versioning", 
-                                                                                                                  [policyQuota stringValue], @"quota", 
-                                                                                                                  nil] 
-                                                                                                        metadata:pithosContainer.metadata 
-                                                                                                          update:NO];
+            self.applyMetadataContainerRequest = [ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithos
+                                                                                                       containerName:pithosContainer.name
+                                                                                                              policy:[NSDictionary dictionaryWithObjectsAndKeys:
+                                                                                                                      policyVersioning, @"versioning",
+                                                                                                                      [policyQuota stringValue], @"quota",
+                                                                                                                      nil]
+                                                                                                            metadata:pithosContainer.metadata
+                                                                                                              update:NO];
             applyMetadataContainerRequest.delegate = self;
             applyMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             applyMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
@@ -477,8 +477,8 @@ static NSImage *sharedIcon = nil;
 - (void)refreshInfo {
     @synchronized(self) {
         if (refreshMetadataContainerRequest == nil) {
-            refreshMetadataContainerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos 
-                                                                                               containerName:pithosContainer.name];
+            self.refreshMetadataContainerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos
+                                                                                                   containerName:pithosContainer.name];
             refreshMetadataContainerRequest.delegate = self;
             refreshMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             refreshMetadataContainerRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
index 024b0ca..f0b1318 100644 (file)
@@ -64,6 +64,9 @@
 @property (nonatomic, strong) ASIPithosContainer *pithosContainer;
 @property (nonatomic, strong) ASIPithosObject *pithosObject;
 @property (nonatomic, strong) NSArray *versions;
+@property (nonatomic, strong) ASIPithosObjectRequest *applyMetadataObjectRequest;
+@property (nonatomic, strong) ASIPithosObjectRequest *refreshMetadataObjectRequest;
+@property (nonatomic, strong) ASIPithosObjectRequest *refreshVersionsObjectRequest;
 @property (nonatomic, assign) BOOL isPublic;
 @property (nonatomic, strong) NSString *translatedModifiedBy;
 @property (nonatomic, strong) NSMutableArray *translatedPermissions;
index fc797f1..1cf8cf1 100644 (file)
@@ -48,7 +48,7 @@
 #import "PithosObjectNodeInfoController.h"
 
 @implementation PithosObjectNode
-@synthesize pithos, pithosContainer, pithosObject, versions;
+@synthesize pithos, pithosContainer, pithosObject, versions, applyMetadataObjectRequest, refreshMetadataObjectRequest, refreshVersionsObjectRequest;
 @synthesize isPublic, translatedModifiedBy, translatedPermissions;
 
 #pragma mark -
             if (responseStatusCode != 202)
                 [PithosUtilities unexpectedResponseStatusAlertWithRequest:applyMetadataObjectRequest];
             @synchronized(self) {
-                applyMetadataObjectRequest = nil;
+                self.applyMetadataObjectRequest = nil;
             }
             if (responseStatusCode == 202)
                 [self refreshInfo];
             [[pithosNodeInfoController window] makeFirstResponder:nil];
             self.pithosObject = [refreshMetadataObjectRequest object];
             @synchronized(self) {
-                refreshMetadataObjectRequest = nil;
+                self.refreshMetadataObjectRequest = nil;
             }
         } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
             [[pithosNodeInfoController window] makeFirstResponder:nil];
             self.versions = [refreshVersionsObjectRequest versions];
             @synchronized(self) {
-                refreshVersionsObjectRequest = nil;
+                self.refreshVersionsObjectRequest = nil;
             }
         }
     }
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             if ([request isEqualTo:applyMetadataObjectRequest]) {
                 @synchronized(self) {
-                    applyMetadataObjectRequest = newRequest;
+                    self.applyMetadataObjectRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
                 @synchronized(self) {
-                    refreshMetadataObjectRequest = newRequest;
+                    self.refreshMetadataObjectRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
                 @synchronized(self) {
-                    refreshVersionsObjectRequest = newRequest;
+                    self.refreshVersionsObjectRequest = newRequest;
                 }
             }
             [[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
             if ([request isEqualTo:applyMetadataObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataObjectRequest];
                 @synchronized(self) {
-                    applyMetadataObjectRequest = nil;
+                    self.applyMetadataObjectRequest = nil;
                 }
             } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataObjectRequest];
                 @synchronized(self) {
-                    refreshMetadataObjectRequest = nil;
+                    self.refreshMetadataObjectRequest = nil;
                 }
             } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshVersionsObjectRequest];
                 @synchronized(self) {
-                    refreshVersionsObjectRequest = nil;
+                    self.refreshVersionsObjectRequest = nil;
                 }
             }
         }
         if (applyMetadataObjectRequest == nil) {
             [[pithosNodeInfoController window] makeFirstResponder:nil];
             if (sharingAccount) {
-                applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
-                                                                                             containerName:pithosContainer.name
-                                                                                                objectName:pithosObject.name
-                                                                                           contentEncoding:nil
-                                                                                        contentDisposition:nil
-                                                                                                  manifest:nil
-                                                                                                   sharing:nil
-                                                                                                  isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
-                                                                                                  metadata:pithosObject.metadata
-                                                                                                    update:NO];
+                self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                                                                                                  containerName:pithosContainer.name
+                                                                                                     objectName:pithosObject.name
+                                                                                                contentEncoding:nil
+                                                                                             contentDisposition:nil
+                                                                                                       manifest:nil
+                                                                                                        sharing:nil
+                                                                                                       isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+                                                                                                       metadata:pithosObject.metadata
+                                                                                                         update:NO];
                 [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
             } else {
                 NSMutableArray *permissions = [NSMutableArray array];
                 }
                 pithosObject.permissions = permissions;
             
-                applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos 
-                                                                                              containerName:pithosContainer.name 
-                                                                                                 objectName:pithosObject.name 
-                                                                                            contentEncoding:pithosObject.contentEncoding 
-                                                                                         contentDisposition:pithosObject.contentDisposition 
-                                                                                                   manifest:pithosObject.manifest 
-                                                                                                    sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
-                                                                                                   isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse) 
-                                                                                                   metadata:pithosObject.metadata
-                                                                                                     update:NO];
+                self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                                                                                                  containerName:pithosContainer.name
+                                                                                                     objectName:pithosObject.name
+                                                                                                contentEncoding:pithosObject.contentEncoding
+                                                                                             contentDisposition:pithosObject.contentDisposition
+                                                                                                       manifest:pithosObject.manifest
+                                                                                                        sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
+                                                                                                       isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+                                                                                                       metadata:pithosObject.metadata
+                                                                                                         update:NO];
             }
             applyMetadataObjectRequest.delegate = self;
             applyMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
 - (void)refreshInfo {
     @synchronized(self) {
         if (refreshMetadataObjectRequest == nil) {
-            refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos 
-                                                                                      containerName:pithosContainer.name 
-                                                                                         objectName:pithosObject.name];
+            self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos
+                                                                                          containerName:pithosContainer.name
+                                                                                             objectName:pithosObject.name];
             if (sharingAccount)
                 [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
             refreshMetadataObjectRequest.delegate = self;
 - (void)refreshVersions {
     @synchronized(self) {
         if (refreshVersionsObjectRequest == nil) {
-            refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos 
-                                                                                      containerName:pithosContainer.name 
-                                                                                         objectName:pithosObject.name];
+            self.refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos
+                                                                                          containerName:pithosContainer.name
+                                                                                             objectName:pithosObject.name];
             if (sharingAccount)
                 [refreshVersionsObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
             refreshVersionsObjectRequest.delegate = self;
index c3d8691..5f86aea 100644 (file)
@@ -48,6 +48,7 @@
 }
 
 @property(nonatomic, strong) ASIPithos *pithos;
+@property(nonatomic, strong) ASIPithosRequest *sharingAccountsRequest;
 
 - (id)initWithPithos:(ASIPithos *)aPithos;
 
index 9059d3f..c30091c 100644 (file)
@@ -46,7 +46,7 @@
 #import "PithosActivityFacility.h"
 
 @implementation PithosSharingAccountsNode
-@synthesize pithos;
+@synthesize pithos, sharingAccountsRequest;
 
 #pragma mark -
 #pragma mark Object Lifecycle
@@ -71,7 +71,7 @@
         pithos = aPithos;
         url = nil;
         [sharingAccountsRequest clearDelegatesAndCancel];
-        sharingAccountsRequest = nil;
+        self.sharingAccountsRequest = nil;
         reset = YES;
     }
 }
@@ -86,7 +86,7 @@
     @synchronized(self) {
         if (reset) {
             [sharingAccountsRequest clearDelegatesAndCancel];
-            sharingAccountsRequest = nil;
+            self.sharingAccountsRequest = nil;
             children = nil;
             newChildren = nil;
             freshness = PithosNodeStateRefreshNeeded;
@@ -99,7 +99,7 @@
                 break;
             case PithosNodeStateRefreshNeeded:
                 freshness = PithosNodeStateRefreshing;
-                sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos limit:0 marker:nil];
+                self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos limit:0 marker:nil];
                 sharingAccountsRequest.delegate = self;
                 sharingAccountsRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
                 sharingAccountsRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
         if (retries > 0) {
             ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:sharingAccountsRequest];
             [(NSMutableDictionary *)(newSharingAccountsRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
-            sharingAccountsRequest = newSharingAccountsRequest;
+            self.sharingAccountsRequest = newSharingAccountsRequest;
             [[PithosUtilities prepareRequest:sharingAccountsRequest priority:[[sharingAccountsRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
         } else {
             newChildren = nil;
-            sharingAccountsRequest = nil;
+            self.sharingAccountsRequest = nil;
             forcedRefresh = NO;
             @synchronized(self) {
                 freshness = PithosNodeStateRefreshNeeded;
                     [sharingAccountsNames addObject:account.name];
                 }
                 [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:sharingAccountsNames];
-                sharingAccountsRequest = nil;
+                self.sharingAccountsRequest = nil;
                 forcedRefresh = NO;
                 @synchronized(self) {
                     freshness = PithosNodeStateRefreshFinished;
                 [self postChildrenUpdatedNotificationName];
             } else {
                 // Do an additional request to fetch more objects
-                sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos 
-                                                                                           limit:0 
-                                                                                          marker:[[someSharingAccounts lastObject] name]];
+                self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos
+                                                                                               limit:0
+                                                                                              marker:[[someSharingAccounts lastObject] name]];
                 sharingAccountsRequest.delegate = self;
                 sharingAccountsRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
                 sharingAccountsRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
index 6b0199b..2d55b0e 100644 (file)
@@ -60,6 +60,9 @@
 
 @property (nonatomic, strong) ASIPithosObject *pithosObject;
 @property (nonatomic, strong) NSArray *versions;
+@property (nonatomic, strong) ASIPithosObjectRequest *applyMetadataObjectRequest;
+@property (nonatomic, strong) ASIPithosObjectRequest *refreshMetadataObjectRequest;
+@property (nonatomic, strong) ASIPithosObjectRequest *refreshVersionsObjectRequest;
 @property (nonatomic, assign) BOOL isPublic;
 @property (nonatomic, strong) NSString *translatedModifiedBy;
 @property (nonatomic, strong) NSMutableArray *translatedPermissions;
index ba3e492..d5744a1 100644 (file)
@@ -51,7 +51,7 @@
 static NSImage *sharedIcon = nil;
 
 @implementation PithosSubdirNode
-@synthesize pithosObject, versions;
+@synthesize pithosObject, versions, applyMetadataObjectRequest, refreshMetadataObjectRequest, refreshVersionsObjectRequest;
 @synthesize isPublic, translatedModifiedBy, translatedPermissions;
 
 + (void)initialize {
@@ -220,7 +220,7 @@ static NSImage *sharedIcon = nil;
             if ((responseStatusCode != 201) && (responseStatusCode != 202))
                 [PithosUtilities unexpectedResponseStatusAlertWithRequest:applyMetadataObjectRequest];
             @synchronized(self) {
-                applyMetadataObjectRequest = nil;
+                self.applyMetadataObjectRequest = nil;
             }
             if ((responseStatusCode == 201) || (responseStatusCode == 202))
                 [self refreshInfo];
@@ -234,13 +234,13 @@ static NSImage *sharedIcon = nil;
                 refreshParent = NO;
             }
             @synchronized(self) {
-                refreshMetadataObjectRequest = nil;
+                self.refreshMetadataObjectRequest = nil;
             }
         } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
             [[pithosNodeInfoController window] makeFirstResponder:nil];
             self.versions = [refreshVersionsObjectRequest versions];
             @synchronized(self) {
-                refreshVersionsObjectRequest = nil;
+                self.refreshVersionsObjectRequest = nil;
             }
         }
     }
@@ -254,15 +254,15 @@ static NSImage *sharedIcon = nil;
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             if ([request isEqualTo:applyMetadataObjectRequest]) {
                 @synchronized(self) {
-                    applyMetadataObjectRequest = newRequest;
+                    self.applyMetadataObjectRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
                 @synchronized(self) {
-                    refreshMetadataObjectRequest = newRequest;
+                    self.refreshMetadataObjectRequest = newRequest;
                 }
             } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
                 @synchronized(self) {
-                    refreshVersionsObjectRequest = newRequest;
+                    self.refreshVersionsObjectRequest = newRequest;
                 }
             }
             [[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
@@ -270,17 +270,17 @@ static NSImage *sharedIcon = nil;
             if ([request isEqualTo:applyMetadataObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataObjectRequest];
                 @synchronized(self) {
-                    applyMetadataObjectRequest = nil;
+                    self.applyMetadataObjectRequest = nil;
                 }
             } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataObjectRequest];
                 @synchronized(self) {
-                    refreshMetadataObjectRequest = nil;
+                    self.refreshMetadataObjectRequest = nil;
                 }
             } else if ([request isEqualTo:refreshVersionsObjectRequest]) {
                 [PithosUtilities httpRequestErrorAlertWithRequest:refreshVersionsObjectRequest];
                 @synchronized(self) {
-                    refreshVersionsObjectRequest = nil;
+                    self.refreshVersionsObjectRequest = nil;
                 }
             }
         }
@@ -453,18 +453,18 @@ static NSImage *sharedIcon = nil;
                     }
                     pithosObject.permissions = permissions;
                     
-                    applyMetadataObjectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithos 
-                                                                                             containerName:pithosContainer.name 
-                                                                                                objectName:prefix 
-                                                                                                      eTag:nil
-                                                                                               contentType:@"application/directory"
-                                                                                           contentEncoding:pithosObject.contentEncoding 
-                                                                                        contentDisposition:pithosObject.contentDisposition 
-                                                                                                  manifest:pithosObject.manifest 
-                                                                                                   sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
-                                                                                                  isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse) 
-                                                                                                  metadata:pithosObject.metadata 
-                                                                                                      data:[NSData data]];
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithos
+                                                                                                 containerName:pithosContainer.name
+                                                                                                    objectName:prefix
+                                                                                                          eTag:nil
+                                                                                                   contentType:@"application/directory"
+                                                                                               contentEncoding:pithosObject.contentEncoding
+                                                                                            contentDisposition:pithosObject.contentDisposition
+                                                                                                      manifest:pithosObject.manifest
+                                                                                                       sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
+                                                                                                      isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+                                                                                                      metadata:pithosObject.metadata
+                                                                                                          data:[NSData data]];
                     pithosObject.subdir = NO;
                     applyMetadataObjectRequest.delegate = self;
                     applyMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
@@ -480,16 +480,16 @@ static NSImage *sharedIcon = nil;
             } else {
                 [[pithosNodeInfoController window] makeFirstResponder:nil];
                 if (sharingAccount) {
-                    applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos 
-                                                                                                  containerName:pithosContainer.name 
-                                                                                                     objectName:pithosObject.name 
-                                                                                                contentEncoding:nil
-                                                                                             contentDisposition:nil
-                                                                                                       manifest:nil 
-                                                                                                        sharing:nil 
-                                                                                                       isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse) 
-                                                                                                       metadata:pithosObject.metadata
-                                                                                                         update:NO];
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                                                                                                      containerName:pithosContainer.name
+                                                                                                         objectName:pithosObject.name
+                                                                                                    contentEncoding:nil
+                                                                                                 contentDisposition:nil
+                                                                                                           manifest:nil
+                                                                                                            sharing:nil
+                                                                                                           isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+                                                                                                           metadata:pithosObject.metadata
+                                                                                                             update:NO];
                     [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
                 } else {
                     NSMutableArray *permissions = [NSMutableArray array];
@@ -610,16 +610,16 @@ static NSImage *sharedIcon = nil;
                     }
                     pithosObject.permissions = permissions;
 
-                    applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos 
-                                                                                                  containerName:pithosContainer.name 
-                                                                                                     objectName:pithosObject.name 
-                                                                                                contentEncoding:pithosObject.contentEncoding
-                                                                                             contentDisposition:pithosObject.contentDisposition 
-                                                                                                       manifest:pithosObject.manifest 
-                                                                                                        sharing:(pithosObject.sharing ? pithosObject.sharing : @"") 
-                                                                                                       isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse) 
-                                                                                                       metadata:pithosObject.metadata
-                                                                                                         update:NO];
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                                                                                                      containerName:pithosContainer.name
+                                                                                                         objectName:pithosObject.name
+                                                                                                    contentEncoding:pithosObject.contentEncoding
+                                                                                                 contentDisposition:pithosObject.contentDisposition
+                                                                                                           manifest:pithosObject.manifest
+                                                                                                            sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
+                                                                                                           isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+                                                                                                           metadata:pithosObject.metadata
+                                                                                                             update:NO];
                 }
                 applyMetadataObjectRequest.delegate = self;
                 applyMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
@@ -642,9 +642,9 @@ static NSImage *sharedIcon = nil;
             self.pithosObject = [ASIPithosObject subdirWithName:pithosObject.name];
             return;
         } else if (refreshMetadataObjectRequest == nil) {
-            refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos 
-                                                                                      containerName:pithosContainer.name 
-                                                                                         objectName:prefix];
+            self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos
+                                                                                          containerName:pithosContainer.name
+                                                                                             objectName:prefix];
             if (sharingAccount)
                 [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
             refreshMetadataObjectRequest.delegate = self;
@@ -672,9 +672,9 @@ static NSImage *sharedIcon = nil;
         if (pithosObject.subdir) {
             return;
         } else if (refreshVersionsObjectRequest == nil) {
-            refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos 
-                                                                                      containerName:pithosContainer.name 
-                                                                                         objectName:pithosObject.name];
+            self.refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos
+                                                                                          containerName:pithosContainer.name
+                                                                                             objectName:pithosObject.name];
             if (sharingAccount)
                 [refreshVersionsObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
             refreshVersionsObjectRequest.delegate = self;