Changeset 623
- Timestamp:
- 07/05/08 14:32:17 (6 months ago)
- Files:
-
- branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCast.m (modified) (1 diff)
- branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCategoryDirectory.m (modified) (3 diffs)
- branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirector.m (modified) (1 diff)
- branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m (modified) (6 diffs)
- branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireGenre.m (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCast.m
r599 r623 30 30 } 31 31 32 - (NS String *)metaFilesValue;32 - (NSPredicate *)metaFileFetchPredicate 33 33 { 34 return @"movies.@distinctUnionOfSets.files"; 34 NSArray *movieIds = [self.moviesSet valueForKey:@"objectID"]; 35 return [NSPredicate predicateWithFormat:@"movie IN %@", movieIds]; 35 36 } 36 37 branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCategoryDirectory.m
r622 r623 46 46 } 47 47 48 - (NSString *)metaFilesValue;49 {50 return nil;51 }52 53 48 - (NSPredicate *)metaFileFetchPredicate 54 49 { … … 68 63 - (NSMutableArray *)internalFileFetch 69 64 { 70 NSString *metaFilesKey = [self metaFilesValue];71 if(metaFilesKey != nil)72 {73 //This is the slow method74 NSMutableArray *files = [[[self valueForKeyPath:metaFilesKey] allObjects] mutableCopy];75 if(filterPredicate != nil)76 [files filterUsingPredicate:filterPredicate];77 78 [cachedMetaFiles setArray:files];79 return [files autorelease];80 }81 65 NSPredicate *fetchPredicate = [self metaFileFetchPredicate]; 82 66 if(fetchPredicate == nil) … … 234 218 { 235 219 NSPredicate *fetchPred = [self metaFileFetchPredicate]; 236 if(fetchPred != nil) 237 { 238 NSPredicate *final; 239 if(pred == nil) 240 final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:fetchPred, filterPredicate, nil]]; 241 else 242 final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, filterPredicate, nil]]; 243 return entityExists(SapphireFileMetaDataName, [self managedObjectContext], final); 244 } 245 246 NSArray *files = cachedMetaFiles; 247 if(![files count]) 248 files = [self internalFileFetch]; 249 int i, count = [files count]; 250 for(i=0; i<count; i++) 251 if([pred evaluateWithObject:[files objectAtIndex:i]]) 252 return YES; 253 254 return NO; 220 if(fetchPred == nil) 221 return NO; 222 NSPredicate *final; 223 if(pred == nil) 224 final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:fetchPred, filterPredicate, nil]]; 225 else 226 final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, fetchPred, filterPredicate, nil]]; 227 return entityExists(SapphireFileMetaDataName, [self managedObjectContext], final); 255 228 } 256 229 branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirector.m
r599 r623 29 29 } 30 30 31 - (NS String *)metaFilesValue;31 - (NSPredicate *)metaFileFetchPredicate 32 32 { 33 return @"movies.@distinctUnionOfSets.files"; 33 NSArray *movieIds = [self.moviesSet valueForKey:@"objectID"]; 34 return [NSPredicate predicateWithFormat:@"movie IN %@", movieIds]; 34 35 } 35 36 branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m
r621 r623 8 8 #import "SapphireMetaDataUpgrading.h" 9 9 #import "SapphireBasicDirectoryFunctionsImports.h" 10 #import "SapphireEpisode.h" 11 #import "SapphireSubEpisode.h" 12 #import "SapphireMovie.h" 10 13 11 14 @implementation SapphireDirectoryMetaData … … 249 252 cachedLookup = [[NSMutableDictionary alloc] init]; 250 253 251 NSMutableSet *files = [[self.metaFilesSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; 252 NSMutableSet *dirs = [[self.metaDirsSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; 254 NSSet *fileObjects = self.metaFilesSet; 255 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); 261 files = [[NSMutableSet alloc] initWithArray:[fetchedFiles valueForKeyPath:@"path.lastPathComponent"]]; 262 } 263 else 264 files = [[NSMutableSet alloc] init]; 265 NSSet *dirObjects = self.metaDirsSet; 266 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); 272 dirs = [[NSMutableSet alloc] initWithArray:[fetchedDirs valueForKeyPath:@"path.lastPathComponent"]]; 273 } 274 else 275 dirs = [[NSMutableSet alloc] init]; 276 //These are rare; so don't need to prefetch 253 277 NSMutableSet *linkedFiles = [[self.linkedFilesSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; 254 278 NSMutableSet *linkedDirs = [[self.linkedDirsSet valueForKeyPath:@"path.lastPathComponent"] mutableCopy]; … … 366 390 [SapphireMetaDataSupport save:moc]; 367 391 368 NSMutableArray *allFiles = [[ self.metaFilesSetallObjects] mutableCopy];392 NSMutableArray *allFiles = [[fileObjects allObjects] mutableCopy]; 369 393 [allFiles addObjectsFromArray:[self.linkedFilesSet allObjects]]; 370 394 if(filterPredicate != nil) 371 395 [allFiles filterUsingPredicate:filterPredicate]; 396 if([fileObjects count]) 397 { 398 NSSet *allEps = [fileObjects valueForKeyPath:@"tvEpisode.objectID"]; 399 if([allEps count]) 400 { 401 NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allEps]; 402 NSArray *episodes = doFetchRequest(SapphireEpisodeName, moc, fetchPred); 403 if([episodes count]) 404 { 405 fetchPred = [NSPredicate predicateWithFormat:@"episode IN %@", episodes]; 406 doFetchRequest(SapphireSubEpisodeName, moc, fetchPred); 407 } 408 } 409 NSSet *allMovies = [fileObjects valueForKeyPath:@"movie.objectID"]; 410 if([allMovies count]) 411 { 412 NSPredicate *fetchPred = [NSPredicate predicateWithFormat:@"SELF IN %@", allMovies]; 413 doFetchRequest(SapphireMovieName, moc, fetchPred); 414 } 415 } 372 416 [allFiles sortUsingFunction:fileAndLinkEpisodeCompare context:nil]; 373 417 [cachedFiles release]; … … 430 474 [cachedLookup setObject:dir forKey:name]; 431 475 } 432 [allDirs release]; 476 [allDirs release]; 433 477 [delegate directoryContentsChanged]; 434 478 } … … 551 595 - (void)refreshAllObjects 552 596 { 597 if([self isFault]) 598 return; 553 599 NSManagedObjectContext *moc = [self managedObjectContext]; 554 600 NSEnumerator *objEnum; … … 561 607 objEnum = [self.metaDirsSet objectEnumerator]; 562 608 while((obj = [objEnum nextObject]) != nil) 563 [ moc refreshObject:obj mergeChanges:NO];609 [(SapphireDirectoryMetaData *)obj refreshAllObjects]; 564 610 565 611 objEnum = [self.linkedFilesSet objectEnumerator]; 566 612 while((obj = [objEnum nextObject]) != nil) 567 [moc refreshObject:obj mergeChanges:NO]; 613 { 614 SapphireFileSymLink *link = (SapphireFileSymLink *)obj; 615 if(![link isFault]) 616 [moc refreshObject:link.file mergeChanges:NO]; 617 [moc refreshObject:link mergeChanges:NO]; 618 } 568 619 569 620 objEnum = [self.linkedDirsSet objectEnumerator]; 570 621 while((obj = [objEnum nextObject]) != nil) 571 [moc refreshObject:obj mergeChanges:NO]; 622 { 623 SapphireDirectorySymLink *link = (SapphireDirectorySymLink *)obj; 624 if(![link isFault]) 625 [link.directory refreshAllObjects]; 626 [moc refreshObject:link mergeChanges:NO]; 627 } 572 628 573 629 [moc refreshObject:self mergeChanges:NO]; branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireGenre.m
r599 r623 2 2 #import "CoreDataSupportFunctions.h" 3 3 #import "SapphireFileSorter.h" 4 #import "SapphireMovie.h" 4 5 5 6 @implementation SapphireGenre … … 29 30 } 30 31 31 - (NS String *)metaFilesValue;32 - (NSPredicate *)metaFileFetchPredicate 32 33 { 33 return @"movies.@distinctUnionOfSets.files"; 34 NSArray *movieIds = [self.moviesSet valueForKey:@"objectID"]; 35 return [NSPredicate predicateWithFormat:@"movie IN %@", movieIds]; 34 36 } 35 37
