Fix bugs. Show version in settings. Update icons. Update version.
[pithos-ios] / Classes / EditAccountGroupsViewController.m
index 55cf358..d0bf4aa 100644 (file)
@@ -39,6 +39,7 @@
 #import "UIViewController+Conveniences.h"
 #import "AccountManager.h"
 #import "OpenStackRequest.h"
+#import "APICallback.h"
 
 #define kGroupDetails 0 
 #define kSave 1
@@ -58,7 +59,7 @@
     [account release];
     [metadata release];
     [groups release];
-    
+    [activityIndicatorView release];
     [super dealloc];
 }
 
         UITextField *textField = [[cell.contentView subviews] objectAtIndex:0];
         NSString *newGroupName = textField.text;
         
-        if ([newGroupName length] == 0
-            || [[newGroupName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
+        if (![self userInputIsValid:newGroupName fieldName:@"Group name"]) {
             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-            [self alert:@"Invalid input" message:@"Group name cannot be empty"];
             return;
         }
-        
+
         valueCellIndexPath = [NSIndexPath indexPathForRow:1 inSection:kGroupDetails];
         cell = [self.tableView cellForRowAtIndexPath:valueCellIndexPath];
         textField = [[cell.contentView subviews] objectAtIndex:0];
         NSString *newGroupUsers = textField.text;
+        
+        if (![self userInputIsValid:newGroupUsers fieldName:@"Group users"]) {
+            [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+            return;
+        }
                     
         activityMessage = @"Saving group";
-        
+        [activityIndicatorView release];
         activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage]text:activityMessage];
         [activityIndicatorView addToView:self.view];
 
                                         metadata, @"metadata",
                                         nil
                                         ];
-        [self.account.manager writeAccountMetadata:accountInfo];
-        successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestSucceeded"
-                                                                            object:self.account
-                                                                             queue:[NSOperationQueue mainQueue]
-                                                                        usingBlock:^(NSNotification *notification)
-                            {                                   
-                                [activityIndicatorView removeFromSuperviewAndRelease];
-                                self.groupName = newGroupName;
-                                self.groupUsers = newGroupUsers;
-                                self.removeGroupEnabled = YES;
-                                self.navigationItem.title = @"Edit Group";
-                                [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-                                [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
-                            }];
-        
-        failureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestFailed" 
-                                                                            object:self.account 
-                                                                             queue:[NSOperationQueue mainQueue] 
-                                                                        usingBlock:^(NSNotification *notification)
-                            {
-                                [activityIndicatorView removeFromSuperviewAndRelease];
-                                [groups removeObjectForKey:newGroupName];
-                                [groups setObject:self.groupUsers forKey:self.groupName];
-                                [self.tableView reloadData];
-                                [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-                                [self alert:@"There was a problem saving the group information." request:[notification.userInfo objectForKey:@"request"]];
-                                   
-                                [[NSNotificationCenter defaultCenter] removeObserver:failureObserver];
-                            }];
+        [[self.account.manager writeAccountMetadata:accountInfo] 
+         success:^(OpenStackRequest *request) {
+             [activityIndicatorView removeFromSuperview];
+             self.groupName = newGroupName;
+             self.groupUsers = newGroupUsers;
+             self.removeGroupEnabled = YES;
+             self.navigationItem.title = @"Edit Group";
+             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+             [self.tableView reloadData]; 
+         }
+         failure:^(OpenStackRequest *request) {
+             [activityIndicatorView removeFromSuperview];
+             [groups removeObjectForKey:newGroupName];
+             [groups setObject:self.groupUsers forKey:self.groupName];
+             [self.tableView reloadData];
+             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+             [self alert:@"There was a problem saving the group information." request:request];
+         }];
     } else if (indexPath.section == kRemove) {
         activityMessage = @"Removing group";
+        [activityIndicatorView release];
         activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
         [activityIndicatorView addToView:self.view];
         
                                         nil
                                         ];
 
-        [self.account.manager writeAccountMetadata:accountInfo];
-        successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestSucceeded"
-                                                                            object:self.account
-                                                                             queue:[NSOperationQueue mainQueue]
-                                                                        usingBlock:^(NSNotification *notification)
-                            {
-                                [activityIndicatorView removeFromSuperviewAndRelease];
-                                self.groupName = @"";
-                                self.groupUsers = @"";
-                                [self.tableView reloadData];
-                                [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-                                [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
-                            }];
-        
-        failureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestFailed" 
-                                                                            object:self.account 
-                                                                             queue:[NSOperationQueue mainQueue] 
-                                                                        usingBlock:^(NSNotification *notification)
-                            {
-                                [activityIndicatorView removeFromSuperviewAndRelease];
-                                [groups setObject:groupUsers forKey:groupName];
-                                [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-                                [self alert:@"There was a problem removing the group information." request:[notification.userInfo objectForKey:@"request"]];
-                                   
-                                [[NSNotificationCenter defaultCenter] removeObserver:failureObserver];
-                            }];
+        [[self.account.manager writeAccountMetadata:accountInfo] 
+         success:^(OpenStackRequest *request) {
+             [activityIndicatorView removeFromSuperview];
+             self.groupName = @"";
+             self.groupUsers = @"";
+             self.removeGroupEnabled = NO;
+             [self.tableView reloadData];
+             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+         }
+         failure:^(OpenStackRequest *request) {
+             [activityIndicatorView removeFromSuperview];
+             [groups setObject:groupUsers forKey:groupName];
+             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+             [self alert:@"There was a problem removing the group information." request:request];
+         }];
     }
-
 }
 
 #pragma mark - Textfield delegate
     
     if ([textField returnKeyType] == UIReturnKeyNext)
     {
-        if ([textField.text length] == 0
-            || [[textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
-            [self alert:@"Invalid input" message:@"Group name cannot be empty"];
-        }
+        [self userInputIsValid:textField.text fieldName:@"Group name"];
 
         NSInteger nextTag = [textField tag] + 1;
         UIView *nextTextField = [self.tableView viewWithTag:nextTag];
     }
     else
     {
+        [self userInputIsValid:textField.text fieldName:@"Group users"];
         [textField resignFirstResponder];
     }
     
     return YES;
 }
 
+#pragma mark - Helper methods
+
+- (BOOL)userInputIsValid:(NSString *)input fieldName:(NSString *)fieldName {
+    if (![input length] || ![[input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
+        [self alert:@"Invalid input" message:[NSString stringWithFormat:@"%@ field cannot be empty", fieldName]];
+        return NO;
+    }
+    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"= "];
+    if ([input rangeOfCharacterFromSet:set].location != NSNotFound) {
+        [self alert:@"Invalid input" message:[NSString stringWithFormat:@"%@ field cannot contain '=' or whitespace characters", fieldName]];
+        return NO;
+    }
+    
+    return YES;
+}
+
+
 
 @end