Changeset 588

Show
Ignore:
Timestamp:
06/13/2008 03:57:37 PM (4 years ago)
Author:
gbooker
Message:

Changed the filtering method and the check for unwatched/favorite. This new system is far more powerful, and should actually be faster too. Implemented a bit more caching to help speed as well.

Location:
branches/CoreData/SapphireFrappliance
Files:
1 added
13 modified

Legend:

Unmodified
Added
Removed
  • branches/CoreData/SapphireFrappliance/Browser/SapphireBrowser.m

    r585 r588  
    310310                result = [SapphireFrontRowCompat textMenuItemForScene:scene folder:YES]; 
    311311                id <SapphireDirectory> meta = [metaData metaDataForDirectory:name]; 
    312                 watched = [meta watchedValue]; 
    313                 favorite = [meta favoriteValue]; 
     312                watched = ![meta containsFileMatchingPredicate:[SapphireApplianceController unwatchedPredicate]]; 
     313                favorite = [meta containsFileMatchingPredicate:[SapphireApplianceController favoritePredicate]]; 
    314314        } 
    315315        /*Check for a file next*/ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCategoryDirectory.m

    r585 r588  
    1414        cachedDirs = [[NSMutableArray alloc] init]; 
    1515        cachedMetaFiles = [[NSMutableArray alloc] init]; 
    16          
     16        Basic_Directory_Function_Inits 
     17 
    1718        return self; 
    1819} 
     
    9091        NSMutableArray *dirs = [[[self valueForKeyPath:dirsKey] allObjects] mutableCopy]; 
    9192        if(filterPredicate != nil) 
    92                 [dirs filterUsingPredicate:filterPredicate]; 
     93        { 
     94                int i, count = [dirs count]; 
     95                for(i=0; i<count; i++) 
     96                { 
     97                        id <SapphireDirectory> dir = [dirs objectAtIndex:i]; 
     98                        if(![dir containsFileMatchingFilterPredicate:filterPredicate]) 
     99                        { 
     100                                [dirs removeObjectAtIndex:i]; 
     101                                i--; 
     102                                count--; 
     103                        } 
     104                } 
     105        } 
    93106 
    94107        [cachedMetaFiles setArray:dirs]; 
     
    193206} 
    194207 
    195 - (void)invokeRecursivelyOnFiles:(NSInvocation *)fileInv 
     208- (void)invokeOnAllFiles:(NSInvocation *)fileInv 
    196209{ 
    197210        NSArray *files = cachedMetaFiles; 
     
    214227        if(fetchPred != nil) 
    215228        { 
    216                 NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, nil]]; 
     229                NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, filterPredicate, nil]]; 
    217230                return entityExists(SapphireFileMetaDataName, [self managedObjectContext], final);       
    218231        } 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m

    r586 r588  
    8080} 
    8181 
     82- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context 
     83{ 
     84        self = [super initWithEntity:entity insertIntoManagedObjectContext:context]; 
     85        if(self == nil) 
     86                return self; 
     87         
     88        Basic_Directory_Function_Inits 
     89         
     90        return self; 
     91}        
     92 
    8293- (void) dealloc 
    8394{ 
     
    212223        NSArray *candidates = [[self.metaDirsSet allObjects] filteredArrayUsingPredicate:pred]; 
    213224        if([candidates count]) 
    214                 return [candidates objectAtIndex:0]; 
    215          
    216         candidates  = [[self.linkedDirsSet allObjects] filteredArrayUsingPredicate:pred]; 
    217         if([candidates count]) 
    218                 return ((SapphireDirectorySymLink *)[candidates objectAtIndex:0]).directory; 
     225                ret = [candidates objectAtIndex:0]; 
     226        else 
     227        { 
     228                candidates  = [[self.linkedDirsSet allObjects] filteredArrayUsingPredicate:pred]; 
     229                if([candidates count]) 
     230                        ret = ((SapphireDirectorySymLink *)[candidates objectAtIndex:0]).directory;              
     231        } 
     232        [ret setFilterPredicate:filterPredicate]; 
    219233         
    220234        return nil; 
     
    387401                for(i=0; i<count; i++) 
    388402                { 
    389                         if(![[allDirs objectAtIndex:i] checkPredicate:filterPredicate]) 
     403                        if(![[allDirs objectAtIndex:i] containsFileMatchingFilterPredicate:filterPredicate]) 
    390404                        { 
    391405                                [allDirs removeObjectAtIndex:i]; 
     
    402416                { 
    403417                        SapphireDirectorySymLink *link = [linkedDirsObjects objectAtIndex:i]; 
    404                         if([[link directory] checkPredicate:filterPredicate]) 
     418                        if([[link directory] containsFileMatchingFilterPredicate:filterPredicate]) 
    405419                                [allDirs addObject:link]; 
    406420                } 
     
    442456} 
    443457 
    444 /*Function to invoke a command on all files in a subtree*/ 
    445 - (void)invokeRecursivelyOnFiles:(NSInvocation *)fileInv 
     458- (void)invokeOnAllFiles:(NSInvocation *)fileInv 
    446459{ 
    447460        NSManagedObjectContext *moc = [self managedObjectContext]; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMarkMenu.m

    r575 r588  
    403403                { 
    404404                        case COMMAND_MARK_WATCHED: 
    405                                 [dirMeta setWatchedValue:YES]; 
     405                                setSubtreeToWatched(dirMeta, YES); 
    406406                                break; 
    407407                        case COMMAND_MARK_UNWATCHED: 
    408                                 [dirMeta setWatchedValue:YES]; 
     408                                setSubtreeToWatched(dirMeta, NO); 
    409409                                break; 
    410410                        case COMMAND_MARK_FAVORITE: 
    411                                 [dirMeta setFavoriteValue:YES]; 
     411                                setSubtreeToFavorite(dirMeta, YES); 
    412412                                break; 
    413413                        case COMMAND_MARK_NOT_FAVORITE: 
    414                                 [dirMeta setFavoriteValue:NO]; 
     414                                setSubtreeToFavorite(dirMeta, NO); 
    415415                                break; 
    416416                        case COMMAND_MARK_TO_REFETCH_TV: 
    417                                 [dirMeta setToReimportFromMask:IMPORT_TYPE_TVSHOW_MASK]; 
     417                                setSubtreeToReimportFromMask(dirMeta, IMPORT_TYPE_TVSHOW_MASK); 
    418418                                break; 
    419419                        case COMMAND_MARK_TO_REFETCH_MOVIE: 
    420                                 [dirMeta setToReimportFromMask:IMPORT_TYPE_MOVIE_MASK]; 
     420                                setSubtreeToReimportFromMask(dirMeta, IMPORT_TYPE_MOVIE_MASK); 
    421421                                break; 
    422422                        case COMMAND_MARK_TO_DELETE_METADATA: 
    423                                 [dirMeta clearMetaData]; 
     423                                setSubtreeToClearMetaData(dirMeta); 
    424424                                break; 
    425425                        case COMMAND_TOGGLE_SKIP: 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireBasicDirectoryFunctions.h

    r585 r588  
    2323 
    2424#ifndef RECURSIVE_FUNCTIONS_ALREADY_DEFINED 
    25 /*Function to invoke a command on all files in a subtree*/ 
    26 - (void)invokeRecursivelyOnFiles:(NSInvocation *)fileInv 
     25- (void)invokeOnAllFiles:(NSInvocation *)fileInv 
    2726{ 
    2827        NSArray *files = [self metaFiles]; 
     
    4342        if(fetchPred != nil) 
    4443        { 
    45                 NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, nil]]; 
     44                NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, filterPredicate, nil]]; 
    4645                return entityExists(SapphireFileMetaDataName, [self managedObjectContext], final);       
    4746        } 
     
    6160        { 
    6261                id <SapphireDirectory> dir = [self metaDataForDirectory:[dirs objectAtIndex:i]]; 
    63                 if(dir != nil && [dir checkPredicate:pred]) 
     62                if(dir != nil && [dir containsFileMatchingPredicate:pred]) 
    6463                        return YES; 
    6564        } 
     
    8685#endif 
    8786 
    88 - (BOOL)internalWatchedValue 
     87- (BOOL)containsFileMatchingPredicate:(NSPredicate *)pred 
    8988{ 
    90         return ![self checkPredicate:[SapphireApplianceController unwatchedPredicate]]; 
    91 } 
    92  
    93 - (BOOL)watchedValue 
    94 { 
    95         if(watchedCache != nil) 
    96                 return [watchedCache boolValue]; 
    97         BOOL ret = [self internalWatchedValue]; 
    98         watchedCache = [[NSNumber alloc] initWithBool:ret]; 
     89        id key = filterPredicate; 
     90        if(filterPredicate == nil) 
     91                key = [NSNull null]; 
     92        NSMutableDictionary *cacheForFilter = [predicateCache objectForKey:key]; 
     93        if(cacheForFilter == nil) 
     94        { 
     95                cacheForFilter = [[NSMutableDictionary alloc] init]; 
     96                [predicateCache setObject:cacheForFilter forKey:key]; 
     97                [cacheForFilter release]; 
     98        } 
     99        NSNumber *cache = [cacheForFilter objectForKey:pred]; 
     100        if(cache != nil) 
     101                return [cache boolValue]; 
     102         
     103        BOOL ret = [self checkPredicate:pred]; 
     104        [cacheForFilter setObject:[NSNumber numberWithBool:ret] forKey:pred]; 
    99105        return ret; 
    100106} 
    101107 
    102 - (NSNumber *)watched 
     108- (BOOL)containsFileMatchingFilterPredicate:(NSPredicate *)pred 
    103109{ 
    104         if(watchedCache != nil) 
    105                 return watchedCache; 
    106         NSNumber *ret = [NSNumber numberWithBool:[self internalWatchedValue]]; 
    107         watchedCache = [ret retain]; 
     110        NSPredicate *tpred = filterPredicate; 
     111        filterPredicate = nil; 
     112        BOOL ret = [self checkPredicate:pred]; 
     113        filterPredicate = tpred; 
     114         
    108115        return ret; 
    109 } 
    110  
    111 - (void)setWatchedValue:(BOOL)watched 
    112 { 
    113         [self setWatched:[NSNumber numberWithBool:watched]]; 
    114 } 
    115  
    116 - (void)setWatched:(NSNumber *)watched 
    117 { 
    118         SEL select = @selector(setWatched:); 
    119         NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[SapphireFileMetaData class] instanceMethodSignatureForSelector:select]]; 
    120         [inv setSelector:select]; 
    121         [inv setArgument:&watched atIndex:2]; 
    122         [self invokeRecursivelyOnFiles:inv]; 
    123         [SapphireMetaDataSupport save:[self managedObjectContext]]; 
    124         [watchedCache release]; 
    125         watchedCache = [watched retain]; 
    126 } 
    127  
    128 - (BOOL)internalFavoriteValue 
    129 { 
    130         return [self checkPredicate:[SapphireApplianceController favoritePredicate]]; 
    131 } 
    132  
    133 - (BOOL)favoriteValue 
    134 { 
    135         if(favoriteCache != nil) 
    136                 return [favoriteCache boolValue]; 
    137         BOOL ret = [self internalFavoriteValue]; 
    138         favoriteCache = [[NSNumber alloc] initWithBool:ret]; 
    139         return ret; 
    140 } 
    141  
    142 - (NSNumber *)favorite 
    143 { 
    144         if(favoriteCache != nil) 
    145                 return favoriteCache; 
    146         NSNumber *ret = [NSNumber numberWithBool:[self internalFavoriteValue]]; 
    147         favoriteCache = [ret retain]; 
    148         return ret; 
    149 } 
    150  
    151 - (void)setFavoriteValue:(BOOL)favorite 
    152 { 
    153         [self setFavorite:[NSNumber numberWithBool:favorite]]; 
    154 } 
    155  
    156 - (void)setFavorite:(NSNumber *)favorite 
    157 { 
    158         SEL select = @selector(setFavorite:); 
    159         NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[SapphireFileMetaData class] instanceMethodSignatureForSelector:select]]; 
    160         [inv setSelector:select]; 
    161         [inv setArgument:&favorite atIndex:2]; 
    162         [self invokeRecursivelyOnFiles:inv]; 
    163         [SapphireMetaDataSupport save:[self managedObjectContext]]; 
    164         [favoriteCache release]; 
    165         favoriteCache = [favorite retain]; 
    166116} 
    167117 
    168118- (void)clearPredicateCache 
    169119{ 
    170         BOOL report = NO; 
    171120        id <SapphireDirectory> myParentDir = [self parentDirectory]; 
     121        [predicateCache removeAllObjects]; 
     122/*      BOOL report = NO; 
    172123        if(watchedCache != nil) 
    173124        { 
     
    188139                        report = YES; 
    189140        } 
    190         if(report) 
     141        if(report)*/ 
    191142                [myParentDir clearPredicateCache]; 
    192143} 
     
    196147        [filterPredicate release]; 
    197148        filterPredicate = [predicate retain]; 
    198         [self clearPredicateCache]; 
    199149} 
    200150 
     
    234184        NSNumber *num = [NSNumber numberWithInt:mask]; 
    235185        [inv setArgument:&num atIndex:2]; 
    236         [self invokeRecursivelyOnFiles:inv]; 
     186        [self invokeOnAllFiles:inv]; 
    237187        [SapphireMetaDataSupport save:[self managedObjectContext]]; 
    238188} 
     
    243193        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[SapphireFileMetaData class] instanceMethodSignatureForSelector:select]]; 
    244194        [inv setSelector:select]; 
    245         [self invokeRecursivelyOnFiles:inv]; 
     195        [self invokeOnAllFiles:inv]; 
    246196        [SapphireMetaDataSupport save:[self managedObjectContext]]; 
    247197} 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireBasicDirectoryFunctionsDefines.h

    r575 r588  
    2626        NSPredicate                                             *filterPredicate;               /*!< @brief The filter to apply to this directory*/\ 
    2727        id <SapphireMetaDataDelegate>   delegate;                               /*!< @brief The delegate to inform of changes*/\ 
    28         NSNumber                                                *watchedCache;                  /*!< @brief Cached value of watched predicate*/\ 
    29         NSNumber                                                *favoriteCache;                 /*!< @brief Cached value of favorite predicate*/\ 
     28        NSMutableDictionary                             *predicateCache;                /*!< @brief Cached value of watched, favorite, and other predicates*/\ 
     29 
     30 
     31#define Basic_Directory_Function_Inits \ 
     32        predicateCache = [[NSMutableDictionary alloc] init];\ 
     33 
    3034 
    3135#define Basic_Directory_Function_Deallocs \ 
    3236        [filterPredicate release];\ 
    3337        [delegate release];\ 
    34         [watchedCache release];\ 
    35         [favoriteCache release]; 
     38        [predicateCache release];\ 
     39 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireDirectory.h

    r585 r588  
    175175 
    176176/*! 
    177  * @brief Returns if directory contains any unwatched files 
    178  * 
    179  * @return YES if all files are watched, NO otherwise 
    180  */ 
    181 - (BOOL)watchedValue; 
    182  
    183 /*! 
    184  * @brief Returns if directory contains any unwatched files 
    185  * 
    186  * @return an NSNumber with a YES if all files are watched, NO otherwise 
    187  */ 
    188 - (NSNumber *)watched; 
    189  
    190 /*! 
    191  * @brief Set subtree as watched with restriction as to predicate.  Does not follow symlinks 
    192  * 
    193  * @param watched YES if set to watched, NO if set to unwatched 
    194  */ 
    195 - (void)setWatchedValue:(BOOL)watched; 
    196  
    197 /*! 
    198  * @brief Set subtree as watched with restriction as to predicate.  Does not follow symlinks 
    199  * 
    200  * @param watched An NSNumber that is YES if set to watched, NO if set to unwatched 
    201  */ 
    202 - (void)setWatched:(NSNumber *)watched; 
    203  
    204 /*! 
    205  * @brief Returns if directory contains any favorite files 
    206  * 
    207  * @return YES if any files are favorite, NO otherwise 
    208  */ 
    209 - (BOOL)favoriteValue; 
    210  
    211 /*! 
    212  * @brief Returns if directory contains any favorite files 
    213  * 
    214  * @return an NSNumber with a YES if any files are favorite, NO otherwise 
    215  */ 
    216 - (NSNumber *)favorite; 
    217  
    218 /*! 
    219  * @brief Set subtree as favorite with restriction as to predicate.  Does not follow symlinks 
    220  * 
    221  * @param favorite YES if set to favorite, NO if set to not-favorite 
    222  */ 
    223 - (void)setFavoriteValue:(BOOL)favorite; 
    224  
    225 /*! 
    226  * @brief Set subtree as favorite with restriction as to predicate.  Does not follow symlinks 
    227  * 
    228  * @param favorite An NSNumber that is YES if set to favorite, NO if set to not-favorite 
    229  */ 
    230 - (void)setFavorite:(NSNumber *)favorite; 
    231  
    232 /*! 
    233177 * @brief Check to see if any filtered files match the predicate 
    234178 * 
    235179 * @param pred The predicate to check 
    236180 */ 
    237 - (BOOL)checkPredicate:(NSPredicate *)pred; 
    238  
    239 /*! 
    240  * @brief Set subtree to re-import from the specified source with restriction as to predicate.  Does not follow symlinks 
    241  * 
    242  * @param source The source on which to re-import 
    243  */ 
    244 - (void)setToReimportFromMask:(int)mask; 
    245  
    246 /*! 
    247  * @brief Clear metadata for an entire subtree with restriction as to predicate.  Does not follow symlinks 
    248  */ 
    249 - (void)clearMetaData; 
     181- (BOOL)containsFileMatchingPredicate:(NSPredicate *)pred; 
     182 
     183/*! 
     184 * @brief Checks to see if directory contains any files with filter 
     185 * 
     186 * @param filter The filter predicate to test 
     187 */ 
     188- (BOOL)containsFileMatchingFilterPredicate:(NSPredicate *)pred; 
     189 
     190/*! 
     191 * @brief Invoke a command on all files contained within this directory within filter 
     192 * 
     193 * @param fileInv The invokation to invoke 
     194 */ 
     195- (void)invokeOnAllFiles:(NSInvocation *)fileInv; 
    250196 
    251197/*! 
     
    305251- (void)clearPredicateCache; 
    306252 
    307 @end 
     253/*! 
     254 * @brief The managed object context 
     255 * 
     256 * @return The managed object context for the metadata 
     257 */ 
     258- (NSManagedObjectContext *)managedObjectContext; 
     259 
     260@end 
     261 
     262/*! 
     263 * @brief Set subtree to watched or unwatched with restriction as to predicate.  Does not follow symlinks 
     264 * 
     265 * @param dir The subtree 
     266 * @param watched YES if watched, NO otherwise 
     267 */ 
     268void setSubtreeToWatched(id <SapphireDirectory> dir, BOOL watched); 
     269 
     270/*! 
     271 * @brief Set subtree to favorite or not favorite with restriction as to predicate.  Does not follow symlinks 
     272 * 
     273 * @param dir The subtree 
     274 * @param favorite YES if favorite, NO otherwise 
     275 */ 
     276void setSubtreeToFavorite(id <SapphireDirectory> dir, BOOL favorite); 
     277 
     278/*! 
     279 * @brief Set subtree to re-import from the specified source with restriction as to predicate.  Does not follow symlinks 
     280 * 
     281 * @param dir The subtree 
     282 * @param mask The source(s) on which to re-import 
     283 */ 
     284void setSubtreeToReimportFromMask(id <SapphireDirectory> dir, int mask); 
     285 
     286/*! 
     287 * @brief Clear metadata for an entire subtree with restriction as to predicate.  Does not follow symlinks 
     288 */ 
     289void setSubtreeToClearMetaData(id <SapphireDirectory> dir); 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireEntityDirectory.m

    r585 r588  
    3434        moc = [context retain]; 
    3535        nameKey = [@"name" retain]; 
     36        Basic_Directory_Function_Inits 
    3637         
    3738        return self; 
     
    102103        { 
    103104                id obj = [objects objectAtIndex:i]; 
    104                 if(filterPredicate != nil && ![obj checkPredicate:filterPredicate]) 
     105                if(filterPredicate != nil && ![obj containsFileMatchingFilterPredicate:filterPredicate]) 
    105106                        continue; 
    106107                NSString *key = [obj valueForKey:nameKey]; 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireFilteredFileDirectory.m

    r585 r588  
    3333        moc = [context retain]; 
    3434        fetchPredicate = [pred retain]; 
     35        Basic_Directory_Function_Inits 
    3536         
    3637        return self; 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireMovieCategories.m

    r585 r588  
    4747        [directors release]; 
    4848        [genres release]; 
    49          
     49        Basic_Directory_Function_Inits 
     50 
    5051        return self; 
    5152} 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireMovieDirectory.m

    r585 r588  
    7979        [oscar setPath:@"@MOVIES/Academy Award Winning"]; 
    8080        [oscar setNameKey:@"movie.title"]; 
    81          
     81        Basic_Directory_Function_Inits 
     82 
    8283        return self; 
    8384} 
     
    105106        for(i=0; i<count; i++) 
    106107        { 
    107                 if([[subDirs objectAtIndex:i] checkPredicate:filterPredicate]) 
     108                if([[subDirs objectAtIndex:i] containsFileMatchingFilterPredicate:filterPredicate]) 
    108109                        [ret addObject:[names objectAtIndex:i]]; 
    109110        } 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireObjectDirectory.m

    r585 r588  
    3434        value = [key retain]; 
    3535        cachedDirs = [[NSArray alloc] init]; 
    36          
     36        Basic_Directory_Function_Inits 
     37 
    3738        return self; 
    3839} 
  • branches/CoreData/SapphireFrappliance/Sapphire.xcodeproj/project.pbxproj

    r585 r588  
    7070                F535C7440DF2353900716DA9 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F535C7420DF2353900716DA9 /* CoreData.framework */; }; 
    7171                F541CBF50D9C2D19002F9278 /* SapphireRadioSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = F541CBF40D9C2D19002F9278 /* SapphireRadioSetting.m */; }; 
     72                F544602A0E030D5100311C03 /* SapphireDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = F54460290E030D5100311C03 /* SapphireDirectory.m */; }; 
    7273                F565A1FD0C5BE81F00AE7110 /* SapphireAudioPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F565A1FC0C5BE81F00AE7110 /* SapphireAudioPlayer.m */; }; 
    7374                F565A34A0C5BF69D00AE7110 /* SapphireAudioMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = F565A3490C5BF69D00AE7110 /* SapphireAudioMedia.m */; }; 
     
    340341                F541CBF30D9C2D19002F9278 /* SapphireRadioSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SapphireRadioSetting.h; sourceTree = "<group>"; }; 
    341342                F541CBF40D9C2D19002F9278 /* SapphireRadioSetting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SapphireRadioSetting.m; sourceTree = "<group>"; }; 
     343                F54460290E030D5100311C03 /* SapphireDirectory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SapphireDirectory.m; sourceTree = "<group>"; }; 
    342344                F565A1FB0C5BE81F00AE7110 /* SapphireAudioPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SapphireAudioPlayer.h; sourceTree = "<group>"; }; 
    343345                F565A1FC0C5BE81F00AE7110 /* SapphireAudioPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SapphireAudioPlayer.m; sourceTree = "<group>"; }; 
     
    894896                                F5241ECB0DFDBD0200A0083F /* SapphireBasicDirectoryFunctionsImports.h */, 
    895897                                F5C55EC70DE90F7000661563 /* SapphireDirectory.h */, 
     898                                F54460290E030D5100311C03 /* SapphireDirectory.m */, 
    896899                                F52949C90DEB809E004F8F4F /* SapphireEntityDirectory.h */, 
    897900                                F52949CA0DEB809E004F8F4F /* SapphireEntityDirectory.m */, 
     
    12121215                                F59BB9180DF43C3E00EC11A2 /* SapphireMetaDataUpgrading.m in Sources */, 
    12131216                                F59BBB1C0DF4E2B900EC11A2 /* SapphireFilteredFileDirectory.m in Sources */, 
     1217                                F544602A0E030D5100311C03 /* SapphireDirectory.m in Sources */, 
    12141218                        ); 
    12151219                        runOnlyForDeploymentPostprocessing = 0;