X-Git-Url: https://code.grnet.gr/git/pithos-ios/blobdiff_plain/d17a05de5b742e918b191254b9f3d311d3be4bd6..45f2fce63d275d31a7e9e8b60f5c01c0703cde9f:/Classes/EditPermissionsViewController.m diff --git a/Classes/EditPermissionsViewController.m b/Classes/EditPermissionsViewController.m index fe71c4a..833a5b1 100644 --- a/Classes/EditPermissionsViewController.m +++ b/Classes/EditPermissionsViewController.m @@ -39,6 +39,8 @@ #import "AccountManager.h" #import "UIViewController+Conveniences.h" #import "FolderViewController.h" +#import "Folder.h" +#import "PithosUtilities.h" #define kUser 0 #define kPermissions 1 @@ -71,6 +73,49 @@ - (void)viewDidLoad { [super viewDidLoad]; + addFolderSuccessObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectSucceeded" object:object + queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) + { + Folder *newFolder = [[Folder alloc] init]; + newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject]; + newFolder.parent = folderViewController.folder; + newFolder.sharing = folderViewController.folder.sharing; + [folderViewController.folder.folders setObject:newFolder forKey:newFolder.name]; + [activityIndicatorView removeFromSuperviewAndRelease]; + [newFolder release]; + [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; + removePermissionsEnabled = YES; + [self.tableView reloadData]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [self.folderViewController refreshButtonPressed:nil]; + } + else { + self.folderViewController.needsRefreshing = YES; + } + + [[NSNotificationCenter defaultCenter] removeObserver:addFolderSuccessObserver]; + }]; + + addFolderFailureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectFailed" object:object + queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) + { + object.sharing = self.oldPermissionsString; + readPermissionSelected = !readPermissionSelected; + writePermissionSelected = !writePermissionSelected; + + if (readPermissionSelected) + [self.permissions setObject:@"read" forKey:user]; + else if (writePermissionSelected) + [self.permissions setObject:@"write" forKey:user]; + + [activityIndicatorView removeFromSuperviewAndRelease]; + [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; + [self.tableView reloadData]; + [self alert:@"There was a problem applying the permissions." request:[notification.userInfo objectForKey:@"request"]]; + + [[NSNotificationCenter defaultCenter] removeObserver:addFolderSuccessObserver]; + }]; + } - (void)viewDidUnload @@ -128,7 +173,7 @@ if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } - + if (indexPath.section == kUser) { UITextField *textField = nil; for (id subView in cell.contentView.subviews) { @@ -246,13 +291,37 @@ [self.permissions setObject:@"write" forKey:newUserName]; self.user = newUserName; + self.oldPermissionsString = object.sharing; + object.sharing = [self buildPermissionsString]; + + if (objectIsFolder && ![PithosUtilities isContentTypeDirectory:object.contentType]) { + if ([folderViewController.folder.objects objectForKey:object.name]) { + NSString *alertMessage = [NSString stringWithFormat:@"In order to apply the changes in '%@', the object at the same path must be replaced. Continue?",object.name]; + NSString *alertTitle = @"Apply changes"; + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle + message:alertMessage + delegate:self + cancelButtonTitle:@"Cancel" + otherButtonTitles:@"OK", nil]; + [alert show]; + return; + } else { + NSString *activityMessage = @"Applying permissions..."; + activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; + [activityIndicatorView addToView:self.view]; + + object.name = object.fullPath; + object.contentType = @"application/directory"; + object.data = [NSData data]; + [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil]; + return; + } + } NSString *activityMessage = @"Applying permissions..."; activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; [activityIndicatorView addToView:self.view]; - self.oldPermissionsString = object.sharing; - object.sharing = [self buildPermissionsString]; [self.account.manager writeObjectMetadata:container object:object]; successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectMetadataSucceeded" object:object @@ -266,11 +335,12 @@ if (objectIsFolder || (account.shared && ![oldPermissionsString isEqualToString:object.sharing])) { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [self.folderViewController refreshButtonPressed:nil]; - } else { + } + else { self.folderViewController.needsRefreshing = YES; } } - + [[NSNotificationCenter defaultCenter] removeObserver:successObserver]; }]; failureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectMetadataFailed" @@ -321,6 +391,7 @@ [self.folderViewController refreshButtonPressed:nil]; } } + [[NSNotificationCenter defaultCenter] removeObserver:successObserver]; }]; @@ -352,15 +423,37 @@ { [self userInputIsValid:textField.text]; [textField resignFirstResponder]; + return YES; } +#pragma mark - Alertview delegate + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + if (buttonIndex == 1) { + NSString *activityMessage = @"Applying permissions..."; + + activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; + [activityIndicatorView addToView:self.view]; + + object.name = object.fullPath; + object.contentType = @"application/directory"; + object.data = [NSData data]; + [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil]; + + } else { + [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; + } +} + #pragma mark - helper methods - (NSString *)buildPermissionsString { NSString *readPermissionsString = @""; NSString *writePermissionsString = @""; + for (NSString *aUser in [permissions allKeys]) { if ([[permissions objectForKey:aUser] isEqual:@"read"]) { if ([readPermissionsString length] == 0) @@ -405,4 +498,5 @@ return YES; } + @end