#import "LoadBalancerRequest.h"
#import "APICallback.h"
#import "Analytics.h"
+#import "JSON.h"
+
+
@implementation AccountManager
- (APICallback *)callbackWithRequest:(id)request success:(APIResponseBlock)success failure:(APIResponseBlock)failure {
APICallback *callback = [[[APICallback alloc] initWithAccount:self.account request:request] autorelease];
((OpenStackRequest *)request).delegate = self;
- ((OpenStackRequest *)request).callback = callback;
+ ((OpenStackRequest *)request).callback = callback;
+
[request setCompletionBlock:^{
if ([request isSuccess]) {
success(request);
#pragma mark -
#pragma mark Object Storage
+
- (void)getStorageAccountInfo {
__block OpenStackRequest *request = [OpenStackRequest getStorageAccountInfoRequest:self.account];
}
- (void)getObjects:(Container *)container {
+ [self getObjects:container afterMarker:nil objectsBuffer:nil];
+}
+
+- (void)getObjects:(Container *)container
+ afterMarker:(NSString *)marker
+ objectsBuffer:(NSMutableDictionary *)objectsBuffer {
if (![self queue]) {
[self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
}
- GetObjectsRequest *request = [GetObjectsRequest request:self.account container:container];
+ GetObjectsRequest *request = [GetObjectsRequest request:self.account container:container marker:marker objectsBuffer:objectsBuffer];
[queue addOperation:request];
}
container.rootFolder = [Folder folder];
container.rootFolder.objects = objects;
[self.account persist];
-
+
NSNotification *notification = [NSNotification notificationWithName:@"getObjectsSucceeded" object:self.account userInfo:[NSDictionary dictionaryWithObject:container forKey:@"container"]];
[[NSNotificationCenter defaultCenter] postNotification:notification];
} else {
self.account.authToken = [[request responseHeaders] objectForKey:@"X-Auth-Token"];
self.account.serversURL = [NSURL URLWithString:[[request responseHeaders] objectForKey:@"X-Server-Management-Url"]];
- if ([account.provider isGRNet]) {
- NSString *filesStorageURL = [NSString stringWithFormat:@"%@%@",
- [[[NSBundle mainBundle] infoDictionary] objectForKey:@"GRNetStorageUrlPrefix"],
+ if (![[request responseHeaders] objectForKey:@"X-Storage-URL"]) {
+ NSString *filesStorageURL = [NSString stringWithFormat:@"%@/v1/%@",
+ [self.account.hostURL absoluteString],
[self.account username]];
+
self.account.filesURL = [NSURL URLWithString:filesStorageURL];
- } else {
+ }
+ else {
self.account.filesURL = [NSURL URLWithString:[[request responseHeaders] objectForKey:@"X-Storage-Url"]];
- }
+ }
+ self.account.pithosPublicLinkURLPrefix = self.account.hostURL;
+ self.account.pithosLoginURLPrefix = [NSURL URLWithString:
+ [[self.account.hostURL absoluteString]
+ stringByAppendingString:@"/login"]];
self.account.cdnURL = [NSURL URLWithString:[[request responseHeaders] objectForKey:@"X-Cdn-Management-Url"]];
[self.account persist];
}];
}
+
#pragma mark -
#pragma mark Memory Management