Changeset 74

Show
Ignore:
Timestamp:
06/28/07 19:10:35 (1 year ago)
Author:
gbooker
Message:

Added the ability to rescan for new files in the predicated browser

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/SapphireBrowser.h

    r72 r74  
    1919{ 
    2020        NSMutableArray                          * _names ; 
    21         NSMutableArray                          * items ; 
     21        NSMutableArray                          *items ; 
    2222        SapphireDirectoryMetaData       *metaData; 
    2323        SapphirePredicate                       *predicate; 
     
    2525        SapphireFileMetaData            *currentPlayFile; 
    2626        SapphireSettings                        *settings; 
     27        int                                                     dirCount; 
     28        int                                                     fileCount; 
    2729} 
    2830 
  • trunk/SapphireBrowser.m

    r72 r74  
    143143        if(predicate == NULL) 
    144144        { 
    145                 [_names addObjectsFromArray:[metaData directories]]; 
     145                NSArray *dirs = [metaData directories]; 
     146                [_names addObjectsFromArray:dirs]; 
    146147                divider = [_names count]; 
    147                 [_names addObjectsFromArray:[metaData files]]; 
     148                NSArray *files = [metaData files]; 
     149                [_names addObjectsFromArray:files]; 
     150                dirCount = [dirs count]; 
     151                fileCount = [files count]; 
    148152        } 
    149153        else 
    150154        { 
    151                 [_names addObjectsFromArray:[metaData predicatedDirectories:predicate]]; 
     155                NSArray *dirs = [metaData predicatedDirectories:predicate]; 
     156                [_names addObjectsFromArray:dirs]; 
    152157                divider = [_names count]; 
    153                 [_names addObjectsFromArray:[metaData predicatedFiles:predicate]]; 
     158                NSArray *files = [metaData predicatedFiles:predicate]; 
     159                [_names addObjectsFromArray:files]; 
     160                [_names addObject:@"< Scan for new files >"]; 
     161                dirCount = [dirs count]; 
     162                fileCount = [files count]; 
    154163        } 
    155164        int i=0, count=[_names count]; 
     
    163172        if(divider && divider != [_names count]) 
    164173                [list addDividerAtIndex:divider]; 
     174        if(predicate != NULL) 
     175                [list addDividerAtIndex:[_names count] -1]; 
    165176        [[self scene] renderScene]; 
    166177} 
     
    302313        BRAdornedMenuItemLayer * result = nil; 
    303314        BOOL watched = NO; 
    304         BOOL favorite = NO
    305         if(row < [[metaData directories] count]
     315        BOOL favorite = NO
     316        if(row < dirCount
    306317        { 
    307318                result = [BRAdornedMenuItemLayer adornedFolderMenuItemWithScene: [self scene]] ; 
     
    311322                        favorite = [meta favoriteForPredicate:predicate]; 
    312323        } 
    313         else 
     324        else if(row < dirCount + fileCount) 
    314325        { 
    315326                result = [BRAdornedMenuItemLayer adornedMenuItemWithScene: [self scene]] ; 
     
    321332                        favorite = [meta favorite] ; 
    322333                } 
     334        } 
     335        else 
     336        { 
     337                result = [BRAdornedMenuItemLayer adornedMenuItemWithScene:[self scene]]; 
     338                [result setLeftIcon:[[SapphireTheme sharedTheme] gearGemForScene:[self scene]]]; 
     339                watched = YES; 
    323340        } 
    324341        if(!watched) 
     
    388405        } 
    389406         
    390         if([[metaData directories] containsObject:name]
     407        if(row < dirCount
    391408        { 
    392409                id controller = [[SapphireBrowser alloc] initWithScene:[self scene] metaData:[metaData metaDataForDirectory:name] predicate:predicate]; 
     
    396413                [controller release]; 
    397414        } 
    398         else 
     415        else if(row < dirCount + fileCount) 
    399416        { 
    400417                BRVideoPlayerController *controller = [[BRVideoPlayerController alloc] initWithScene:[self scene]]; 
     
    436453                [controller release]; 
    437454        } 
    438 
    439  
    440 - (id<BRMediaPreviewController>) previewControllerForItem: (long) item 
     455        else 
     456        { 
     457                [metaData scanForNewFiles]; 
     458                [self reloadDirectoryContents]; 
     459        } 
     460
     461 
     462- (id<BRMediaPreviewController>) previewControllerForItem: (long) row 
    441463{ 
    442464    // If subclassing BRMediaMenuController, this function is called when the selection cursor 
    443465    // passes over an item. 
    444         if(item >= [_names count]) 
     466        if(row >= [_names count]) 
    445467                return nil; 
    446         NSString *name = [_names objectAtIndex:item]; 
    447         if([[metaData files] containsObject:name]
     468        NSString *name = [_names objectAtIndex:row]; 
     469        if(row >= dirCount && row < dirCount + fileCount
    448470        { 
    449471                SapphireFileMetaData *fileMeta = [metaData metaDataForFile:name]; 
  • trunk/SapphireMetaData.h

    r57 r74  
    5353        NSTimer                         *importTimer; 
    5454        NSMutableArray          *importArray; 
     55        BOOL                            scannedDirectory; 
    5556} 
    5657 
     
    7374- (SapphireMetaData *)metaDataForSubPath:(NSString *)path; 
    7475- (NSArray *)subFileMetas; 
     76- (void)scanForNewFiles; 
    7577 
    7678- (BOOL)watchedForPredicate:(SapphirePredicate *)predicate; 
  • trunk/SapphireMetaData.m

    r71 r74  
    233233        if([importArray count]) 
    234234                [self writeMetaData]; 
     235        scannedDirectory = YES; 
    235236} 
    236237 
     
    247248- (BOOL)hasPredicatedFiles:(SapphirePredicate *)predicate 
    248249{ 
    249         NSEnumerator *fileEnum = [files objectEnumerator]; 
     250        NSArray *filesToScan = files; 
     251        if(!scannedDirectory) 
     252                filesToScan = [metaFiles allKeys]; 
     253        NSEnumerator *fileEnum = [filesToScan objectEnumerator]; 
    250254        NSString *file = nil; 
    251255        while((file = [fileEnum nextObject]) != nil) 
     
    267271- (BOOL)hasPredicatedDirectories:(SapphirePredicate *)predicate 
    268272{ 
    269         NSEnumerator *directoryEnum = [directories objectEnumerator]; 
     273        NSArray *directoriesToScan = directories; 
     274        if(!scannedDirectory) 
     275                directoriesToScan = [metaDirs allKeys]; 
     276        NSEnumerator *directoryEnum = [directoriesToScan objectEnumerator]; 
    270277        NSString *directory = nil; 
    271278        while((directory = [directoryEnum nextObject]) != nil) 
    272279        { 
    273280                SapphireDirectoryMetaData *meta = [self metaDataForDirectory:directory]; 
    274                 [meta reloadDirectoryContents]; 
    275281                 
    276282                if([meta hasPredicatedFiles:predicate] || [meta hasPredicatedDirectories:predicate]) 
     
    283289{ 
    284290        NSMutableArray *ret = [NSMutableArray array]; 
    285         NSEnumerator *fileEnum = [files objectEnumerator]; 
     291        NSArray *filesToScan = files; 
     292        if(!scannedDirectory) 
     293                filesToScan = [metaFiles allKeys]; 
     294        NSEnumerator *fileEnum = [filesToScan objectEnumerator]; 
    286295        NSString *file = nil; 
    287296        while((file = [fileEnum nextObject]) != nil) 
     
    303312{ 
    304313        NSMutableArray *ret = [NSMutableArray array]; 
    305         NSEnumerator *directoryEnum = [directories objectEnumerator]; 
     314        NSArray *directoriesToScan = directories; 
     315        if(!scannedDirectory) 
     316                directoriesToScan = [metaDirs allKeys]; 
     317        NSEnumerator *directoryEnum = [directoriesToScan objectEnumerator]; 
    306318        NSString *directory = nil; 
    307319        while((directory = [directoryEnum nextObject]) != nil) 
    308320        { 
    309321                SapphireDirectoryMetaData *meta = [self metaDataForDirectory:directory]; 
    310                 [meta reloadDirectoryContents]; 
    311322 
    312323                if([meta hasPredicatedFiles:predicate] || [meta hasPredicatedDirectories:predicate]) 
     
    486497} 
    487498 
     499- (void)scanForNewFiles 
     500{ 
     501        NSEnumerator *dirEnum = [directories objectEnumerator]; 
     502        NSString *dir = nil; 
     503        while((dir = [dirEnum nextObject]) != nil) 
     504        { 
     505                SapphireDirectoryMetaData *dirMeta = [self metaDataForDirectory:dir]; 
     506                if(dirMeta != nil) 
     507                        [dirMeta scanForNewFiles]; 
     508        } 
     509        NSEnumerator *fileEnum = [files objectEnumerator]; 
     510        NSString *file = nil; 
     511        while((file = [fileEnum nextObject]) != nil) 
     512                [self metaDataForFile:file]; 
     513} 
     514 
    488515- (void)setupFiles:(NSArray * *)filesToScan andDirectories:(NSArray * *)directoriesToScan arraysForPredicate:(SapphirePredicate *)predicate 
    489516{ 
     
    491518        { 
    492519                *filesToScan = [self predicatedFiles:predicate]; 
    493         } 
    494         else if([files count] + [directories count] == 0) 
     520                *directoriesToScan = [self predicatedDirectories:predicate]; 
     521        } 
     522        else if(!scannedDirectory) 
    495523        { 
    496524                //Likely haven't scanned the directory yet, so use cached