Reset state of root nodes when pithos is set. Send verbose messages on all node listi...
authorMiltiadis Vasilakis <mvasilak@gmail.com>
Wed, 11 Apr 2012 21:32:59 +0000 (00:32 +0300)
committerMiltiadis Vasilakis <mvasilak@gmail.com>
Wed, 11 Apr 2012 21:32:59 +0000 (00:32 +0300)
pithos-macos/PithosAccountNode.h
pithos-macos/PithosAccountNode.m
pithos-macos/PithosContainerNode.m
pithos-macos/PithosSharingAccountsNode.h
pithos-macos/PithosSharingAccountsNode.m

index a57c6f9..a2dc1af 100644 (file)
@@ -49,6 +49,8 @@
     
     ASIPithosAccountRequest *applyMetadataAccountRequest;
     ASIPithosAccountRequest *refreshMetadataAccountRequest;
+    
+    BOOL reset;
 }
 
 @property(nonatomic, retain) ASIPithos *pithos;
index fed83ed..34b6e8d 100644 (file)
@@ -60,7 +60,7 @@ static NSImage *sharedIcon = nil;
 
 - (id)initWithPithos:(ASIPithos *)aPithos {
     if ((self = [super init])) {
-        self.pithos = aPithos;
+        pithos = [aPithos retain];
     }
     return self;
 }
@@ -87,6 +87,16 @@ static NSImage *sharedIcon = nil;
         pithos = [aPithos retain];
         [url release];
         url = nil;
+        [accountRequest clearDelegatesAndCancel];
+        [accountRequest release];
+        accountRequest = nil;
+        [refreshMetadataAccountRequest clearDelegatesAndCancel];
+        [refreshMetadataAccountRequest release];
+        refreshMetadataAccountRequest = nil;
+        [applyMetadataAccountRequest clearDelegatesAndCancel];
+        [applyMetadataAccountRequest release];
+        applyMetadataAccountRequest = nil;
+        reset = YES;
     }
 }
 
