Revision 45f2fce6 Classes/EditMetadataViewController.m

b/Classes/EditMetadataViewController.m
38 38
#import "EditMetadataViewController.h"
39 39
#import "AccountManager.h"
40 40
#import "UIViewController+Conveniences.h"
41
#import "FolderViewController.h"
42
#import "Folder.h"
43
#import "PithosUtilities.h"
41 44

  
42 45

  
43 46

  
......
48 51

  
49 52
@synthesize metadataKey;
50 53
@synthesize metadataValue;
51
@synthesize removeMetadataEnabled;
54
@synthesize removeMetadataEnabled, objectIsFolder, folderViewController, objectIsContainer;
52 55

  
53 56
#define kMetadata 0 
54 57
#define kSaveMedata 1
......
182 185

  
183 186
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
184 187
{
188

  
189
    
185 190
    if (indexPath.section != kMetadata)
186 191
        [self.view endEditing:YES];
187 192
    
......
189 194
    NSIndexPath *keyCellIndexPath;
190 195
    NSIndexPath *valueCellIndexPath;
191 196
    UITableViewCell *cell;
197
    
192 198
    switch (indexPath.section) {
193 199
        case kSaveMedata:
194 200
            keyCellIndexPath = [NSIndexPath indexPathForRow:0 inSection:kMetadata];
195 201
            cell = [self.tableView cellForRowAtIndexPath:keyCellIndexPath];
196 202
            UITextField *textField = [[cell.contentView subviews] objectAtIndex:0];
197
            NSString *newMetadataKey = textField.text;
203
            newMetadataKey = textField.text;
198 204
        
199 205
            if ([newMetadataKey length] == 0
200 206
                || [[newMetadataKey stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
......
206 212
            valueCellIndexPath = [NSIndexPath indexPathForRow:1 inSection:kMetadata];
207 213
            cell = [self.tableView cellForRowAtIndexPath:valueCellIndexPath];
208 214
            textField = [[cell.contentView subviews] objectAtIndex:0];
209
            NSString *newMetadataValue = textField.text;
215
            newMetadataValue = textField.text;
210 216
            
211
            activityMessage = @"Saving metadata";
217
            [object.metadata removeObjectForKey:metadataKey];
218
            [object.metadata setObject:newMetadataValue forKey:newMetadataKey];
212 219
            
220
            if (objectIsFolder && ![PithosUtilities isContentTypeDirectory:object.contentType]) {
221
                if ([folderViewController.folder.objects objectForKey:object.name]) {
222
                    NSString *alertMessage = [NSString stringWithFormat:@"In order to apply the changes in '%@', the object at the same path must be replaced. Continue?",object.name];
223
                    NSString *alertTitle = @"Apply changes";
224
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle
225
                                                                    message:alertMessage
226
                                                                   delegate:self
227
                                                          cancelButtonTitle:@"Cancel"
228
                                                          otherButtonTitles:@"OK", nil];
229
                    [alert show];
230
                    return;
231
                } else {
232
                    activityMessage = @"Saving metadata...";
233
                    activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
234
                    [activityIndicatorView addToView:self.view];
235
                    
236
                    object.name = object.fullPath;
237
                    object.contentType = @"application/directory";
238
                    object.data = [NSData data];
239
                    [self addNewFolderRequestObservers];
240
                    [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil];  
241
                    return;
242
                }
243
            }
244
            
245
            activityMessage = @"Saving metadata";
213 246
            activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
214 247
            [activityIndicatorView addToView:self.view];
215 248

  
216
            [object.metadata removeObjectForKey:metadataKey];
217
            [object.metadata setObject:newMetadataValue forKey:newMetadataKey];
218 249
            [self.account.manager writeObjectMetadata:container object:object];
219 250
            successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectMetadataSucceeded"
220 251
                                                                                object:object
......
227 258
                                   [self.tableView reloadData];
228 259
                                   [activityIndicatorView removeFromSuperviewAndRelease];
229 260
                                   [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
261
                                   if (objectIsContainer) {
262
                                       container.metadata = object.metadata;
263
                                       [self.account.containers setObject:container forKey:container.name];
264
                                   }
230 265
                                   [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
231 266
                               }];
232 267
            
......
263 298
                                   self.metadataValue = @"";
264 299
                                   removeMetadataEnabled = NO;
265 300
                                   [self.tableView reloadData];
301
                                   if (objectIsContainer) {
302
                                       container.metadata = object.metadata;
303
                                       [self.account.containers setObject:container forKey:container.name];
304
                                   }
266 305
                                   [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
267 306
                               }];
268 307
            
......
283 322
    }
284 323
}
285 324

  
286
#pragma mark - Textfield delegate
325
#pragma mark - Alertview delegate
287 326

  
327
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
328
{
329
    if (buttonIndex == 1) {
330
        NSString *activityMessage = @"Applying permissions...";
331
        
332
        activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
333
        [activityIndicatorView addToView:self.view];
334
        
335
        object.name = object.fullPath;
336
        object.contentType = @"application/directory";
337
        object.data = [NSData data];
338
        [self addNewFolderRequestObservers];
339
        [self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil];        
340
        
341
    } else {
342
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
343
    }
344
}
288 345

  
346
#pragma mark - Textfield delegate
289 347

  
290 348

  
291 349
- (BOOL)textFieldShouldReturn:(UITextField *)textField
......
310 368
    return YES;
311 369
}
312 370

  
371
#pragma mark - add observers
372

  
373
- (void)addNewFolderRequestObservers {
374
    addFolderSuccessObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectSucceeded" object:object 
375
                                                                                  queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification)
376
                                {
377
                                    Folder *newFolder = [[Folder alloc] init];
378
                                    newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject];
379
                                    newFolder.parent = folderViewController.folder;
380
                                    newFolder.sharing = folderViewController.folder.sharing;
381
                                    newFolder.metadata = object.metadata;
382
                                    [folderViewController.folder.folders setObject:newFolder forKey:newFolder.name];
383
                                    [activityIndicatorView removeFromSuperviewAndRelease];
384
                                    [newFolder release];
385
                                    self.metadataKey = newMetadataKey;
386
                                    self.metadataValue = newMetadataValue;
387
                                    removeMetadataEnabled = YES;
388
                                    [self.tableView reloadData];
389
                                    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
390
                                    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
391
                                        [self.folderViewController refreshButtonPressed:nil];
392
                                    }
393
                                    else {
394
                                        self.folderViewController.needsRefreshing = YES;
395
                                    }
396
                                    [[NSNotificationCenter defaultCenter] removeObserver:addFolderSuccessObserver];
397
                                }];
398
    
399
    addFolderFailureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeObjectFailed" object:object 
400
                                                                                  queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification)
401
                                {         
402
                                    [object.metadata removeObjectForKey:newMetadataKey];
403
                                    [object.metadata setObject:metadataValue forKey:metadataKey];
404
                                    [activityIndicatorView removeFromSuperviewAndRelease];
405
                                    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
406
                                    [self.tableView reloadData];
407
                                    [self alert:@"There was a problem saving the metadata." request:[notification.userInfo objectForKey:@"request"]];
408
                                    
409
                                    [[NSNotificationCenter defaultCenter] removeObserver:addFolderFailureObserver];
410
                                }];
411
    
412

  
413
}
414

  
313 415
@end

Also available in: Unified diff