// 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
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])
#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];
}
#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;
}
- (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;
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;
[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;
[groups setObject:[NSArray arrayWithObject:@""] forKey:@"group"];
}
- self.applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithos
+ self.applyMetadataAccountRequest = [ASIPithosAccountRequest updateAccountMetadataRequestWithPithos:pithosAccountManager.pithos
groups:groups
metadata:pithosAccount.metadata
update:NO];
- (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:);