@@ -100,6 +110,26 @@ static NSImage *sharedIcon = nil;
 
 - (NSArray *)children {
     @synchronized(self) {
+        if (reset) {
+            [accountRequest clearDelegatesAndCancel];
+            [accountRequest release];
+            accountRequest = nil;
+            [refreshMetadataAccountRequest clearDelegatesAndCancel];
+            [refreshMetadataAccountRequest release];
+            refreshMetadataAccountRequest = nil;
+            [applyMetadataAccountRequest clearDelegatesAndCancel];
+            [applyMetadataAccountRequest release];
+            applyMetadataAccountRequest = nil;
+            [children release];
+            children = nil;
+            [newChildren release];
+            newChildren = nil;
+            self.pithosAccount = nil;
+            freshness = PithosNodeStateRefreshNeeded;
+            forcedRefresh = YES;
+            reset = NO;
+            [self postChildrenUpdatedNotificationName];
+        }
         switch (freshness) {
             case PithosNodeStateFresh:
                 break;
@@ -158,6 +188,16 @@ static NSImage *sharedIcon = nil;
 
 - (void)accountRequestFailed:(ASIPithosAccountRequest *)request {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    NSString *message;
+    NSError *error = [accountRequest error];
+    if (error)
+        message = [NSString stringWithFormat:@"Account listing %@ failed: %@", accountRequest.url, [error localizedDescription]];
+    else
+        message = [NSString stringWithFormat:@"Account listing %@ failed: (%d) %@", 
+                   accountRequest.url, accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+    });
     NSUInteger retries = [[accountRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
     if (retries > 0) {
         ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
@@ -166,16 +206,6 @@ static NSImage *sharedIcon = nil;
         accountRequest = newAccountRequest;
         [[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
     } else {
-        NSString *message;
-        NSError *error = [accountRequest error];
-        if (error)
-            message = [NSString stringWithFormat:@"Account listing failed: %@", error];
-        else
-            message = [NSString stringWithFormat:@"Account listing failed: (%d) %@", 
-                       accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
-        });
         [newChildren release];
         newChildren = nil;
         [accountRequest release];
index 19f1f77..0d87dbc 100644 (file)
@@ -222,6 +222,16 @@ static NSImage *sharedIcon = nil;
 
 - (void)containerRequestFailed:(ASIPithosContainerRequest *)request {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    NSString *message;
+    NSError *error = [containerRequest error];
+    if (error)
+        message = [NSString stringWithFormat:@"Container listing %@ failed: %@", containerRequest.url, [error localizedDescription]];
+    else
+        message = [NSString stringWithFormat:@"Container listing %@ failed: (%d) %@", 
+                   containerRequest.url, containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+    });
     NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
     if (retries > 0) {
         ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
@@ -230,16 +240,6 @@ static NSImage *sharedIcon = nil;
         containerRequest = newContainerRequest;
         [[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
     } else {
-        NSString *message;
-        NSError *error = [containerRequest error];
-        if (error)
-            message = [NSString stringWithFormat:@"Container listing failed: %@", error];
-        else
-            message = [NSString stringWithFormat:@"Container listing failed: (%d) %@", 
-                       containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
-        });
         [newChildren release];
         newChildren = nil;
         [containerRequest release];
index 2875fa8..d411498 100644 (file)
@@ -44,6 +44,8 @@
     
     NSMutableArray *sharingAccounts;
     ASIPithosRequest *sharingAccountsRequest;
+    
+    BOOL reset;
 }
 
 @property(nonatomic, retain) ASIPithos *pithos;
index 4be9024..89a4e09 100644 (file)
@@ -52,7 +52,7 @@
 
 - (id)initWithPithos:(ASIPithos *)aPithos {
     if ((self = [super init])) {
-        self.pithos = aPithos;
+        pithos = [aPithos retain];
         self.sharingAccount = @"";
     }
     return self;
         pithos = [aPithos retain];
         [url release];
         url = nil;
+        [sharingAccountsRequest clearDelegatesAndCancel];
+        [sharingAccountsRequest release];
+        sharingAccountsRequest = nil;
+        reset = YES;
     }
 }
 
 
 - (NSArray *)children {
     @synchronized(self) {
+        if (reset) {
+            [sharingAccountsRequest clearDelegatesAndCancel];
+            [sharingAccountsRequest release];
+            sharingAccountsRequest = nil;
+            [children release];
+            children = nil;
+            [newChildren release];
+            newChildren = nil;
+            freshness = PithosNodeStateRefreshNeeded;
+            forcedRefresh = YES;
+            reset = NO;
+            [self postChildrenUpdatedNotificationName];
+        }
         switch (freshness) {
             case PithosNodeStateFresh:
                 break;
 
 - (void)sharingAccountsRequestFailed:(ASIPithosRequest *)request {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    NSString *message;
+    NSError *error = [sharingAccountsRequest error];
+    if (error)
+        message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: %@", 
+                   sharingAccountsRequest.url, [error localizedDescription]];
+    else
+        message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: (%d) %@", 
+                   sharingAccountsRequest.url, sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
+    });
     NSUInteger retries = [[sharingAccountsRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
     if (retries > 0) {
         ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:sharingAccountsRequest];
         sharingAccountsRequest = newSharingAccountsRequest;
         [[PithosUtilities prepareRequest:sharingAccountsRequest priority:[[sharingAccountsRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
     } else {
-        NSString *message;
-        NSError *error = [sharingAccountsRequest error];
-        if (error)
-            message = [NSString stringWithFormat:@"Sharing accounts listing failed: %@", error];
-        else
-            message = [NSString stringWithFormat:@"Sharing accounts listing failed: (%d) %@", 
-                       sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
-        });
         [newChildren release];
         newChildren = nil;
         [sharingAccountsRequest release];