Create application/directory for subdir, if metadata or permissions are applied.
[pithos-ios] / Classes / EditPermissionsViewController.m
index fe71c4a..833a5b1 100644 (file)
@@ -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
 - (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