// 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
#import "PithosObjectNodeInfoController.h"
@implementation PithosObjectNode
-@synthesize pithos, pithosContainer, pithosObject, versions;
+@synthesize pithosContainer, pithosObject, versions, applyMetadataObjectRequest, refreshMetadataObjectRequest, refreshVersionsObjectRequest;
@synthesize isPublic, translatedModifiedBy, translatedPermissions;
#pragma mark -
#pragma mark Object Lifecycle
-- (id)initWithPithos:(ASIPithos *)aPithos
- pithosContainer:(ASIPithosContainer *)aPithosContainer
- pithosObject:(ASIPithosObject *)aPithosObject {
- if ((self = [super init])) {
- self.pithos = aPithos;
+- (id)initWithPithosAccountManager:(PithosAccount *)aPithosAccountManager
+ pithosContainer:(ASIPithosContainer *)aPithosContainer
+ pithosObject:(ASIPithosObject *)aPithosObject {
+ if ((self = [super initWithPithosAccountManager:aPithosAccountManager])) {
+ isLeafItem = YES;
self.pithosContainer = aPithosContainer;
self.pithosObject = aPithosObject;
- isLeafItem = YES;
}
return self;
}
if (displayname) {
self.translatedModifiedBy = displayname;
} else {
- [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:[NSArray arrayWithObject:pithosObject.modifiedBy]];
+ [pithosAccountManager updateUserCatalogForDisplaynames:nil UUIDs:[NSArray arrayWithObject:pithosObject.modifiedBy]];
self.translatedModifiedBy = [pithosAccountManager displaynameForUUID:pithosObject.modifiedBy safe:YES];
}
} else {
[UUIDs removeObject:@""];
[UUIDs removeObject:@"*"];
if (UUIDs.count) {
- [pithosAccountManager updateUserCatalogForForDisplaynames:nil UUIDs:[UUIDs allObjects]];
+ [pithosAccountManager updateUserCatalogForDisplaynames:nil UUIDs:[UUIDs allObjects]];
}
NSMutableArray *newTranslatedPermissions = [NSMutableArray arrayWithCapacity:pithosObject.permissions.count];
#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 {
self.isPublic = (pithosObject.publicURI != nil);
// Refresh browser if the object is in my shared and is no longer shared
if (shared && !pithosObject.sharing)
- [[NSNotificationCenter defaultCenter] postNotificationName:@"PithosBrowserRefreshNeeeded" object:self];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"PithosBrowserRefreshNeeded" object:self];
}
- (void)setLimitedPithosObject:(ASIPithosObject *)aPithosObject {
if (responseStatusCode != 202)
[PithosUtilities unexpectedResponseStatusAlertWithRequest:applyMetadataObjectRequest];
@synchronized(self) {
- applyMetadataObjectRequest = nil;
+ self.applyMetadataObjectRequest = nil;
}
if (responseStatusCode == 202)
[self refreshInfo];
[[pithosNodeInfoController window] makeFirstResponder:nil];
self.pithosObject = [refreshMetadataObjectRequest object];
@synchronized(self) {
- refreshMetadataObjectRequest = nil;
+ self.refreshMetadataObjectRequest = nil;
}
} else if ([request isEqualTo:refreshVersionsObjectRequest]) {
[[pithosNodeInfoController window] makeFirstResponder:nil];
self.versions = [refreshVersionsObjectRequest versions];
@synchronized(self) {
- refreshVersionsObjectRequest = nil;
+ self.refreshVersionsObjectRequest = nil;
}
}
}
@autoreleasepool {
NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
if (retries > 0) {
- ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities copyRequest:request];
+ ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
+ andPithosAccountManager:pithosAccountManager];
[(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
if ([request isEqualTo:applyMetadataObjectRequest]) {
@synchronized(self) {
- applyMetadataObjectRequest = newRequest;
+ self.applyMetadataObjectRequest = newRequest;
}
} else if ([request isEqualTo:refreshMetadataObjectRequest]) {
@synchronized(self) {
- refreshMetadataObjectRequest = newRequest;
+ self.refreshMetadataObjectRequest = newRequest;
}
} else if ([request isEqualTo:refreshVersionsObjectRequest]) {
@synchronized(self) {
- refreshVersionsObjectRequest = newRequest;
+ self.refreshVersionsObjectRequest = newRequest;
}
}
[[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
if ([request isEqualTo:applyMetadataObjectRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:applyMetadataObjectRequest];
@synchronized(self) {
- applyMetadataObjectRequest = nil;
+ self.applyMetadataObjectRequest = nil;
}
} else if ([request isEqualTo:refreshMetadataObjectRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:refreshMetadataObjectRequest];
@synchronized(self) {
- refreshMetadataObjectRequest = nil;
+ self.refreshMetadataObjectRequest = nil;
}
} else if ([request isEqualTo:refreshVersionsObjectRequest]) {
[PithosUtilities httpRequestErrorAlertWithRequest:refreshVersionsObjectRequest];
@synchronized(self) {
- refreshVersionsObjectRequest = nil;
+ self.refreshVersionsObjectRequest = nil;
}
}
}
if (applyMetadataObjectRequest == nil) {
[[pithosNodeInfoController window] makeFirstResponder:nil];
if (sharingAccount) {
- applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
- containerName:pithosContainer.name
- objectName:pithosObject.name
- contentEncoding:nil
- contentDisposition:nil
- manifest:nil
- sharing:nil
- isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
- metadata:pithosObject.metadata
- update:NO];
- [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithos];
+ self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithosAccountManager.pithos
+ containerName:pithosContainer.name
+ objectName:pithosObject.name
+ contentEncoding:nil
+ contentDisposition:nil
+ manifest:nil
+ sharing:nil
+ isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+ metadata:pithosObject.metadata
+ update:NO];
+ [applyMetadataObjectRequest setRequestUserFromDefaultTo:sharingAccount withPithos:pithosAccountManager.pithos];
} else {
NSMutableArray *permissions = [NSMutableArray array];
if (translatedPermissions.count) {
[allUsers removeObject:@""];
[allUsers removeObject:@"*"];
if (allUsers.count) {
- ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForForDisplaynames:[allUsers allObjects]
+ ASIPithosRequest *userCatalogRequest = [pithosAccountManager updateUserCatalogForDisplaynames:[allUsers allObjects]
UUIDs:nil];
if (userCatalogRequest.error || ((userCatalogRequest.responseStatusCode != 200) && (userCatalogRequest.responseStatusCode != 404))) {
return;
}
pithosObject.permissions = permissions;
- applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithos
- containerName:pithosContainer.name
- objectName:pithosObject.name
- contentEncoding:pithosObject.contentEncoding
- contentDisposition:pithosObject.contentDisposition
- manifest:pithosObject.manifest
- sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
- isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
- metadata:pithosObject.metadata
- update:NO];
+ self.applyMetadataObjectRequest = [ASIPithosObjectRequest updateObjectMetadataRequestWithPithos:pithosAccountManager.pithos
+ containerName:pithosContainer.name
+ objectName:pithosObject.name
+ contentEncoding:pithosObject.contentEncoding
+ contentDisposition:pithosObject.contentDisposition
+ manifest:pithosObject.manifest
+ sharing:(pithosObject.sharing ? pithosObject.sharing : @"")
+ isPublic:(isPublic ? ASIPithosObjectRequestPublicTrue : ASIPithosObjectRequestPublicFalse)
+ metadata:pithosObject.metadata
+ update:NO];
}
applyMetadataObjectRequest.delegate = self;
applyMetadataObjectRequest.didFinishSelector = @selector(performRequestFinishedDelegateInBackground:);
- (void)refreshInfo {
@synchronized(self) {
if (refreshMetadataObjectRequest == nil) {
- refreshMetadataObjectRequest = [ASIPithosObjectRequest objectMetadataRequestWithPithos:pithos
- containerName:pithosContainer.name
- objectName:pithosObject.name];
+ 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:);
- (void)refreshVersions {
@synchronized(self) {
if (refreshVersionsObjectRequest == nil) {
- refreshVersionsObjectRequest = [ASIPithosObjectRequest objectVersionsRequestWithPithos:pithos
- containerName:pithosContainer.name
- objectName:pithosObject.name];
+ 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:);