Refactor use of pithos objects to accommodate
[pithos-macos] / pithos-macos / PithosAccountNode.m
index 69029b5..a9d3a18 100644 (file)
@@ -2,7 +2,7 @@
 //  PithosAccountNode.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
@@ -49,7 +49,7 @@
 static NSImage *sharedIcon = nil;
 
 @implementation PithosAccountNode
-@synthesize pithos, pithosAccount, accountRequest, applyMetadataAccountRequest, refreshMetadataAccountRequest, translatedGroups;
+@synthesize pithosAccount, accountRequest, applyMetadataAccountRequest, refreshMetadataAccountRequest, translatedGroups;
 
 + (void)initialize {
        if (self == [PithosAccountNode class])
@@ -59,13 +59,6 @@ static NSImage *sharedIcon = nil;
 #pragma mark -
 #pragma mark Object Lifecycle
 
-- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager andPithos:(ASIPithos *)aPithos {
-    if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) {
-        pithos = aPithos;
-    }
-    return self;
-}
-
 - (void)dealloc {
     [accountRequest clearDelegatesAndCancel];
     [refreshMetadataAccountRequest clearDelegatesAndCancel];
@@ -104,22 +97,27 @@ static NSImage *sharedIcon = nil;
 }
 
 #pragma mark -
-#pragma mark Properties
+#pragma mark Actions
 
-- (void)setPithos:(ASIPithos *)aPithos {
-    if (aPithos && ![aPithos isEqualTo:pithos]) {
-        pithos = aPithos;
-        url = nil;
-        [accountRequest clearDelegatesAndCancel];
-        self.accountRequest = nil;
-        [refreshMetadataAccountRequest clearDelegatesAndCancel];
-        self.refreshMetadataAccountRequest = nil;
-        [applyMetadataAccountRequest clearDelegatesAndCancel];
-        self.applyMetadataAccountRequest = nil;
-        reset = YES;
-    }
+- (void)reset {
+    [accountRequest clearDelegatesAndCancel];
+    self.accountRequest = nil;
+    [refreshMetadataAccountRequest clearDelegatesAndCancel];
+    self.refreshMetadataAccountRequest = nil;
+    [applyMetadataAccountRequest clearDelegatesAndCancel];
+    self.applyMetadataAccountRequest = nil;
+    children = nil;
+    newChildren = nil;
+    self.pithosAccount = nil;
+    freshness = PithosNodeStateRefreshNeeded;
+    forcedRefresh = YES;
+    [self postChildrenUpdatedNotificationName];
+    [self children];
 }
 
+#pragma mark -
+#pragma mark Properties
+
 - (void)setPithosAccount:(ASIPithosAccount *)aPithosAccount {
     if (![pithosAccount isEqualTo:aPithosAccount]) {
         pithosAccount = aPithosAccount;
@@ -128,42 +126,25 @@ static NSImage *sharedIcon = nil;
 }
 
 - (NSString *)url {
-    if (url == nil)
-        url = [[NSString alloc] initWithFormat:@"%@%@", 
-               (sharingAccount ? [pithos storageURLWithAuthUser:sharingAccount] : pithos.storageURL),
-               (shared ? @"?shared" : @"")];
-    return url;
+    return [NSString stringWithFormat:@"@account@%@%@",
+            (sharingAccount ? sharingAccount : pithosAccountManager.pithos.authUser),
+            (shared ? @"?shared" : @"")];
 }
 
 - (NSArray *)children {
     @synchronized(self) {
-        if (reset) {
-            [accountRequest clearDelegatesAndCancel];
-            self.accountRequest = nil;
-            [refreshMetadataAccountRequest clearDelegatesAndCancel];
-            self.refreshMetadataAccountRequest = nil;
-            [applyMetadataAccountRequest clearDelegatesAndCancel];
-            self.applyMetadataAccountRequest = nil;
-            children = nil;
-            newChildren = nil;
-            self.pithosAccount = nil;
-            freshness = PithosNodeStateRefreshNeeded;
-            forcedRefresh = YES;
-            reset = NO;
-            [self postChildrenUpdatedNotificationName];
-        }
         switch (freshness) {
             case PithosNodeStateFresh:
                 break;
             case PithosNodeStateRefreshNeeded:
                 freshness = PithosNodeStateRefreshing;
-                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithosAccountManager.pithos
                                                                                          limit:0
                                                                                         marker:nil
                                                                                         shared:shared
                                                                                          until:nil];
                 if (sharingAccount)
-                    [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+                    [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
                 else if (!forcedRefresh)
                     accountRequest.downloadCache = [ASIDownloadCache sharedCache];
                 accountRequest.delegate = self;
@@ -265,7 +246,6 @@ static NSImage *sharedIcon = nil;
                     NSMutableIndexSet *keptNodes = [NSMutableIndexSet indexSet];
                     for (ASIPithosContainer *container in containers) {
                         PithosContainerNode *node = [[PithosContainerNode alloc] initWithPithosAccountManager:pithosAccountManager
-                                                                                                    andPithos:pithos
                                                                                               pithosContainer:container];
                         node.parent = self;
                         node.shared = shared;
@@ -299,13 +279,13 @@ static NSImage *sharedIcon = nil;
                 [self postChildrenUpdatedNotificationName];
             } else {
                 // Do an additional request to fetch more objects
-                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithos
+                self.accountRequest = [ASIPithosAccountRequest listContainersRequestWithPithos:pithosAccountManager.pithos
                                                                                          limit:0
                                                                                         marker:[[someContainers lastObject] name]
                                                                                         shared:shared
                                                                                          until:nil];
                 if (sharingAccount)
-                    [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+                    [accountRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
                 else if (!forcedRefresh)
                     accountRequest.downloadCache = [ASIDownloadCache sharedCache];
                 accountRequest.delegate = self;
@@ -485,7 +465,7 @@ static NSImage *sharedIcon = nil;
                 [groups setObject:[NSArray arrayWithObject:@""] forKey:@"group"];
             }
             
-            self.applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
+            self.applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithosAccountManager.pithos
                                                                                                         groups:groups
                                                                                                       metadata:pithosAccount.metadata
                                                                                                         update:NO];
@@ -506,7 +486,7 @@ static NSImage *sharedIcon = nil;
 - (void)refreshInfo {
     @synchronized(self) {
         if (refreshMetadataAccountRequest == nil) {
-            self.refreshMetadataAccountRequest = [ASIPithosAccountRequest accountMetadataRequestWithPithos:pithos];
+            self.refreshMetadataAccountRequest = [ASIPithosAccountRequest accountMetadataRequestWithPithos:pithosAccountManager.pithos];
             refreshMetadataAccountRequest.delegate = self;
             refreshMetadataAccountRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
             refreshMetadataAccountRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:);