#import "EditMetadataViewController.h"
#import "AccountManager.h"
#import "UIViewController+Conveniences.h"
+#import "FolderViewController.h"
+#import "Folder.h"
+#import "PithosUtilities.h"
@synthesize metadataKey;
@synthesize metadataValue;
-@synthesize removeMetadataEnabled;
+@synthesize removeMetadataEnabled, objectIsFolder, folderViewController, objectIsContainer;
#define kMetadata 0
#define kSaveMedata 1
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
+
+
if (indexPath.section != kMetadata)
[self.view endEditing:YES];
NSIndexPath *keyCellIndexPath;
NSIndexPath *valueCellIndexPath;
UITableViewCell *cell;
+
switch (indexPath.section) {
case kSaveMedata:
keyCellIndexPath = [NSIndexPath indexPathForRow:0 inSection:kMetadata];
cell = [self.tableView cellForRowAtIndexPath:keyCellIndexPath];
UITextField *textField = [[cell.contentView subviews] objectAtIndex:0];
- NSString *newMetadataKey = textField.text;
+ newMetadataKey = textField.text;
if ([newMetadataKey length] == 0
|| [[newMetadataKey stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
valueCellIndexPath = [NSIndexPath indexPathForRow:1 inSection:kMetadata];
cell = [self.tableView cellForRowAtIndexPath:valueCellIndexPath];
textField = [[cell.contentView subviews] objectAtIndex:0];
- NSString *newMetadataValue = textField.text;
+ newMetadataValue = textField.text;
- activityMessage = @"Saving metadata";
+ [object.metadata removeObjectForKey:metadataKey];
+ [object.metadata setObject:newMetadataValue forKey:newMetadataKey];
+ 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 {
+ activityMessage = @"Saving metadata...";
+ 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 addNewFolderRequestObservers];
+ [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil];
+ return;
+ }
+ }
+
+ activityMessage = @"Saving metadata";
activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
[activityIndicatorView addToView:self.view];
- [object.metadata removeObjectForKey:metadataKey];
- [object.metadata setObject:newMetadataValue forKey:newMetadataKey];
[self.account.manager writeObjectMetadata:container object:object];
successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectMetadataSucceeded"
object:object
[self.tableView reloadData];
[activityIndicatorView removeFromSuperviewAndRelease];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ if (objectIsContainer) {
+ container.metadata = object.metadata;
+ [self.account.containers setObject:container forKey:container.name];
+ }
[[NSNotificationCenter defaultCenter] removeObserver:successObserver];
}];
self.metadataValue = @"";
removeMetadataEnabled = NO;
[self.tableView reloadData];
+ if (objectIsContainer) {
+ container.metadata = object.metadata;
+ [self.account.containers setObject:container forKey:container.name];
+ }
[[NSNotificationCenter defaultCenter] removeObserver:successObserver];
}];
}
}
-#pragma mark - Textfield delegate
+#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 addNewFolderRequestObservers];
+ [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil];
+
+ } else {
+ [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
+ }
+}
+#pragma mark - Textfield delegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
return YES;
}
+#pragma mark - add observers
+
+- (void)addNewFolderRequestObservers {
+ 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;
+ newFolder.metadata = object.metadata;
+ [folderViewController.folder.folders setObject:newFolder forKey:newFolder.name];
+ [activityIndicatorView removeFromSuperviewAndRelease];
+ [newFolder release];
+ self.metadataKey = newMetadataKey;
+ self.metadataValue = newMetadataValue;
+ removeMetadataEnabled = YES;
+ [self.tableView reloadData];
+ [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
+ 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.metadata removeObjectForKey:newMetadataKey];
+ [object.metadata setObject:metadataValue forKey:metadataKey];
+ [activityIndicatorView removeFromSuperviewAndRelease];
+ [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
+ [self.tableView reloadData];
+ [self alert:@"There was a problem saving the metadata." request:[notification.userInfo objectForKey:@"request"]];
+
+ [[NSNotificationCenter defaultCenter] removeObserver:addFolderFailureObserver];
+ }];
+
+
+}
+
@end