Retry failed browser or node service requests that may have an updated URL in the...
[pithos-macos] / pithos-macos / PithosSubdirNode.m
index 7c3d513..6181da7 100644 (file)
@@ -2,7 +2,7 @@
 //  PithosSubdirNode.m
 //  pithos-macos
 //
-// Copyright 2011-2012 GRNET S.A. All rights reserved.
+// Copyright 2011-2013 GRNET S.A. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or
 // without modification, are permitted provided that the following
@@ -63,11 +63,9 @@ static NSImage *sharedIcon = nil;
 #pragma mark Object Lifecycle
 
 - (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager
-                         andPithos:(ASIPithos *)aPithos
                    pithosContainer:(ASIPithosContainer *)aPithosContainer
                       pithosObject:(ASIPithosObject *)aPithosObject {
     if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) {
-        pithos = aPithos;
         refreshParent = NO;
         self.pithosContainer = aPithosContainer;
         self.pithosObject = aPithosObject;
@@ -92,7 +90,7 @@ static NSImage *sharedIcon = nil;
         if (displayname) {
             self.translatedModifiedBy = displayname;
         } else {
-            [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:[NSArray arrayWithObject:pithosObject.modifiedBy]];
+            [pithosAccountManager updateUserCatalogForDisplaynames:nil UUIDs:[NSArray arrayWithObject:pithosObject.modifiedBy]];
             self.translatedModifiedBy = [pithosAccountManager displaynameForUUID:pithosObject.modifiedBy safe:YES];
         }
     } else {
@@ -111,7 +109,7 @@ static NSImage *sharedIcon = nil;
         [UUIDs removeObject:@""];
         [UUIDs removeObject:@"*"];
         if (UUIDs.count) {
-            [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:[UUIDs allObjects]];
+            [pithosAccountManager updateUserCatalogForDisplaynames:nil UUIDs:[UUIDs allObjects]];
         }
         
         NSMutableArray *newTranslatedPermissions = [NSMutableArray arrayWithCapacity:pithosObject.permissions.count];
@@ -129,21 +127,13 @@ static NSImage *sharedIcon = nil;
 #pragma mark -
 #pragma mark Properties
 
-- (void)setPithos:(ASIPithos *)aPithos {
-    if (aPithos && ![aPithos isEqualTo:pithos]) {
-        pithos = aPithos;
-        url = nil;
-    }
-}
 
 - (NSString *)url {
-    if (url == nil)
-        url = [[NSString alloc] initWithFormat:@"subdir %@/%@/%@%@", 
-               (sharingAccount ? [pithos storageURLWithAuthUser:sharingAccount] : pithos.storageURL), 
-               pithosContainer.name, 
-               prefix, 
-               (shared ? @"?shared" : @"")];
-    return url;
+    return [NSString stringWithFormat:@"@subdir@%@/%@/%@%@",
+            (sharingAccount ? sharingAccount : pithosAccountManager.pithos.authUser),
+            pithosContainer.name,
+            prefix,
+            (shared ? @"?shared" : @"")];
 }
 
 - (NSString *)displayName {
@@ -251,7 +241,8 @@ static NSImage *sharedIcon = nil;
     @autoreleasepool {
         NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
         if (retries > 0) {
-            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities copyRequest:request];
+            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
+                                                                                               andPithosAccountManager:pithosAccountManager];
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             if ([request isEqualTo:applyMetadataObjectRequest]) {
                 @synchronized(self) {
@@ -297,7 +288,7 @@ static NSImage *sharedIcon = nil;
             if (pithosObject.subdir) {
                 BOOL createObject = NO;
                 NSAlert *alert;
-                ASIPithosObjectRequest *request = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos 
+                ASIPithosObjectRequest *request = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithosAccountManager.pithos 
                                                                                             containerName:pithosContainer.name 
                                                                                                objectName:prefix];
                 [PithosUtilities startAndWaitForRequest:request];
@@ -312,7 +303,7 @@ static NSImage *sharedIcon = nil;
                     [alert addButtonWithTitle:@"Cancel"];
                     NSInteger choice = [alert runModal];
                     if (choice == NSAlertFirstButtonReturn) {
-                        request = [ASIPithosObjectRequest deleteObjectRequestWithPithos:pithos 
+                        request = [ASIPithosObjectRequest deleteObjectRequestWithPithos:pithosAccountManager.pithos 
                                                                           containerName:pithosContainer.name 
                                                                              objectName:prefix];
                         [PithosUtilities startAndWaitForRequest:request];
@@ -359,7 +350,7 @@ static NSImage *sharedIcon = nil;
                             [allUsers removeObject:@""];
                             [allUsers removeObject:@"*"];
                             if (allUsers.count) {
-                                ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForForDisplaynames:[allUsers allObjects]
+                                ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForDisplaynames:[allUsers allObjects]
                                                                                                                            UUIDs:nil];
                                 if (userCatalogRequest.error || ((userCatalogRequest.responseStatusCode != 200) && (userCatalogRequest.responseStatusCode != 404))) {
                                     return;
@@ -454,7 +445,7 @@ static NSImage *sharedIcon = nil;
                     }
                     pithosObject.permissions = permissions;
                     
-                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithos
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithosAccountManager.pithos
                                                                                                  containerName:pithosContainer.name
                                                                                                     objectName:prefix
                                                                                                           eTag:nil
@@ -481,7 +472,7 @@ static NSImage *sharedIcon = nil;
             } else {
                 [[pithosNodeInfoController window] makeFirstResponder:nil];
                 if (sharingAccount) {
-                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithosAccountManager.pithos
                                                                                                       containerName:pithosContainer.name
                                                                                                          objectName:pithosObject.name
                                                                                                     contentEncoding:nil
@@ -491,7 +482,7 @@ static NSImage *sharedIcon = nil;
                                                                                                            isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
                                                                                                            metadata:pithosObject.metadata
                                                                                                              update:NO];
-                    [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+                    [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
                 } else {
                     NSMutableArray *permissions = [NSMutableArray array];
                     if (translatedPermissions.count) {
@@ -516,7 +507,7 @@ static NSImage *sharedIcon = nil;
                             [allUsers removeObject:@""];
                             [allUsers removeObject:@"*"];
                             if (allUsers.count) {
-                                ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForForDisplaynames:[allUsers allObjects]
+                                ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForDisplaynames:[allUsers allObjects]
                                                                                                                            UUIDs:nil];
                                 if (userCatalogRequest.error || ((userCatalogRequest.responseStatusCode != 200) && (userCatalogRequest.responseStatusCode != 404))) {
                                     return;
@@ -611,7 +602,7 @@ static NSImage *sharedIcon = nil;
                     }
                     pithosObject.permissions = permissions;
 
-                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
+                    self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithosAccountManager.pithos
                                                                                                       containerName:pithosContainer.name
                                                                                                          objectName:pithosObject.name
                                                                                                     contentEncoding:pithosObject.contentEncoding
@@ -643,11 +634,11 @@ static NSImage *sharedIcon = nil;
             self.pithosObject = [ASIPithosObject subdirWithName:pithosObject.name];
             return;
         } else if (refreshMetadataObjectRequest == nil) {
-            self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos
+            self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithosAccountManager.pithos
                                                                                           containerName:pithosContainer.name
                                                                                              objectName:prefix];
             if (sharingAccount)
-                [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+                [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
             refreshMetadataObjectRequest.delegate = self;
             refreshMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             refreshMetadataObjectRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);
@@ -673,11 +664,11 @@ static NSImage *sharedIcon = nil;
         if (pithosObject.subdir) {
             return;
         } else if (refreshVersionsObjectRequest == nil) {
-            self.refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos
+            self.refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithosAccountManager.pithos
                                                                                           containerName:pithosContainer.name
                                                                                              objectName:pithosObject.name];
             if (sharingAccount)
-                [refreshVersionsObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+                [refreshVersionsObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
             refreshVersionsObjectRequest.delegate = self;
             refreshVersionsObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             refreshVersionsObjectRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);