#import "AccountManager.h"
#import "UIViewController+Conveniences.h"
#import "FolderViewController.h"
+#import "Folder.h"
+#import "PithosUtilities.h"
#define kUser 0
#define kPermissions 1
- (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
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) {
[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
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"
[self.folderViewController refreshButtonPressed:nil];
}
}
+
[[NSNotificationCenter defaultCenter] removeObserver:successObserver];
}];
{
[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)
return YES;
}
+
@end