Changeset 637

Show
Ignore:
Timestamp:
07/17/08 19:46:46 (6 months ago)
Author:
gbooker
Message:

Seems to fetch faster

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m

    r625 r637  
    252252        cachedLookup = [[NSMutableDictionary alloc] init]; 
    253253 
    254         NSSet *fileObjects = self.metaFilesSet; 
     254        NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"parent == %@", self]; 
     255        NSArray *fetchedFiles = doFetchRequest(SapphireFileMetaDataName, moc, fetchPred); 
    255256        NSMutableSet *files; 
    256         if([fileObjects count]) 
    257         { 
    258                 NSSet *fileIds = [fileObjects valueForKey:@"objectID"]; 
    259                 NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", fileIds]; 
    260                 NSArray *fetchedFiles = doFetchRequest(SapphireFileMetaDataName, moc, fetchPred); 
     257        if([fetchedFiles count]) 
    261258                files = [[NSMutableSet alloc] initWithArray:[fetchedFiles valueForKeyPath:@"path.lastPathComponent"]]; 
    262         } 
    263259        else 
    264260                files = [[NSMutableSet alloc] init]; 
    265         NSSet *dirObjects = self.metaDirsSet; 
     261 
     262        NSArray *fetchedDirs = doFetchRequest(SapphireDirectoryMetaDataName, moc, fetchPred); 
    266263        NSMutableSet *dirs; 
    267         if([dirObjects count]) 
    268         { 
    269                 NSSet *dirIds = [dirObjects valueForKey:@"objectID"]; 
    270                 NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", dirIds]; 
    271                 NSArray *fetchedDirs = doFetchRequest(SapphireDirectoryMetaDataName, moc, fetchPred); 
     264        if([fetchedDirs count]) 
    272265                dirs = [[NSMutableSet alloc] initWithArray:[fetchedDirs valueForKeyPath:@"path.lastPathComponent"]]; 
    273         } 
    274266        else 
    275267                dirs = [[NSMutableSet alloc] init]; 
     268 
    276269        //These are rare; so don't need to prefetch 
    277270        NSMutableSet *linkedFiles = [[self.linkedFilesSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; 
     
    401394        [SapphireMetaDataSupport save:moc]; 
    402395         
    403         NSMutableArray *allFiles = [[fileObjects allObjects] mutableCopy]; 
     396        NSArray *fileObjects = fetchedFiles = doFetchRequest(SapphireFileMetaDataName, moc, fetchPred); 
     397        NSMutableArray *allFiles = [fileObjects mutableCopy]; 
    404398        [allFiles addObjectsFromArray:[self.linkedFilesSet allObjects]]; 
    405399        if(filterPredicate != nil) 
     400        { 
    406401                [allFiles filterUsingPredicate:filterPredicate]; 
    407         if([fileObjects count]) 
    408         { 
    409                 NSSet *allEps = [fileObjects valueForKeyPath:@"tvEpisode.objectID"]; 
    410                 if([allEps count]) 
    411                 { 
    412                         NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allEps]; 
    413                         NSArray *episodes = doFetchRequest(SapphireEpisodeName, moc, fetchPred); 
    414                         if([episodes count]) 
    415                         { 
    416                                 fetchPred = [NSPredicate predicateWithFormat:@"episode IN %@", episodes]; 
    417                                 doFetchRequest(SapphireSubEpisodeName, moc, fetchPred); 
    418                         } 
    419                 } 
    420                 NSSet *allMovies = [fileObjects valueForKeyPath:@"movie.objectID"]; 
    421                 if([allMovies count]) 
    422                 { 
    423                         NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allMovies]; 
    424                         doFetchRequest(SapphireMovieName, moc, fetchPred); 
    425                 } 
     402                //nil predicate means we are directory scanning, so don't prefetch this 
     403                if([fileObjects count]) 
     404                { 
     405                        NSSet *files = [NSSet setWithArray:fileObjects]; 
     406                        NSSet *allEps = [files valueForKeyPath:@"tvEpisode.objectID"]; 
     407                        if([allEps count]) 
     408                        { 
     409                                NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allEps]; 
     410                                NSArray *episodes = doFetchRequest(SapphireEpisodeName, moc, fetchPred); 
     411                                if([episodes count]) 
     412                                { 
     413                                        fetchPred = [NSPredicate predicateWithFormat:@"episode IN %@", episodes]; 
     414                                        doFetchRequest(SapphireSubEpisodeName, moc, fetchPred); 
     415                                } 
     416                        } 
     417                        NSSet *allMovies = [files valueForKeyPath:@"movie.objectID"]; 
     418                        if([allMovies count]) 
     419                        { 
     420                                NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allMovies]; 
     421                                doFetchRequest(SapphireMovieName, moc, fetchPred); 
     422                        } 
     423                }                
    426424        } 
    427425        [allFiles sortUsingFunction:fileAndLinkEpisodeCompare context:nil];