required libs:
* ZipArchive - Obj-C impl of zip
* asi-http-request : http request help to assist with asynchoronous downloading of files
* minizip : support for ZipArchive
*
Added default splash screen for iOS app. (using the Wagic background to keep it neutral to module)
TODO: refine handling for iPad splash screen
* add selection screen and input screen for location of downloadable content. (ie core files, image files, etc )
* add support to opt out of backing up to iCloud for core files. Right now iOS will automatically backup all files under Documents folder to iCloud. Consider only allowing player data to be backed up to iCloud. All graphics and other assets are considered volatile.
165 lines
5.3 KiB
Objective-C
165 lines
5.3 KiB
Objective-C
//
|
|
// ASIS3ObjectRequest.m
|
|
// Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest
|
|
//
|
|
// Created by Ben Copsey on 16/03/2010.
|
|
// Copyright 2010 All-Seeing Interactive. All rights reserved.
|
|
//
|
|
|
|
#import "ASIS3ObjectRequest.h"
|
|
|
|
NSString *const ASIS3StorageClassStandard = @"STANDARD";
|
|
NSString *const ASIS3StorageClassReducedRedundancy = @"REDUCED_REDUNDANCY";
|
|
|
|
@implementation ASIS3ObjectRequest
|
|
|
|
- (ASIHTTPRequest *)HEADRequest
|
|
{
|
|
ASIS3ObjectRequest *headRequest = (ASIS3ObjectRequest *)[super HEADRequest];
|
|
[headRequest setKey:[self key]];
|
|
[headRequest setBucket:[self bucket]];
|
|
return headRequest;
|
|
}
|
|
|
|
+ (id)requestWithBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [[[self alloc] initWithURL:nil] autorelease];
|
|
[newRequest setBucket:theBucket];
|
|
[newRequest setKey:theKey];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)requestWithBucket:(NSString *)theBucket key:(NSString *)theKey subResource:(NSString *)theSubResource
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [[[self alloc] initWithURL:nil] autorelease];
|
|
[newRequest setSubResource:theSubResource];
|
|
[newRequest setBucket:theBucket];
|
|
[newRequest setKey:theKey];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)PUTRequestForData:(NSData *)data withBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
|
|
[newRequest appendPostData:data];
|
|
[newRequest setRequestMethod:@"PUT"];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)PUTRequestForFile:(NSString *)filePath withBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
|
|
[newRequest setPostBodyFilePath:filePath];
|
|
[newRequest setShouldStreamPostDataFromDisk:YES];
|
|
[newRequest setRequestMethod:@"PUT"];
|
|
[newRequest setMimeType:[ASIHTTPRequest mimeTypeForFileAtPath:filePath]];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)DELETERequestWithBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
|
|
[newRequest setRequestMethod:@"DELETE"];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)COPYRequestFromBucket:(NSString *)theSourceBucket key:(NSString *)theSourceKey toBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
|
|
[newRequest setRequestMethod:@"PUT"];
|
|
[newRequest setSourceBucket:theSourceBucket];
|
|
[newRequest setSourceKey:theSourceKey];
|
|
return newRequest;
|
|
}
|
|
|
|
+ (id)HEADRequestWithBucket:(NSString *)theBucket key:(NSString *)theKey
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [self requestWithBucket:theBucket key:theKey];
|
|
[newRequest setRequestMethod:@"HEAD"];
|
|
return newRequest;
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
ASIS3ObjectRequest *newRequest = [super copyWithZone:zone];
|
|
[newRequest setBucket:[self bucket]];
|
|
[newRequest setKey:[self key]];
|
|
[newRequest setSourceBucket:[self sourceBucket]];
|
|
[newRequest setSourceKey:[self sourceKey]];
|
|
[newRequest setMimeType:[self mimeType]];
|
|
[newRequest setSubResource:[self subResource]];
|
|
[newRequest setStorageClass:[self storageClass]];
|
|
return newRequest;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[bucket release];
|
|
[key release];
|
|
[mimeType release];
|
|
[sourceKey release];
|
|
[sourceBucket release];
|
|
[subResource release];
|
|
[storageClass release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (void)buildURL
|
|
{
|
|
if ([self subResource]) {
|
|
[self setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@.%@%@?%@",[self requestScheme],[self bucket],[[self class] S3Host],[ASIS3Request stringByURLEncodingForS3Path:[self key]],[self subResource]]]];
|
|
} else {
|
|
[self setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://%@.%@%@",[self requestScheme],[self bucket],[[self class] S3Host],[ASIS3Request stringByURLEncodingForS3Path:[self key]]]]];
|
|
}
|
|
}
|
|
|
|
- (NSString *)mimeType
|
|
{
|
|
if (mimeType) {
|
|
return mimeType;
|
|
} else if ([self postBodyFilePath]) {
|
|
return [ASIHTTPRequest mimeTypeForFileAtPath:[self postBodyFilePath]];
|
|
} else {
|
|
return @"application/octet-stream";
|
|
}
|
|
}
|
|
|
|
- (NSString *)canonicalizedResource
|
|
{
|
|
if ([[self subResource] length] > 0) {
|
|
return [NSString stringWithFormat:@"/%@%@?%@",[self bucket],[ASIS3Request stringByURLEncodingForS3Path:[self key]], [self subResource]];
|
|
}
|
|
return [NSString stringWithFormat:@"/%@%@",[self bucket],[ASIS3Request stringByURLEncodingForS3Path:[self key]]];
|
|
}
|
|
|
|
- (NSMutableDictionary *)S3Headers
|
|
{
|
|
NSMutableDictionary *headers = [super S3Headers];
|
|
if ([self sourceKey]) {
|
|
NSString *path = [ASIS3Request stringByURLEncodingForS3Path:[self sourceKey]];
|
|
[headers setObject:[[self sourceBucket] stringByAppendingString:path] forKey:@"x-amz-copy-source"];
|
|
}
|
|
if ([self storageClass]) {
|
|
[headers setObject:[self storageClass] forKey:@"x-amz-storage-class"];
|
|
}
|
|
return headers;
|
|
}
|
|
|
|
- (NSString *)stringToSignForHeaders:(NSString *)canonicalizedAmzHeaders resource:(NSString *)canonicalizedResource
|
|
{
|
|
if ([[self requestMethod] isEqualToString:@"PUT"] && ![self sourceKey]) {
|
|
[self addRequestHeader:@"Content-Type" value:[self mimeType]];
|
|
return [NSString stringWithFormat:@"PUT\n\n%@\n%@\n%@%@",[self mimeType],dateString,canonicalizedAmzHeaders,canonicalizedResource];
|
|
}
|
|
return [super stringToSignForHeaders:canonicalizedAmzHeaders resource:canonicalizedResource];
|
|
}
|
|
|
|
@synthesize bucket;
|
|
@synthesize key;
|
|
@synthesize sourceBucket;
|
|
@synthesize sourceKey;
|
|
@synthesize mimeType;
|
|
@synthesize subResource;
|
|
@synthesize storageClass;
|
|
@end
|