From 21d3023a9b7b6aff68c1170e345951396b1c6cfd Mon Sep 17 00:00:00 2001 From: 单军华 Date: Tue, 31 Jul 2018 13:35:21 +0800 Subject: [PATCH] no message --- screendisplay/Pods/ASIHTTPRequest/Classes/CloudFiles/ASICloudFilesObjectRequest.m | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 261 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/ASIHTTPRequest/Classes/CloudFiles/ASICloudFilesObjectRequest.m b/screendisplay/Pods/ASIHTTPRequest/Classes/CloudFiles/ASICloudFilesObjectRequest.m new file mode 100755 index 0000000..9d1600b --- /dev/null +++ b/screendisplay/Pods/ASIHTTPRequest/Classes/CloudFiles/ASICloudFilesObjectRequest.m @@ -0,0 +1,261 @@ +// +// ASICloudFilesObjectRequest.m +// +// Created by Michael Mayo on 1/6/10. +// + +#import "ASICloudFilesObjectRequest.h" +#import "ASICloudFilesObject.h" + + +@implementation ASICloudFilesObjectRequest + +@synthesize currentElement, currentContent, currentObject; +@synthesize accountName, containerName; + +#pragma mark - +#pragma mark Constructors + ++ (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName { + NSString *urlString = [NSString stringWithFormat:@"%@/%@", [ASICloudFilesRequest storageURL], containerName]; + ASICloudFilesObjectRequest *request = [[[ASICloudFilesObjectRequest alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; + [request setRequestMethod:method]; + [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; + request.containerName = containerName; + return request; +} + ++ (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName queryString:(NSString *)queryString { + NSString *urlString = [NSString stringWithFormat:@"%@/%@%@", [ASICloudFilesRequest storageURL], containerName, queryString]; + ASICloudFilesObjectRequest *request = [[[ASICloudFilesObjectRequest alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; + [request setRequestMethod:method]; + [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; + request.containerName = containerName; + return request; +} + ++ (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName objectPath:(NSString *)objectPath { + NSString *urlString = [NSString stringWithFormat:@"%@/%@/%@", [ASICloudFilesRequest storageURL], containerName, objectPath]; + ASICloudFilesObjectRequest *request = [[[ASICloudFilesObjectRequest alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; + [request setRequestMethod:method]; + [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; + request.containerName = containerName; + return request; +} + +#pragma mark - +#pragma mark HEAD - Container Info + ++ (id)containerInfoRequest:(NSString *)containerName { + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName]; + return request; +} + +- (NSUInteger)containerObjectCount { + return [[[self responseHeaders] objectForKey:@"X-Container-Object-Count"] intValue]; +} + +- (NSUInteger)containerBytesUsed { + return [[[self responseHeaders] objectForKey:@"X-Container-Bytes-Used"] intValue]; +} + +#pragma mark - +#pragma mark HEAD - Object Info + ++ (id)objectInfoRequest:(NSString *)containerName objectPath:(NSString *)objectPath { + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName objectPath:objectPath]; + return request; +} + +#pragma mark - +#pragma mark GET - List Objects + ++ (NSString *)queryStringWithContainer:(NSString *)container limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path { + NSString *queryString = @"?format=xml"; + + if (limit && limit > 0) { + queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&limit=%i", limit]]; + } + if (marker) { + queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", [marker stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]; + } + if (path) { + queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&path=%@", [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]; + } + + return queryString; +} + ++ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path { + NSString *queryString = [ASICloudFilesObjectRequest queryStringWithContainer:containerName limit:limit marker:marker prefix:prefix path:path]; + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"GET" containerName:containerName queryString:queryString]; + return request; +} + ++ (id)listRequestWithContainer:(NSString *)containerName { + return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:nil path:nil]; +} + +- (NSArray *)objects { + if (objects) { + return objects; + } + objects = [[[NSMutableArray alloc] init] autorelease]; + + NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; + [parser setDelegate:self]; + [parser setShouldProcessNamespaces:NO]; + [parser setShouldReportNamespacePrefixes:NO]; + [parser setShouldResolveExternalEntities:NO]; + [parser parse]; + return objects; +} + +#pragma mark - +#pragma mark GET - Retrieve Object + ++ (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { + return [ASICloudFilesObjectRequest storageRequestWithMethod:@"GET" containerName:containerName objectPath:objectPath]; +} + +- (ASICloudFilesObject *)object { + ASICloudFilesObject *object = [ASICloudFilesObject object]; + + NSString *path = [self url].path; + NSRange range = [path rangeOfString:self.containerName]; + path = [path substringFromIndex:range.location + range.length + 1]; + + object.name = path; + object.hash = [[self responseHeaders] objectForKey:@"ETag"]; + object.bytes = [[[self responseHeaders] objectForKey:@"Content-Length"] intValue]; + object.contentType = [[self responseHeaders] objectForKey:@"Content-Type"]; + object.lastModified = [[self responseHeaders] objectForKey:@"Last-Modified"]; + object.metadata = [NSMutableDictionary dictionary]; + + for (NSString *key in [[self responseHeaders] keyEnumerator]) { + NSRange metaRange = [key rangeOfString:@"X-Object-Meta-"]; + if (metaRange.location == 0) { + [object.metadata setObject:[[self responseHeaders] objectForKey:key] forKey:[key substringFromIndex:metaRange.length]]; + } + } + + object.data = [self responseData]; + + return object; +} + +#pragma mark - +#pragma mark PUT - Upload Object + ++ (id)putObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { + return [self putObjectRequestWithContainer:containerName objectPath:object.name contentType:object.contentType objectData:object.data metadata:object.metadata etag:nil]; +} + ++ (id)putObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath contentType:(NSString *)contentType objectData:(NSData *)objectData metadata:(NSDictionary *)metadata etag:(NSString *)etag { + + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"PUT" containerName:containerName objectPath:objectPath]; + [request addRequestHeader:@"Content-Type" value:contentType]; + + // add metadata to headers + if (metadata) { + for (NSString *key in [metadata keyEnumerator]) { + [request addRequestHeader:[NSString stringWithFormat:@"X-Object-Meta-%@", key] value:[metadata objectForKey:key]]; + } + } + + [request appendPostData:objectData]; + return request; +} + ++ (id)putObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath contentType:(NSString *)contentType file:(NSString *)filePath metadata:(NSDictionary *)metadata etag:(NSString *)etag +{ + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"PUT" containerName:containerName objectPath:objectPath]; + [request addRequestHeader:@"Content-Type" value:contentType]; + + // add metadata to headers + if (metadata) { + for (NSString *key in [metadata keyEnumerator]) { + [request addRequestHeader:[NSString stringWithFormat:@"X-Object-Meta-%@", key] value:[metadata objectForKey:key]]; + } + } + + [request setShouldStreamPostDataFromDisk:YES]; + [request setPostBodyFilePath:filePath]; + return request; +} + +#pragma mark - +#pragma mark POST - Set Object Metadata + ++ (id)postObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { + return [self postObjectRequestWithContainer:containerName objectPath:object.name metadata:object.metadata]; +} + ++ (id)postObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath metadata:(NSDictionary *)metadata { + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"POST" containerName:containerName objectPath:objectPath]; + + // add metadata to headers + if (metadata) { + for (NSString *key in [metadata keyEnumerator]) { + [request addRequestHeader:[NSString stringWithFormat:@"X-Object-Meta-%@", key] value:[metadata objectForKey:key]]; + } + } + + return request; +} + +#pragma mark - +#pragma mark DELETE - Delete Object + ++ (id)deleteObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { + ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"DELETE" containerName:containerName objectPath:objectPath]; + return request; +} + +#pragma mark - +#pragma mark XML Parser Delegate + +- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { + [self setCurrentElement:elementName]; + + if ([elementName isEqualToString:@"object"]) { + [self setCurrentObject:[ASICloudFilesObject object]]; + } + [self setCurrentContent:@""]; +} + +- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { + if ([elementName isEqualToString:@"name"]) { + [self currentObject].name = [self currentContent]; + } else if ([elementName isEqualToString:@"hash"]) { + [self currentObject].hash = [self currentContent]; + } else if ([elementName isEqualToString:@"bytes"]) { + [self currentObject].bytes = [[self currentContent] intValue]; + } else if ([elementName isEqualToString:@"content_type"]) { + [self currentObject].contentType = [self currentContent]; + } else if ([elementName isEqualToString:@"last_modified"]) { + [self currentObject].lastModified = [self dateFromString:[self currentContent]]; + } else if ([elementName isEqualToString:@"object"]) { + // we're done with this object. time to move on to the next + [objects addObject:currentObject]; + [self setCurrentObject:nil]; + } +} + +- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { + [self setCurrentContent:[[self currentContent] stringByAppendingString:string]]; +} + +#pragma mark - +#pragma mark Memory Management + +- (void)dealloc { + [currentElement release]; + [currentContent release]; + [currentObject release]; + [accountName release]; + [containerName release]; + [super dealloc]; +} + +@end -- Gitblit v1.8.0