X-Git-Url: https://code.grnet.gr/git/pithos-macos/blobdiff_plain/ec392f75e4277917363e73acc9cbfa9db7c7f6e8..6d9d5dce6b6df63e7e44314f25ee2a39b953397d:/pithos-macos/PithosObjectNode.m diff --git a/pithos-macos/PithosObjectNode.m b/pithos-macos/PithosObjectNode.m index a0d0d97..ffe8fd1 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,20 +48,19 @@ #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; } @@ -83,7 +82,7 @@ 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 { @@ -102,7 +101,7 @@ [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]; @@ -120,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 { @@ -168,7 +158,7 @@ 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 { @@ -210,7 +200,7 @@ if (responseStatusCode != 202) [PithosUtilities unexpectedResponseStatusAlertWithRequest:applyMetadataObjectRequest]; @synchronized(self) { - applyMetadataObjectRequest = nil; + self.applyMetadataObjectRequest = nil; } if (responseStatusCode == 202) [self refreshInfo]; @@ -218,13 +208,13 @@ [[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; } } } @@ -234,19 +224,20 @@ @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]; @@ -254,17 +245,17 @@ 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; } } } @@ -279,17 +270,17 @@ 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) { @@ -314,7 +305,7 @@ [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; @@ -409,16 +400,16 @@ } 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:); @@ -437,11 +428,11 @@ - (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:); @@ -465,11 +456,11 @@ - (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:);