#import "PithosObjectNode.h"
#import "ASIPithosRequest.h"
+#import "ASIPithosObjectRequest.h"
#import "ASIPithosContainer.h"
#import "ASIPithosObject.h"
+#import "ASIDownloadCache.h"
#import "PithosNodeInfoController.h"
@implementation PithosObjectNode
- (id)initWithPithosContainer:(ASIPithosContainer *)aPithosContainer pithosObject:(ASIPithosObject *)aPithosObject {
if ((self = [super init])) {
- pithosContainer = [aPithosContainer retain];
- pithosObject = [aPithosObject retain];
+ self.pithosContainer = aPithosContainer;
+ self.pithosObject = aPithosObject;
isLeafItem = YES;
}
return self;
}
- (void)dealloc {
+ [refreshMetadataObjectRequest clearDelegatesAndCancel];
+ [refreshMetadataObjectRequest release];
+ [applyMetadataObjectRequest clearDelegatesAndCancel];
+ [applyMetadataObjectRequest release];
[pithosObject release];
[pithosContainer release];
[super dealloc];
return icon;
}
+#pragma mark -
+#pragma mark Info
+
+- (void)applyInfo {
+ @synchronized(self) {
+ if (applyMetadataObjectRequest == nil) {
+ applyMetadataObjectRequest = [[ASIPithosObjectRequest updateObjectMetadataRequestWithContainerName:pithosContainer.name
+ objectName:pithosObject.name
+ contentEncoding:nil
+ contentDisposition:nil
+ manifest:nil
+ sharing:nil
+ isPublic:ASIPithosObjectRequestPublicIgnore
+ metadata:pithosObject.metadata
+ update:NO] retain];
+ applyMetadataObjectRequest.delegate = self;
+ [applyMetadataObjectRequest startAsynchronous];
+ }
+ }
+}
+
+- (void)refreshInfo {
+ @synchronized(self) {
+ if (refreshMetadataObjectRequest == nil) {
+ refreshMetadataObjectRequest = [[ASIPithosObjectRequest objectMetadataRequestWithContainerName:pithosContainer.name
+ objectName:pithosObject.name] retain];
+ refreshMetadataObjectRequest.delegate = self;
+ refreshMetadataObjectRequest.downloadCache = [ASIDownloadCache sharedCache];
+ [refreshMetadataObjectRequest startAsynchronous];
+ }
+ }
+}
+
+
+#pragma mark -
+#pragma mark ASIHTTPRequestDelegate
+
+- (void)requestFinished:(ASIHTTPRequest *)request {
+ NSLog(@"URL: %@", [request url]);
+ NSLog(@"cached: %d", [request didUseCachedResponse]);
+
+ if ([request isEqualTo:applyMetadataObjectRequest]) {
+ @synchronized(self) {
+ [applyMetadataObjectRequest release];
+ applyMetadataObjectRequest = nil;
+ }
+ [self refreshInfo];
+ } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
+ self.pithosObject = [refreshMetadataObjectRequest object];
+ @synchronized(self) {
+ [refreshMetadataObjectRequest release];
+ refreshMetadataObjectRequest = nil;
+ }
+ }
+}
+
+- (void)requestFailed:(ASIHTTPRequest *)request {
+ if ([request isEqualTo:applyMetadataObjectRequest]) {
+ // XXX do something on error, cleanup
+ NSLog(@"error:%@", [applyMetadataObjectRequest error]);
+ @synchronized(self) {
+ [applyMetadataObjectRequest release];
+ applyMetadataObjectRequest = nil;
+ }
+ } else if ([request isEqualTo:refreshMetadataObjectRequest]) {
+ // XXX do something on error, cleanup
+ NSLog(@"error:%@", [refreshMetadataObjectRequest error]);
+ @synchronized(self) {
+ [refreshMetadataObjectRequest release];
+ refreshMetadataObjectRequest = nil;
+ }
+ }
+}
+
@end