#import "FolderViewController.h"
#import "APICallback.h"
-
@implementation AddFolderViewController
@synthesize account, container, folder, folderViewController;
+#pragma mark - View lifecycle
+
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
-#pragma mark -
-#pragma mark View lifecycle
-
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"Add Folder";
[textField becomeFirstResponder];
}
-#pragma mark -
-#pragma mark Save Button
+#pragma mark - Memory management
-- (void)saveButtonPressed:(id)sender {
- if (!saving) {
- if ([textField.text isEqualToString:@""]) {
- [self alert:@"Folder Name Required" message:@"Please enter a folder name."];
- } else {
- [textField resignFirstResponder];
- NSString *objectName;
- BOOL objectNameHasTrailingSlash = [textField.text hasSuffix:@"/"];
- NSUInteger indexOfFirstSlash = [textField.text rangeOfString:@"/"].location;
-
- if ((!objectNameHasTrailingSlash && indexOfFirstSlash != NSNotFound) ||
- (objectNameHasTrailingSlash && indexOfFirstSlash < textField.text.length - 1)) {
- [self alert:@"Invalid folder name" message:@"'/' characters are only allowed at the end of folder names"];
- return;
- }
-
- if (folder && folder.name) {
- objectName = [NSString stringWithFormat:@"%@/%@", [folder fullPath], textField.text];
- } else {
- objectName = textField.text;
- }
-
- if ([folderViewController.folder.folders objectForKey:objectName] && !allowOverwrite) {
- NSString *alertMessage = [NSString stringWithFormat:@"An object with path '%@' in the container '%@' already exists, do you want to replace it?",objectName, folderViewController.container.name];
- NSString *alertTitle = @"Apply changes";
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle
- message:alertMessage
- delegate:self
- cancelButtonTitle:@"Cancel"
- otherButtonTitles:@"OK", nil];
- [alert show];
- [alert release];
- return;
- }
-
- StorageObject *object = [[StorageObject alloc] init];
- object.name = object.fullPath = objectName;
- object.data = [NSData data];
- object.contentType = @"application/directory";
-
- __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Adding folder..."
- andAddToView:self.view];
- [[self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil]
- success:^(OpenStackRequest *request) {
- Folder *newFolder = [[Folder alloc] init];
- if (objectNameHasTrailingSlash)
- object.name = [object.name substringToIndex:object.name.length - 1];
- newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject];
- if (objectNameHasTrailingSlash)
- newFolder.name = [newFolder.name stringByAppendingString:@"/"];
- newFolder.parent = folder;
- newFolder.sharing = folder.sharing;
- BOOL currentFolderIsRoot = NO;
- if ([folderViewController.folder isEqual:container.rootFolder]) {
- currentFolderIsRoot = YES;
- }
- [folder addFolder:newFolder];
- folderViewController.folder = folderViewController.folder;
- if (currentFolderIsRoot) {
- container.count += 1;
- container.rootFolder = folder;
- [self.account.containers setObject:container forKey:container.name];
- }
- if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
- [folderViewController setDetailViewController];
-
- allowOverwrite = NO;
- [activityIndicatorView removeFromSuperview];
- [self dismissModalViewControllerAnimated:YES];
- [newFolder release];
- [object release];
-
- }
- failure:^(OpenStackRequest *request) {
- allowOverwrite = NO;
- [activityIndicatorView removeFromSuperview];
- [self alert:@"There was a problem creating this folder." request:request];
- [object release];
- }];
- }
- }
+- (void)dealloc {
+ [account release];
+ [container release];
+ [folder release];
+ [folderViewController release];
+ [super dealloc];
}
-#pragma mark -
-#pragma mark Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
- return 1;
-}
+#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
-- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
- return @"If your folder name contains any forward slash characters, multiple folder objects will be created.";
-}
-
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"FolderNameCell";
- RSTextFieldCell *cell = (RSTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+ static NSString *cellIdentifier = @"FolderNameCell";
+ RSTextFieldCell *cell = (RSTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
- cell = [[[RSTextFieldCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
+ cell = [[[RSTextFieldCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier] autorelease];
cell.modalPresentationStyle = UIModalPresentationFormSheet;
textField = cell.textField;
textField.delegate = self;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
- }
+ }
cell.textLabel.text = @"Name";
return cell;
}
-#pragma mark - Alertview delegate
-
-- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
-{
- if (buttonIndex == 1) {
- allowOverwrite = YES;
- [self saveButtonPressed:nil];
- }
-}
-
-
-#pragma mark -
-#pragma mark Text Field Delegate
+#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[self saveButtonPressed:nil];
return NO;
}
-#pragma mark -
-#pragma mark Memory management
+#pragma mark - UIAlertViewDelegate
-- (void)dealloc {
- [account release];
- [container release];
- [folder release];
- [folderViewController release];
- [super dealloc];
+- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
+ if (buttonIndex == 1) {
+ allowOverwrite = YES;
+ [self saveButtonPressed:nil];
+ }
+}
+
+#pragma mark - Button handlers
+
+- (void)saveButtonPressed:(id)sender {
+ if ([textField.text isEqualToString:@""]) {
+ [self alert:@"Folder Name Required" message:@"Please enter a folder name."];
+ } else {
+ [textField resignFirstResponder];
+ NSString *objectName;
+ BOOL objectNameHasTrailingSlash = [textField.text hasSuffix:@"/"];
+ NSUInteger indexOfFirstSlash = [textField.text rangeOfString:@"/"].location;
+ if ((!objectNameHasTrailingSlash && indexOfFirstSlash != NSNotFound) ||
+ (objectNameHasTrailingSlash && indexOfFirstSlash < textField.text.length - 1)) {
+ [self alert:@"Invalid folder name" message:@"'/' characters are only allowed at the end of folder names"];
+ return;
+ }
+
+ if (folder && folder.name) {
+ objectName = [NSString stringWithFormat:@"%@/%@", [folder fullPath], textField.text];
+ } else {
+ objectName = textField.text;
+ }
+
+ if ([folderViewController.folder.folders objectForKey:objectName] && !allowOverwrite) {
+ NSString *alertMessage = [NSString stringWithFormat:@"An object with path '%@' in the container '%@' already exists, do you want to replace it?",
+ objectName, folderViewController.container.name];
+ NSString *alertTitle = @"Apply changes";
+ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle
+ message:alertMessage
+ delegate:self
+ cancelButtonTitle:@"Cancel"
+ otherButtonTitles:@"OK", nil];
+ [alert show];
+ [alert release];
+ return;
+ }
+
+ StorageObject *object = [[StorageObject alloc] init];
+ object.name = object.fullPath = objectName;
+ object.data = [NSData data];
+ object.contentType = @"application/directory";
+
+ __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Adding folder..."
+ andAddToView:self.view];
+ [[self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil]
+ success:^(OpenStackRequest *request) {
+ Folder *newFolder = [[Folder alloc] init];
+ if (objectNameHasTrailingSlash)
+ object.name = [object.name substringToIndex:object.name.length - 1];
+ newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject];
+ if (objectNameHasTrailingSlash)
+ newFolder.name = [newFolder.name stringByAppendingString:@"/"];
+ newFolder.parent = folder;
+ newFolder.sharing = folder.sharing;
+ BOOL currentFolderIsRoot = NO;
+ if ([folderViewController.folder isEqual:container.rootFolder]) {
+ currentFolderIsRoot = YES;
+ }
+ [folder addFolder:newFolder];
+ folderViewController.folder = folderViewController.folder;
+ if (currentFolderIsRoot) {
+ container.count += 1;
+ container.rootFolder = folder;
+ [self.account.containers setObject:container forKey:container.name];
+ }
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+ [folderViewController setDetailViewController];
+
+ allowOverwrite = NO;
+ [activityIndicatorView removeFromSuperview];
+ [self dismissModalViewControllerAnimated:YES];
+ [newFolder release];
+ [object release];
+ }
+ failure:^(OpenStackRequest *request) {
+ allowOverwrite = NO;
+ [activityIndicatorView removeFromSuperview];
+ [self alert:@"There was a problem creating this folder." request:request];
+ [object release];
+ }];
+ }
}
@end