From fb27f36872b58b7d74ac693639072daeebfd120b Mon Sep 17 00:00:00 2001 From: Miltiadis Vasilakis Date: Sat, 6 Jul 2013 14:49:19 +0300 Subject: [PATCH] Refactor use of pithos objects to accommodate retry of failed service requests In browser and nodes, use the pithos object of the account manager, instead of maintaining a copy. --- pithos-macos/PithosAccount.h | 2 +- pithos-macos/PithosAccount.m | 105 ++++++++++++++++--------- pithos-macos/PithosAccountNode.h | 12 +-- pithos-macos/PithosAccountNode.m | 78 +++++++------------ pithos-macos/PithosBrowserController.h | 11 +-- pithos-macos/PithosBrowserController.m | 117 ++++++++++++++-------------- pithos-macos/PithosContainerNode.h | 17 ++-- pithos-macos/PithosContainerNode.m | 56 +++++-------- pithos-macos/PithosNode.m | 19 +---- pithos-macos/PithosObjectNode.h | 6 +- pithos-macos/PithosObjectNode.m | 39 ++++------ pithos-macos/PithosPreferencesController.h | 2 +- pithos-macos/PithosPreferencesController.m | 9 ++- pithos-macos/PithosSharingAccountsNode.h | 10 +-- pithos-macos/PithosSharingAccountsNode.m | 52 +++++-------- pithos-macos/PithosSubdirNode.h | 3 +- pithos-macos/PithosSubdirNode.m | 42 ++++------ pithos-macos/pithos_macosAppDelegate.m | 11 +-- 18 files changed, 259 insertions(+), 332 deletions(-) diff --git a/pithos-macos/PithosAccount.h b/pithos-macos/PithosAccount.h index 2972271..d24aba9 100644 --- a/pithos-macos/PithosAccount.h +++ b/pithos-macos/PithosAccount.h @@ -2,7 +2,7 @@ // PithosAccount.h // pithos-macos // -// Copyright 2012 GRNET S.A. All rights reserved. +// Copyright 2012-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 diff --git a/pithos-macos/PithosAccount.m b/pithos-macos/PithosAccount.m index 35348f9..7d1b97a 100644 --- a/pithos-macos/PithosAccount.m +++ b/pithos-macos/PithosAccount.m @@ -2,7 +2,7 @@ // PithosAccount.m // pithos-macos // -// Copyright 2012 GRNET S.A. All rights reserved. +// Copyright 2012-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 @@ -59,11 +59,7 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; } - (NSString *)stringByRemovingTrailingSlashes { - NSString *stringWithRemovedTrailingSlashes = [self copy]; - while ([stringWithRemovedTrailingSlashes hasSuffix:@"/"]) { - stringWithRemovedTrailingSlashes = [stringWithRemovedTrailingSlashes substringToIndex:(stringWithRemovedTrailingSlashes.length - 1)]; - } - return stringWithRemovedTrailingSlashes; + return [self stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; } @end @@ -312,7 +308,7 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; - (PithosAccountNode *)accountNode { if (!accountNode) { - accountNode = [[PithosAccountNode alloc] initWithPithosAccountManager:self andPithos:self.pithos]; + accountNode = [[PithosAccountNode alloc] initWithPithosAccountManager:self]; accountNode.childrenUpdatedNotificationName = nil; accountNode.inheritChildrenUpdatedNotificationName = YES; } @@ -321,7 +317,7 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; - (PithosSharingAccountsNode *)sharingAccountsNode { if (!sharingAccountsNode) { - sharingAccountsNode = [[PithosSharingAccountsNode alloc] initWithPithosAccountManager:self andPithos:self.pithos]; + sharingAccountsNode = [[PithosSharingAccountsNode alloc] initWithPithosAccountManager:self]; sharingAccountsNode.childrenUpdatedNotificationName = nil; sharingAccountsNode.inheritChildrenUpdatedNotificationName = YES; } @@ -358,7 +354,13 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; manual:(BOOL)aManual authToken:(NSString *)anAuthToken authUser:(NSString *)anAuthUser - ignoreSSLErrors:(BOOL)anIgnoreSSLErrors { + ignoreSSLErrors:(BOOL)anIgnoreSSLErrors + resetNodes:(BOOL)resetNodes { + BOOL pithosUpdated = (![authURLString isEqualToString:[anAuthURLString stringByRemovingTrailingSlashes]] || + ![pithosObjectStoreURLString isEqualToString:[aPithosObjectStoreURLString stringByRemovingTrailingSlashes]] || + ![astakosAccountURLString isEqualToString:[anAstakosAccountURLString stringByRemovingTrailingSlashes]] || + ![authToken isEqualToString:anAuthToken] || ![authUser isEqualToString:anAuthUser] || + (ignoreSSLErrors != anIgnoreSSLErrors)); self.authURLString = anAuthURLString; self.pithosObjectStoreURLString = aPithosObjectStoreURLString; self.astakosAccountURLString = anAstakosAccountURLString; @@ -375,26 +377,44 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; [self updateUserCatalogForDisplaynames:nil UUIDs:[NSArray arrayWithObject:authUser]]; self.active = YES; - if (syncDaemon) { - self.syncDaemon.pithos = self.pithos; - if (self.syncActive) - [self.syncDaemon startDaemon]; - } - if (accountNode) - self.accountNode.pithos = self.pithos; - if (sharingAccountsNode) - self.sharingAccountsNode.pithos = self.pithos; - if (accountNode) { - if (self.accountNode.children) { + if (pithosUpdated) { + if (syncDaemon) { + // For the sync daemon we keep using a separate pithos object. + self.syncDaemon.pithos = self.pithos; + if (self.syncActive) + [self.syncDaemon startDaemon]; + } + if (resetNodes) { + [accountNode reset]; + [accountNode refreshInfo]; + [sharingAccountsNode reset]; + + [[NSNotificationCenter defaultCenter] postNotificationName:@"PithosAccountPithosChanged" object:self]; } - [self.accountNode refreshInfo]; - } - if (sharingAccountsNode && self.sharingAccountsNode.children) { } } } -- (void)updateSyncWithSyncActive:(BOOL)aSyncActive +- (void)updateWithAuthURLString:(NSString *)anAuthURLString + pithosObjectStoreURLString:(NSString *)aPithosObjectStoreURLString + astakosAccountURLString:(NSString *)anAstakosAccountURLString + astakosWebloginURLString:(NSString *)anAstakosWebloginURLString + manual:(BOOL)aManual + authToken:(NSString *)anAuthToken + authUser:(NSString *)anAuthUser + ignoreSSLErrors:(BOOL)anIgnoreSSLErrors { + [self updateWithAuthURLString:anAuthURLString + pithosObjectStoreURLString:aPithosObjectStoreURLString + astakosAccountURLString:anAstakosAccountURLString + astakosWebloginURLString:anAstakosWebloginURLString + manual:aManual + authToken:anAuthToken + authUser:anAuthUser + ignoreSSLErrors:anIgnoreSSLErrors + resetNodes:YES]; +} + +- (void)updateSyncWithSyncActive:(BOOL)aSyncActive syncDirectoryPath:(NSString *)aSyncDirectoryPath syncAccountsDictionary:(NSMutableDictionary *)aSyncAccountsDictionary syncSkipHidden:(BOOL)aSyncSkipHidden { @@ -443,21 +463,32 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; - (void)updateServicesFromServiceCatalogRequest:(ASIPithosRequest *)serviceCatalogRequest { if (serviceCatalogRequest.responseStatusCode == 200) { NSMutableDictionary *services = [self servicesFromServiceCatalogRequest:serviceCatalogRequest]; - self.pithosObjectStoreURLString = [services objectForKey:@"PithosObjectStoreURLString"]; - self.astakosAccountURLString = [services objectForKey:@"AstakosAccountURLString"]; - self.astakosWebloginURLString = [services objectForKey:@"AstakosWebloginURLString"]; - self.manual = NO; - + NSString *newAuthToken = nil; + NSString *newAuthUser = nil; if (authToken.length) { NSDictionary *token = [serviceCatalogRequest token]; - self.authToken = [token objectForKey:@"id"]; - self.authUser = [[token objectForKey:@"tenant"] objectForKey:@"id"]; + newAuthToken = [token objectForKey:@"id"]; + newAuthUser = [[token objectForKey:@"tenant"] objectForKey:@"id"]; } + [self updateWithAuthURLString:authURLString + pithosObjectStoreURLString:[services objectForKey:@"PithosObjectStoreURLString"] + astakosAccountURLString:[services objectForKey:@"AstakosAccountURLString"] + astakosWebloginURLString:[services objectForKey:@"AstakosWebloginURLString"] + manual:NO + authToken:(newAuthToken ? newAuthToken : authToken) + authUser:(newAuthUser ? newAuthUser : authUser) + ignoreSSLErrors:ignoreSSLErrors + resetNodes:NO]; } else if (serviceCatalogRequest.responseStatusCode == 404) { - self.pithosObjectStoreURLString = [[[NSURL URLWithString:authURLString] URLByAppendingPathComponent:@"v1"] description]; - self.astakosAccountURLString = [self.authURLString copy]; - self.astakosWebloginURLString = [self.authURLString copy]; - self.manual = YES; + [self updateWithAuthURLString:authURLString + pithosObjectStoreURLString:[[[NSURL URLWithString:authURLString] URLByAppendingPathComponent:@"v1"] description] + astakosAccountURLString:[authURLString copy] + astakosWebloginURLString:[authURLString copy] + manual:YES + authToken:authToken + authUser:authUser + ignoreSSLErrors:ignoreSSLErrors + resetNodes:NO]; } } @@ -525,6 +556,8 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; self.astakosWebloginURLString = [decoder decodeObjectForKey:@"astakosWebloginURLString"]; self.manual = [decoder decodeBoolForKey:@"manual"]; + self.ignoreSSLErrors = [decoder decodeBoolForKey:@"ignoreSSLErrors"]; + // Support for older versions. if (!authURLString && !pithosObjectStoreURLString && !astakosAccountURLString && !astakosWebloginURLString) { NSString *tmpURLString = [decoder decodeObjectForKey:@"serverURL"]; @@ -579,6 +612,8 @@ static NSString *defaultManualURLString = @"https://pithos.okeanos.grnet.gr"; [encoder encodeObject:authToken forKey:@"authToken"]; [encoder encodeObject:authUser forKey:@"authUser"]; [encoder encodeObject:userCatalog forKey:@"userCatalog"]; + + [encoder encodeBool:ignoreSSLErrors forKey:@"ignoreSSLErrors"]; } @end diff --git a/pithos-macos/PithosAccountNode.h b/pithos-macos/PithosAccountNode.h index 5fdd816..a6c9ba8 100644 --- a/pithos-macos/PithosAccountNode.h +++ b/pithos-macos/PithosAccountNode.h @@ -2,7 +2,7 @@ // PithosAccountNode.h // 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 @@ -36,34 +36,28 @@ // or implied, of GRNET S.A. #import "PithosNode.h" -@class ASIPithos; @class ASIPithosAccountRequest; @class ASIPithosAccount; @interface PithosAccountNode : PithosNode { - ASIPithos *pithos; ASIPithosAccount *pithosAccount; ASIPithosAccountRequest *accountRequest; ASIPithosAccountRequest *applyMetadataAccountRequest; ASIPithosAccountRequest *refreshMetadataAccountRequest; - - BOOL reset; - + NSMutableDictionary *translatedGroups; } -@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)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager andPithos:(ASIPithos *)aPithos; - - (void)applyInfo; - (void)refreshInfo; +- (void)reset; @end \ No newline at end of file diff --git a/pithos-macos/PithosAccountNode.m b/pithos-macos/PithosAccountNode.m index 69029b5..a9d3a18 100644 --- a/pithos-macos/PithosAccountNode.m +++ b/pithos-macos/PithosAccountNode.m @@ -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:); diff --git a/pithos-macos/PithosBrowserController.h b/pithos-macos/PithosBrowserController.h index 71c97cb..a55b7c7 100644 --- a/pithos-macos/PithosBrowserController.h +++ b/pithos-macos/PithosBrowserController.h @@ -2,7 +2,7 @@ // PithosBrowserController.h // 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 @@ -37,7 +37,6 @@ #import #import "PithosActivityFacility.h" -@class ASIPithos; @class PithosAccount; @class PithosNode; @class PithosAccountNode; @@ -50,9 +49,7 @@ BOOL browserInitialized; BOOL browserActive; - ASIPithos *pithos; - - PithosAccount *__unsafe_unretained pithosAccountManager; + PithosAccount *pithosAccountManager; PithosNode *rootNode; PithosAccountNode *accountNode; PithosEmptyNode *containersNode; @@ -106,9 +103,7 @@ NSOperationQueue *downloadCallbackQueue; } -@property (nonatomic, strong) ASIPithos *pithos; - -@property (nonatomic, unsafe_unretained) PithosAccount *pithosAccountManager; +@property (nonatomic, strong) PithosAccount *pithosAccountManager; @property (nonatomic, strong) PithosAccountNode *accountNode; @property (nonatomic, strong) NSArray *draggedNodes; diff --git a/pithos-macos/PithosBrowserController.m b/pithos-macos/PithosBrowserController.m index d5c4612..a2e8798 100644 --- a/pithos-macos/PithosBrowserController.m +++ b/pithos-macos/PithosBrowserController.m @@ -2,7 +2,7 @@ // PithosBrowserController.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 @@ -54,6 +54,7 @@ #import "ASIPithosContainer.h" #import "ASIPithosObject.h" #import "PithosUtilities.h" +#import "PithosAccount.h" #import "UsingSizeTransformer.h" #define REFRESH_TIMER_INTERVAL 5 @@ -108,7 +109,6 @@ @end @implementation PithosBrowserController -@synthesize pithos; @synthesize pithosAccountManager, accountNode; @synthesize draggedNodes, draggedParentNode; @synthesize clipboardNodes, clipboardParentNode, clipboardCopy; @@ -209,15 +209,15 @@ [activityProgressIndicator setMaxValue:1.0]; activityFacility = [PithosActivityFacility defaultPithosActivityFacility]; - self.accountNode = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager andPithos:pithos]; + self.accountNode = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager]; containersNode = [[PithosEmptyNode alloc] initWithDisplayName:@"CONTAINERS" icon:nil]; containersNodeChildren = [[NSMutableArray alloc] init]; sharedNode = [[PithosEmptyNode alloc] initWithDisplayName:@"SHARED" icon:nil]; - mySharedNode = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager andPithos:pithos]; + mySharedNode = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager]; mySharedNode.displayName = @"shared by me"; mySharedNode.shared = YES; mySharedNode.icon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kUserIcon)]; - othersSharedNode = [[PithosSharingAccountsNode alloc] initWithPithosAccountManager:pithosAccountManager andPithos:pithos]; + othersSharedNode = [[PithosSharingAccountsNode alloc] initWithPithosAccountManager:pithosAccountManager]; othersSharedNode.displayName = @"shared with me"; othersSharedNode.icon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGroupIcon)]; @@ -337,16 +337,13 @@ [uploadCallbackQueue setSuspended:NO]; [downloadCallbackQueue setSuspended:NO]; - accountNode.pithos = pithos; accountNode.pithosAccountManager = pithosAccountManager; - [accountNode forceRefresh]; - mySharedNode.pithos = pithos; + [accountNode reset]; mySharedNode.pithosAccountManager = pithosAccountManager; - [mySharedNode forceRefresh]; - othersSharedNode.pithos = pithos; + [mySharedNode reset]; othersSharedNode.pithosAccountManager = pithosAccountManager; - [othersSharedNode forceRefresh]; - + [othersSharedNode reset]; + // [activityFacility reset]; activityFacility.delegate = self; @@ -383,33 +380,39 @@ [self resetBrowser]; } -- (void)setPithos:(ASIPithos *)aPithos { - if (aPithos) { - if (![aPithos.authUser isEqualToString:pithos.authUser] || - ![aPithos.authToken isEqualToString:pithos.authToken] || - (aPithos.ignoreSSLErrors != pithos.ignoreSSLErrors) || - ![aPithos.storageURLPrefix isEqual:pithos.storageURLPrefix] || - ![aPithos.publicURLPrefix isEqual:pithos.publicURLPrefix]) { - [self resetBrowser]; - pithos = aPithos; - [self startBrowser]; - } else { - [self startBrowser]; - } +- (void)setPithosAccountManager:(PithosAccount *)aPithosAccountManager { + if (aPithosAccountManager && (aPithosAccountManager != pithosAccountManager)) { + [self resetBrowser]; + if (pithosAccountManager) + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"PithosAccountPithosChanged" object:pithosAccountManager]; + pithosAccountManager = aPithosAccountManager; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(pithosAccountManagerPithosChanged:) + name:@"PithosAccountPithosChanged" + object:pithosAccountManager]; + [self startBrowser]; } } - #pragma mark - #pragma mark Observers +-(void)pithosAccountManagerPithosChanged:(NSNotification *)notification { + if (![NSThread isMainThread]) { + [self performSelectorOnMainThread:@selector(pithosAccountManagerPithosChanged:) withObject:notification waitUntilDone:NO]; + return; + } + [self resetBrowser]; + [self startBrowser]; +} + - (void)pithosNodeChildrenUpdated:(NSNotification *)notification { if (![NSThread isMainThread]) { [self performSelectorOnMainThread:@selector(pithosNodeChildrenUpdated:) withObject:notification waitUntilDone:NO]; return; } PithosNode *node = (PithosNode *)[notification object]; - if ((node == accountNode) || ![node.pithos isEqualTo:pithos]) + if ((node == accountNode) || (node.pithosAccountManager != pithosAccountManager)) return; DLog(@"pithosNodeChildrenUpdated:%@", node.url); NSInteger lastColumn = [browser lastColumn]; @@ -453,7 +456,7 @@ BOOL refreshAccountNode = NO; if (!containerPithosFound) { // Create pithos node - ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest createOrUpdateContainerRequestWithPithos:pithos + ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest createOrUpdateContainerRequestWithPithos:pithosAccountManager.pithos containerName:@"pithos"]; [PithosUtilities startAndWaitForRequest:containerRequest]; if ([containerRequest error]) { @@ -464,7 +467,7 @@ } if (!containerTrashFound) { // Create trash node - ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest createOrUpdateContainerRequestWithPithos:pithos + ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest createOrUpdateContainerRequestWithPithos:pithosAccountManager.pithos containerName:@"trash"]; [PithosUtilities startAndWaitForRequest:containerRequest]; if ([containerRequest error]) { @@ -615,7 +618,7 @@ destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; NSError *error = nil; BOOL isDirectory; - if ([PithosUtilities objectExistsAtPithos:pithos + if ([PithosUtilities objectExistsAtPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:destinationObjectName error:&error @@ -634,7 +637,7 @@ } if (operation.isCancelled) return; - ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:node.pithosContainer.name @@ -683,7 +686,7 @@ NSString *destinationObjectName = [[node.pithosObject.name stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName]; NSError *error = nil; BOOL isDirectory; - if ([PithosUtilities objectExistsAtPithos:pithos + if ([PithosUtilities objectExistsAtPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:destinationObjectName error:&error @@ -704,7 +707,7 @@ return; if (node.pithosObject.subdir) destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; - NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:node.pithosContainer.name @@ -952,7 +955,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSArray *objectRequests = [PithosUtilities objectDataRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities objectDataRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name toDirectory:dirPath @@ -1008,7 +1011,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - __block ASIPithosObjectRequest *objectRequest = [PithosUtilities objectDataRequestWithPithos:pithos + __block ASIPithosObjectRequest *objectRequest = [PithosUtilities objectDataRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name version:version @@ -1066,7 +1069,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { else objectNamePrefix = [NSString string]; if ((destinationNode.pithosContainer.blockHash == nil) || (destinationNode.pithosContainer.blockSize == 0)) { - ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos + ASIPithosContainerRequest *containerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithosAccountManager.pithos containerName:containerName]; [PithosUtilities startAndWaitForRequest:containerRequest]; if ([containerRequest error]) { @@ -1105,7 +1108,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { NSArray *hashes = nil; if (operation.isCancelled) return; - ASIPithosObjectRequest *objectRequest = [PithosUtilities writeObjectDataRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [PithosUtilities writeObjectDataRequestWithPithos:pithosAccountManager.pithos containerName:containerName objectName:objectName contentType:contentType @@ -1176,7 +1179,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { NSMutableArray *filePaths = nil; NSMutableArray *hashesArrays = nil; NSMutableArray *directoryObjectRequests = nil; - NSArray *objectRequests = [PithosUtilities writeObjectDataRequestsWithPithos:pithos + NSArray *objectRequests = [PithosUtilities writeObjectDataRequestsWithPithos:pithosAccountManager.pithos containerName:containerName objectName:objectName blockSize:blockSize @@ -1295,7 +1298,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { NSString *destinationObjectName = [objectNamePrefix stringByAppendingPathComponent:node.displayName]; if ([node.pithosObject.name hasSuffix:@"/"]) destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; - ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:containerName @@ -1341,7 +1344,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { NSString *destinationObjectName = [objectNamePrefix stringByAppendingPathComponent:node.displayName]; if (node.pithosObject.subdir) destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; - NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:containerName @@ -1416,13 +1419,13 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { if ([node.pithosObject.name hasSuffix:@"/"]) destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; } else { - destinationObjectName = [PithosUtilities safeObjectNameForPithos:pithos + destinationObjectName = [PithosUtilities safeObjectNameForPithos:pithosAccountManager.pithos containerName:containerName objectName:node.pithosObject.name]; } if (operation.isCancelled) return; - ASIPithosObjectRequest *objectRequest = [PithosUtilities cpyObjectRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [PithosUtilities cpyObjectRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:containerName @@ -1472,13 +1475,13 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { if (node.pithosObject.subdir) destinationObjectName = [destinationObjectName stringByAppendingString:@"/"]; } else { - destinationObjectName = [PithosUtilities safeSubdirNameForPithos:pithos + destinationObjectName = [PithosUtilities safeSubdirNameForPithos:pithosAccountManager.pithos containerName:containerName subdirName:node.pithosObject.name]; } if (operation.isCancelled) return; - NSArray *objectRequests = [PithosUtilities cpyObjectRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities cpyObjectRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:containerName @@ -1782,7 +1785,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { currentBytes:currentBytes]; }); NSUInteger missingBlockIndex = [missingBlocks firstIndex]; - __block ASIPithosContainerRequest *newContainerRequest = [PithosUtilities updateContainerDataRequestWithPithos:pithos + __block ASIPithosContainerRequest *newContainerRequest = [PithosUtilities updateContainerDataRequestWithPithos:pithosAccountManager.pithos containerName:[objectRequest.userInfo objectForKey:@"containerName"] blockSize:blockSize forFile:[objectRequest.userInfo objectForKey:@"filePath"] @@ -1826,7 +1829,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { missingBlockIndex = [missingBlocks indexGreaterThanIndex:missingBlockIndex]; if (missingBlockIndex == NSNotFound) { NSArray *hashes = [containerRequest.userInfo objectForKey:@"hashes"]; - ASIPithosObjectRequest *newObjectRequest = [PithosUtilities writeObjectDataRequestWithPithos:pithos + ASIPithosObjectRequest *newObjectRequest = [PithosUtilities writeObjectDataRequestWithPithos:pithosAccountManager.pithos containerName:[containerRequest.userInfo objectForKey:@"containerName"] objectName:[containerRequest.userInfo objectForKey:@"objectName"] contentType:[containerRequest.userInfo objectForKey:@"contentType"] @@ -1846,7 +1849,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { [(NSMutableDictionary *)(newObjectRequest.userInfo) setObject:NSStringFromSelector(@selector(uploadObjectUsingHashMapFinished:)) forKey:@"didFinishSelector"]; [uploadNetworkQueue addOperation:[PithosUtilities prepareRequest:newObjectRequest priority:[[newObjectRequest.userInfo objectForKey:@"priority"] integerValue]]]; } else { - __block ASIPithosContainerRequest *newContainerRequest = [PithosUtilities updateContainerDataRequestWithPithos:pithos + __block ASIPithosContainerRequest *newContainerRequest = [PithosUtilities updateContainerDataRequestWithPithos:pithosAccountManager.pithos containerName:[containerRequest.userInfo objectForKey:@"containerName"] blockSize:[[containerRequest.userInfo objectForKey:@"blockSize"] unsignedIntegerValue] forFile:[containerRequest.userInfo objectForKey:@"filePath"] @@ -2355,13 +2358,13 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithos + NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name subdirName:@"untitled folder"]; NSString *fileName = [safeObjectName lastPathComponent]; if (operation.isCancelled) return; - ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:safeObjectName eTag:nil @@ -2405,13 +2408,13 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithos + NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name subdirName:[node.pithosObject.name stringByAppendingPathComponent:@"untitled folder"]]; NSString *fileName = [safeObjectName lastPathComponent]; if (operation.isCancelled) return; - ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest writeObjectDataRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:safeObjectName eTag:nil @@ -2501,7 +2504,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { NSString *fileName = [node.pithosObject.name lastPathComponent]; if ([node.pithosObject.name hasSuffix:@"/"]) fileName = [fileName stringByAppendingString:@"/"]; - ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest deleteObjectRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [ASIPithosObjectRequest deleteObjectRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name]; if (operation.isCancelled) @@ -2537,7 +2540,7 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSArray *objectRequests = [PithosUtilities deleteObjectRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities deleteObjectRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name]; if (!operation.isCancelled && objectRequests) { @@ -2589,11 +2592,11 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSString *safeObjectName = [PithosUtilities safeObjectNameForPithos:pithos + NSString *safeObjectName = [PithosUtilities safeObjectNameForPithos:pithosAccountManager.pithos containerName:@"trash" objectName:node.pithosObject.name]; if (!operation.isCancelled && safeObjectName) { - ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithos + ASIPithosObjectRequest *objectRequest = [PithosUtilities moveObjectRequestWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:@"trash" @@ -2637,11 +2640,11 @@ forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column { @autoreleasepool { if (operation.isCancelled) return; - NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithos + NSString *safeObjectName = [PithosUtilities safeSubdirNameForPithos:pithosAccountManager.pithos containerName:@"trash" subdirName:node.pithosObject.name]; if (!operation.isCancelled && safeObjectName) { - NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithos + NSArray *objectRequests = [PithosUtilities moveObjectRequestsForSubdirWithPithos:pithosAccountManager.pithos containerName:node.pithosContainer.name objectName:node.pithosObject.name destinationContainerName:@"trash" diff --git a/pithos-macos/PithosContainerNode.h b/pithos-macos/PithosContainerNode.h index 9028528..ed8028f 100644 --- a/pithos-macos/PithosContainerNode.h +++ b/pithos-macos/PithosContainerNode.h @@ -2,7 +2,7 @@ // PithosContainerNode.h // 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 @@ -36,12 +36,10 @@ // or implied, of GRNET S.A. #import "PithosNode.h" -@class ASIPithos; @class ASIPithosContainer; @class ASIPithosContainerRequest; @interface PithosContainerNode : PithosNode { - ASIPithos *pithos; ASIPithosContainer *pithosContainer; ASIPithosContainerRequest *containerRequest; @@ -54,16 +52,11 @@ NSNumber *policyQuota; } -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer; -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer icon:(NSImage *)anIcon; -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos containerName:(NSString *)aContainerName; -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos containerName:(NSString *)aContainerName icon:(NSImage *)anIcon; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager pithosContainer:(ASIPithosContainer *)aPithosContainer; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager pithosContainer:(ASIPithosContainer *)aPithosContainer icon:(NSImage *)anIcon; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager containerName:(NSString *)aContainerName; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager containerName:(NSString *)aContainerName icon:(NSImage *)anIcon; -@property(nonatomic, strong) ASIPithos *pithos; @property(nonatomic, strong) ASIPithosContainer *pithosContainer; @property(nonatomic, strong) ASIPithosContainerRequest *containerRequest; @property(nonatomic, strong) NSString *prefix; diff --git a/pithos-macos/PithosContainerNode.m b/pithos-macos/PithosContainerNode.m index a96a7cd..0ed3a48 100644 --- a/pithos-macos/PithosContainerNode.m +++ b/pithos-macos/PithosContainerNode.m @@ -2,7 +2,7 @@ // PithosContainerNode.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 @@ -44,13 +44,14 @@ #import "ASIPithosObject.h" #import "ASIDownloadCache.h" #import "PithosUtilities.h" +#import "PithosAccount.h" #import "PithosContainerNodeInfoController.h" #import "PithosActivityFacility.h" static NSImage *sharedIcon = nil; @implementation PithosContainerNode -@synthesize pithos, pithosContainer, containerRequest, prefix, applyMetadataContainerRequest, refreshMetadataContainerRequest; +@synthesize pithosContainer, containerRequest, prefix, applyMetadataContainerRequest, refreshMetadataContainerRequest; @synthesize policyVersioning, policyQuota; + (void)initialize { @@ -61,31 +62,26 @@ static NSImage *sharedIcon = nil; #pragma mark - #pragma mark Object Lifecycle -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer icon:(NSImage *)anIcon { +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager pithosContainer:(ASIPithosContainer *)aPithosContainer icon:(NSImage *)anIcon { if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) { - pithos = aPithos; self.pithosContainer = aPithosContainer; self.icon = anIcon; } return self; } -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer { - return [self initWithPithosAccountManager:aPithosAccountManager andPithos:aPithos pithosContainer:aPithosContainer icon:nil]; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager pithosContainer:(ASIPithosContainer *)aPithosContainer { + return [self initWithPithosAccountManager:aPithosAccountManager pithosContainer:aPithosContainer icon:nil]; } -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos containerName:(NSString *)aContainerName icon:(NSImage *)anIcon { +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager containerName:(NSString *)aContainerName icon:(NSImage *)anIcon { ASIPithosContainer *container = [ASIPithosContainer container]; container.name = aContainerName; - return [self initWithPithosAccountManager:aPithosAccountManager andPithos:aPithos pithosContainer:container icon:anIcon]; + return [self initWithPithosAccountManager:aPithosAccountManager pithosContainer:container icon:anIcon]; } -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos containerName:(NSString *)aContainerName { - return [self initWithPithosAccountManager:aPithosAccountManager andPithos:aPithos containerName:aContainerName icon:nil]; +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager containerName:(NSString *)aContainerName { + return [self initWithPithosAccountManager:aPithosAccountManager containerName:aContainerName icon:nil]; } - (void)dealloc { @@ -97,20 +93,11 @@ 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:@"%@/%@%@", - (sharingAccount ? [pithos storageURLWithAuthUser:sharingAccount] : pithos.storageURL), - pithosContainer.name, - (shared ? @"?shared" : @"")]; - return url; + return [NSString stringWithFormat:@"@container@%@/%@%@", + (sharingAccount ? sharingAccount : pithosAccountManager.pithos.authUser), + pithosContainer.name, + (shared ? @"?shared" : @"")]; } - (NSArray *)children { @@ -120,7 +107,7 @@ static NSImage *sharedIcon = nil; break; case PithosNodeStateRefreshNeeded: freshness = PithosNodeStateRefreshing; - self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos + self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name limit:0 marker:nil @@ -131,7 +118,7 @@ static NSImage *sharedIcon = nil; shared:shared until:nil]; if (sharingAccount) - [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos]; + [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos]; else if (!forcedRefresh) containerRequest.downloadCache = [ASIDownloadCache sharedCache]; containerRequest.delegate = self; @@ -273,7 +260,6 @@ static NSImage *sharedIcon = nil; if ((sameNameObjectIndex == NSNotFound) || ![PithosUtilities isContentTypeDirectory:[[objects objectAtIndex:sameNameObjectIndex] contentType]]) { PithosSubdirNode *node = [[PithosSubdirNode alloc] initWithPithosAccountManager:pithosAccountManager - andPithos:pithos pithosContainer:pithosContainer pithosObject:object]; node.parent = self; @@ -297,7 +283,6 @@ static NSImage *sharedIcon = nil; } } else if ([PithosUtilities isContentTypeDirectory:object.contentType]) { PithosSubdirNode *node = [[PithosSubdirNode alloc] initWithPithosAccountManager:pithosAccountManager - andPithos:pithos pithosContainer:pithosContainer pithosObject:object]; node.parent = self; @@ -318,7 +303,6 @@ static NSImage *sharedIcon = nil; [newChildren addObject:node]; } else { PithosObjectNode *node = [[PithosObjectNode alloc] initWithPithosAccountManager:pithosAccountManager - andPithos:pithos pithosContainer:pithosContainer pithosObject:object]; node.parent = self; @@ -356,7 +340,7 @@ static NSImage *sharedIcon = nil; [self postChildrenUpdatedNotificationName]; } else { // Do an additional request to fetch more objects - self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithos + self.containerRequest = [ASIPithosContainerRequest listObjectsRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name limit:0 marker:[[someObjects lastObject] name] @@ -367,7 +351,7 @@ static NSImage *sharedIcon = nil; shared:shared until:nil]; if (sharingAccount) - [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos]; + [containerRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos]; else if (!forcedRefresh) containerRequest.downloadCache = [ASIDownloadCache sharedCache]; containerRequest.delegate = self; @@ -455,7 +439,7 @@ static NSImage *sharedIcon = nil; @synchronized(self) { if (applyMetadataContainerRequest == nil) { [[pithosNodeInfoController window] makeFirstResponder:nil]; - self.applyMetadataContainerRequest = [ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithos + self.applyMetadataContainerRequest = [ASIPithosContainerRequest updateContainerMetadataRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name policy:[NSDictionary dictionaryWithObjectsAndKeys: policyVersioning, @"versioning", @@ -480,7 +464,7 @@ static NSImage *sharedIcon = nil; - (void)refreshInfo { @synchronized(self) { if (refreshMetadataContainerRequest == nil) { - self.refreshMetadataContainerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithos + self.refreshMetadataContainerRequest = [ASIPithosContainerRequest containerMetadataRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name]; refreshMetadataContainerRequest.delegate = self; refreshMetadataContainerRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:); diff --git a/pithos-macos/PithosNode.m b/pithos-macos/PithosNode.m index c77db38..9b01f67 100644 --- a/pithos-macos/PithosNode.m +++ b/pithos-macos/PithosNode.m @@ -2,7 +2,7 @@ // PithosNode.m // pithos-macos // -// Copyright 2011 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 @@ -73,23 +73,6 @@ } #pragma mark - -#pragma mark Properties - -- (void)setShared:(BOOL)aShared { - if (shared != aShared) { - shared = aShared; - url = nil; - } -} - -- (void)setSharingAccount:(NSString *)aSharingAccount { - if (![sharingAccount isEqualToString:aSharingAccount]) { - sharingAccount = aSharingAccount; - url = nil; - } -} - -#pragma mark - #pragma mark Actions - (void)invalidateChildren { diff --git a/pithos-macos/PithosObjectNode.h b/pithos-macos/PithosObjectNode.h index a7b0230..ca422a9 100644 --- a/pithos-macos/PithosObjectNode.h +++ b/pithos-macos/PithosObjectNode.h @@ -2,7 +2,7 @@ // PithosObjectNode.h // 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 @@ -36,13 +36,11 @@ // or implied, of GRNET S.A. #import "PithosNode.h" -@class ASIPithos; @class ASIPithosContainer; @class ASIPithosObject; @class ASIPithosObjectRequest; @interface PithosObjectNode : PithosNode { - ASIPithos *pithos; ASIPithosContainer *pithosContainer; ASIPithosObject *pithosObject; NSArray *versions; @@ -57,11 +55,9 @@ } - (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer pithosObject:(ASIPithosObject *)aPithosObject; -@property (nonatomic, strong) ASIPithos *pithos; @property (nonatomic, strong) ASIPithosContainer *pithosContainer; @property (nonatomic, strong) ASIPithosObject *pithosObject; @property (nonatomic, strong) NSArray *versions; diff --git a/pithos-macos/PithosObjectNode.m b/pithos-macos/PithosObjectNode.m index 973a414..a49c6bb 100644 --- a/pithos-macos/PithosObjectNode.m +++ b/pithos-macos/PithosObjectNode.m @@ -2,7 +2,7 @@ // PithosObjectNode.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 @@ -48,18 +48,16 @@ #import "PithosObjectNodeInfoController.h" @implementation PithosObjectNode -@synthesize pithos, pithosContainer, pithosObject, versions, applyMetadataObjectRequest, refreshMetadataObjectRequest, refreshVersionsObjectRequest; +@synthesize pithosContainer, pithosObject, versions, applyMetadataObjectRequest, refreshMetadataObjectRequest, refreshVersionsObjectRequest; @synthesize isPublic, translatedModifiedBy, translatedPermissions; #pragma mark - #pragma mark Object Lifecycle - (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer pithosObject:(ASIPithosObject *)aPithosObject { if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) { - pithos = aPithos; isLeafItem = YES; self.pithosContainer = aPithosContainer; self.pithosObject = aPithosObject; @@ -121,21 +119,12 @@ #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:@"object %@/%@/%@%@", - (sharingAccount ? [pithos storageURLWithAuthUser:sharingAccount] : pithos.storageURL), - pithosContainer.name, - pithosObject.name, - (shared ? @"?shared" : @"")]; - return url; + return [NSString stringWithFormat:@"@object@%@/%@/%@%@", + (sharingAccount ? sharingAccount : pithosAccountManager.pithos.authUser), + pithosContainer.name, + pithosObject.name, + (shared ? @"?shared" : @"")]; } - (NSArray *)children { @@ -280,7 +269,7 @@ if (applyMetadataObjectRequest == nil) { [[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 @@ -290,7 +279,7 @@ 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) { @@ -410,7 +399,7 @@ } pithosObject.permissions = permissions; - self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos + self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name objectName:pithosObject.name contentEncoding:pithosObject.contentEncoding @@ -438,11 +427,11 @@ - (void)refreshInfo { @synchronized(self) { if (refreshMetadataObjectRequest == nil) { - self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos + self.refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithosAccountManager.pithos containerName:pithosContainer.name objectName:pithosObject.name]; if (sharingAccount) - [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos]; + [refreshMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos]; refreshMetadataObjectRequest.delegate = self; refreshMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:); refreshMetadataObjectRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:); @@ -466,11 +455,11 @@ - (void)refreshVersions { @synchronized(self) { 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:); diff --git a/pithos-macos/PithosPreferencesController.h b/pithos-macos/PithosPreferencesController.h index 78ac807..262e418 100644 --- a/pithos-macos/PithosPreferencesController.h +++ b/pithos-macos/PithosPreferencesController.h @@ -2,7 +2,7 @@ // PithosPreferencesController.h // 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 diff --git a/pithos-macos/PithosPreferencesController.m b/pithos-macos/PithosPreferencesController.m index 4ddbed2..0861c95 100644 --- a/pithos-macos/PithosPreferencesController.m +++ b/pithos-macos/PithosPreferencesController.m @@ -2,7 +2,7 @@ // PithosPreferencesController.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 @@ -332,6 +332,7 @@ return; } else { [tmpPithosAccount updateServicesFromServiceCatalogRequest:serviceCatalogRequest]; + self.authURLString = tmpPithosAccount.authURLString; self.manual = tmpPithosAccount.manual; self.pithosObjectStoreURLString = tmpPithosAccount.pithosObjectStoreURLString; self.astakosAccountURLString = tmpPithosAccount.astakosAccountURLString; @@ -366,6 +367,7 @@ return; } else { [tmpPithosAccount updateServicesFromServiceCatalogRequest:serviceCatalogRequest]; + self.authURLString = tmpPithosAccount.authURLString; self.manual = tmpPithosAccount.manual; self.pithosObjectStoreURLString = tmpPithosAccount.pithosObjectStoreURLString; self.astakosAccountURLString = tmpPithosAccount.astakosAccountURLString; @@ -407,6 +409,9 @@ authToken:authToken authUser:authUser ignoreSSLErrors:ignoreSSLErrors]; + self.pithosObjectStoreURLString = selectedPithosAccount.pithosObjectStoreURLString; + self.astakosAccountURLString = selectedPithosAccount.astakosAccountURLString; + self.astakosWebloginURLString = selectedPithosAccount.astakosWebloginURLString; self.displayname = [selectedPithosAccount displaynameForUUID:authUser safe:NO]; [self updateAuthorization]; } @@ -418,7 +423,7 @@ [delegate showPithosBrowser:self]; } if ([selectedPithosAccount isEqualTo:delegate.currentPithosAccount]) - delegate.pithosBrowserController.pithos = selectedPithosAccount.pithos; + delegate.pithosBrowserController.pithosAccountManager = selectedPithosAccount; } - (IBAction)authorizationCancel:(id)server { diff --git a/pithos-macos/PithosSharingAccountsNode.h b/pithos-macos/PithosSharingAccountsNode.h index bf3aa97..b74e861 100644 --- a/pithos-macos/PithosSharingAccountsNode.h +++ b/pithos-macos/PithosSharingAccountsNode.h @@ -2,7 +2,7 @@ // PithosSharingAccountsNode.h // 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 @@ -37,19 +37,13 @@ #import "PithosNode.h" @class ASIPithosRequest; -@class ASIPithos; @interface PithosSharingAccountsNode : PithosNode { - ASIPithos *pithos; - ASIPithosRequest *sharingAccountsRequest; - - BOOL reset; } -@property(nonatomic, strong) ASIPithos *pithos; @property(nonatomic, strong) ASIPithosRequest *sharingAccountsRequest; -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager andPithos:(ASIPithos *)aPithos; +- (void)reset; @end \ No newline at end of file diff --git a/pithos-macos/PithosSharingAccountsNode.m b/pithos-macos/PithosSharingAccountsNode.m index d5062e0..68a1f5f 100644 --- a/pithos-macos/PithosSharingAccountsNode.m +++ b/pithos-macos/PithosSharingAccountsNode.m @@ -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 @@ -46,14 +46,13 @@ #import "PithosActivityFacility.h" @implementation PithosSharingAccountsNode -@synthesize pithos, sharingAccountsRequest; +@synthesize sharingAccountsRequest; #pragma mark - #pragma mark Object Lifecycle -- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager andPithos:(ASIPithos *)aPithos { +- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager { if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) { - pithos = aPithos; self.sharingAccount = @""; } return self; @@ -64,42 +63,34 @@ } #pragma mark - -#pragma mark Properties +#pragma mark Actions -- (void)setPithos:(ASIPithos *)aPithos { - if (aPithos && ![aPithos isEqualTo:pithos]) { - pithos = aPithos; - url = nil; - [sharingAccountsRequest clearDelegatesAndCancel]; - self.sharingAccountsRequest = nil; - reset = YES; - } +- (void)reset { + [sharingAccountsRequest clearDelegatesAndCancel]; + self.sharingAccountsRequest = nil; + children = nil; + newChildren = nil; + freshness = PithosNodeStateRefreshNeeded; + forcedRefresh = YES; + [self postChildrenUpdatedNotificationName]; + [self children]; } +#pragma mark - +#pragma mark Properties + - (NSString *)url { - if (url == nil) - url = [[pithos.storageURLPrefix description] copy]; - return url; + return @"@sharing accounts@"; } - (NSArray *)children { @synchronized(self) { - if (reset) { - [sharingAccountsRequest clearDelegatesAndCancel]; - self.sharingAccountsRequest = nil; - children = nil; - newChildren = nil; - freshness = PithosNodeStateRefreshNeeded; - forcedRefresh = YES; - reset = NO; - [self postChildrenUpdatedNotificationName]; - } switch (freshness) { case PithosNodeStateFresh: break; case PithosNodeStateRefreshNeeded: freshness = PithosNodeStateRefreshing; - self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos limit:0 marker:nil]; + self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithosAccountManager.pithos limit:0 marker:nil]; sharingAccountsRequest.delegate = self; sharingAccountsRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:); sharingAccountsRequest.didFailSelector = @selector(performRequestFailedDelegateInBackground:); @@ -186,9 +177,8 @@ newChildren = [[NSMutableArray alloc] init]; NSMutableIndexSet *keptNodes = [NSMutableIndexSet indexSet]; for (ASIPithosAccount *account in sharingAccounts) { - if (![account.name isEqualToString:pithos.authUser]) { - PithosAccountNode *node = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager - andPithos:pithos]; + if (![account.name isEqualToString:pithosAccountManager.pithos.authUser]) { + PithosAccountNode *node = [[PithosAccountNode alloc] initWithPithosAccountManager:pithosAccountManager]; node.parent = self; node.shared = shared; node.sharingAccount = account.name; @@ -226,7 +216,7 @@ [self postChildrenUpdatedNotificationName]; } else { // Do an additional request to fetch more objects - self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithos + self.sharingAccountsRequest = [ASIPithosRequest listSharingAccountsRequestWithPithos:pithosAccountManager.pithos limit:0 marker:[[someSharingAccounts lastObject] name]]; sharingAccountsRequest.delegate = self; diff --git a/pithos-macos/PithosSubdirNode.h b/pithos-macos/PithosSubdirNode.h index 6bb0e37..251c022 100644 --- a/pithos-macos/PithosSubdirNode.h +++ b/pithos-macos/PithosSubdirNode.h @@ -2,7 +2,7 @@ // PithosSubdirNode.h // 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 @@ -55,7 +55,6 @@ } - (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager - andPithos:(ASIPithos *)aPithos pithosContainer:(ASIPithosContainer *)aPithosContainer pithosObject:(ASIPithosObject *)aPithosObject; diff --git a/pithos-macos/PithosSubdirNode.m b/pithos-macos/PithosSubdirNode.m index 378199f..7af6a23 100644 --- a/pithos-macos/PithosSubdirNode.m +++ b/pithos-macos/PithosSubdirNode.m @@ -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; @@ -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 { @@ -297,7 +287,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 +302,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]; @@ -454,7 +444,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 +471,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 +481,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) { @@ -611,7 +601,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 +633,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 +663,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:); diff --git a/pithos-macos/pithos_macosAppDelegate.m b/pithos-macos/pithos_macosAppDelegate.m index 14b5370..1316207 100644 --- a/pithos-macos/pithos_macosAppDelegate.m +++ b/pithos-macos/pithos_macosAppDelegate.m @@ -2,7 +2,7 @@ // pithos_macosAppDelegate.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 @@ -109,12 +109,11 @@ currentPithosAccount, pithosAccounts, pithosAccountsDictionary, syncPithosAccoun } if (!currentPithosAccount) self.currentPithosAccount = [pithosAccounts objectAtIndex:0]; - self.pithosBrowserController.pithosAccountManager = currentPithosAccount; - + if (currentPithosAccount.active) { [self savePithosAccounts:self]; [self showPithosBrowser:self]; - self.pithosBrowserController.pithos = currentPithosAccount.pithos; + self.pithosBrowserController.pithosAccountManager = currentPithosAccount; } else { // XXX maybe call specifically to go to new account tab [self showPithosPreferences:self]; @@ -453,7 +452,6 @@ void LSSharedFileListChanged(LSSharedFileListRef inList, void *context) { if (pithosAccount.active) { self.currentPithosAccount = pithosAccount; self.pithosBrowserController.pithosAccountManager = currentPithosAccount; - self.pithosBrowserController.pithos = currentPithosAccount.pithos; break; } } @@ -561,9 +559,8 @@ void LSSharedFileListChanged(LSSharedFileListRef inList, void *context) { return; } self.currentPithosAccount = pithosAccount; - self.pithosBrowserController.pithosAccountManager = currentPithosAccount; [self showPithosBrowser:self]; - self.pithosBrowserController.pithos = currentPithosAccount.pithos; + self.pithosBrowserController.pithosAccountManager = currentPithosAccount; } } -- 1.7.10.4