Show
Ignore:
Timestamp:
06/30/2008 11:57:38 AM (5 months ago)
Author:
mgorbach
Message:

Fix a bug with trying to delete multiple filesystems

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Settings/MFSettingsController.m

    r72 r73  
    296296{ 
    297297        MFClientFS* clickedFS = [filesystemTableView clickedFilesystem]; 
     298        NSArray* selectedFilesystems = [[filesystemArrayController arrangedObjects] objectsAtIndexes: 
     299                                                   [filesystemTableView selectedRowIndexes]]; 
    298300        if (clickedFS) 
    299301        { 
    300                 return [NSArray arrayWithObject: clickedFS]; 
     302                if ([selectedFilesystems containsObject: clickedFS]) 
     303                        return selectedFilesystems; 
     304                else 
     305                        return [NSArray arrayWithObject: clickedFS]; 
    301306        } 
    302307        else 
     
    330335} 
    331336 
    332 - (void)deleteFilesystem:(MFClientFS*)fs 
    333 { 
    334         if ([fs isUnmounted] || [fs isFailedToMount]) 
    335         { 
    336                 NSString* messageText = [NSString stringWithFormat: @"Are you sure you want to delete the filesystem %@?", fs.name]; 
     337 
     338- (void)deleteFilesystems:(NSArray*)filesystems 
     339{ 
     340        NSMutableArray* filesystemsToDelete = [filesystems mutableCopy]; 
     341        for(MFClientFS* fs in filesystems) 
     342        { 
     343                if( ! ([fs isUnmounted] || [fs isFailedToMount]) ) 
     344                { 
     345                        [filesystemsToDelete removeObject: fs]; 
     346                        MFLogS(self, @"Can't delete filesystem %@", fs); 
     347                } 
     348        } 
     349 
     350        if ([filesystemsToDelete count] > 0) 
     351        { 
     352                NSString* fsWord = [filesystemsToDelete count] == 1 ? @"filesystem" : @"filesystems"; 
     353                NSString* messageText = [NSString stringWithFormat: @"Are you sure you want to delete the %@ %@?", fsWord, 
     354                                                                 [[filesystemsToDelete valueForKey: kMFFSNameParameter] componentsJoinedByString: @", "]]; 
    337355                NSAlert* deleteConfirmation = [NSAlert new]; 
    338356                [deleteConfirmation setMessageText: messageText]; 
     
    344362                                                                           modalDelegate:self 
    345363                                                                          didEndSelector:@selector(deleteConfirmationAlertDidEnd:returnCode:contextInfo:) 
    346                                                                                  contextInfo:fs]; 
    347         } 
    348         else 
    349         { 
    350                 MFLogSO(self, fs, @"Can't delete FS %@", fs); 
    351         } 
    352 } 
    353  
    354  
     364                                                                                 contextInfo:filesystemsToDelete]; 
     365        } 
     366} 
     367 
     368- (void)deleteFilesystem:(MFClientFS*)fs 
     369{ 
     370        [self deleteFilesystems: [NSArray arrayWithObject: fs]]; 
     371} 
     372         
    355373 
    356374# pragma mark Selected Action Methods 
     
    412430- (IBAction)deleteSelectedFS:(id)sender 
    413431{ 
    414         for(MFClientFS* fs in [self selectedFilesystems]) 
    415                 [self deleteFilesystem: fs]; 
     432        NSLog(@"DSFS %@", [self selectedFilesystems]); 
     433        [self deleteFilesystems: [self selectedFilesystems]]; 
    416434} 
    417435 
     
    419437- (void)deleteConfirmationAlertDidEnd:(NSAlert*)alert returnCode:(NSInteger)code contextInfo:(void*)context 
    420438{ 
    421         MFClientFS* fs = (MFClientFS*)context; 
     439        NSArray* filesystemsToDelete = (NSArray*)context; 
    422440        if (code == NSAlertSecondButtonReturn) 
    423441        { 
     
    426444        else if (code == NSAlertFirstButtonReturn) 
    427445        { 
    428                 [client deleteFilesystem: fs]; 
     446                for(MFClientFS* fs in filesystemsToDelete) 
     447                        [client deleteFilesystem: fs]; 
    429448        } 
    430449}