Changeset 637
- Timestamp:
- 07/17/08 19:46:46 (6 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m
r625 r637 252 252 cachedLookup = [[NSMutableDictionary alloc] init]; 253 253 254 NSSet *fileObjects = self.metaFilesSet; 254 NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"parent == %@", self]; 255 NSArray *fetchedFiles = doFetchRequest(SapphireFileMetaDataName, moc, fetchPred); 255 256 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]) 261 258 files = [[NSMutableSet alloc] initWithArray:[fetchedFiles valueForKeyPath:@"path.lastPathComponent"]]; 262 }263 259 else 264 260 files = [[NSMutableSet alloc] init]; 265 NSSet *dirObjects = self.metaDirsSet; 261 262 NSArray *fetchedDirs = doFetchRequest(SapphireDirectoryMetaDataName, moc, fetchPred); 266 263 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]) 272 265 dirs = [[NSMutableSet alloc] initWithArray:[fetchedDirs valueForKeyPath:@"path.lastPathComponent"]]; 273 }274 266 else 275 267 dirs = [[NSMutableSet alloc] init]; 268 276 269 //These are rare; so don't need to prefetch 277 270 NSMutableSet *linkedFiles = [[self.linkedFilesSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; … … 401 394 [SapphireMetaDataSupport save:moc]; 402 395 403 NSMutableArray *allFiles = [[fileObjects allObjects] mutableCopy]; 396 NSArray *fileObjects = fetchedFiles = doFetchRequest(SapphireFileMetaDataName, moc, fetchPred); 397 NSMutableArray *allFiles = [fileObjects mutableCopy]; 404 398 [allFiles addObjectsFromArray:[self.linkedFilesSet allObjects]]; 405 399 if(filterPredicate != nil) 400 { 406 401 [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 } 426 424 } 427 425 [allFiles sortUsingFunction:fileAndLinkEpisodeCompare context:nil];
