Changeset 622

Show
Ignore:
Timestamp:
07/04/08 22:12:30 (6 months ago)
Author:
gbooker
Message:

Last of the mergeChanges change
Massive optimizations of tv show directories

Files:

Legend:

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

    r609 r622  
    22#import "SapphireBasicDirectoryFunctionsImports.h" 
    33#import "SapphireFileSorter.h" 
     4#import "CoreDataSupportFunctions.h" 
    45 
    56@implementation SapphireCategoryDirectory 
     
    3031} 
    3132 
     33- (NSString *)dirsValueFromFiles 
     34{ 
     35        return nil; 
     36} 
     37 
     38- (NSString *)fileNameValue 
     39{ 
     40        return @"path"; 
     41} 
     42 
     43- (NSString *)dirNameValue 
     44{ 
     45        return nil; 
     46} 
    3247 
    3348- (NSString *)metaFilesValue; 
     
    3651} 
    3752 
    38 - (NSString *)dirsValueFromFiles 
    39 { 
    40         return nil; 
    41 } 
    42  
    43 - (NSString *)fileNameValue 
    44 { 
    45         return @"path"; 
    46 } 
    47  
    48 - (NSString *)dirNameValue 
    49 { 
    50         return nil; 
    51 } 
    52  
    5353- (NSPredicate *)metaFileFetchPredicate 
    5454{ 
     
    6969{ 
    7070        NSString *metaFilesKey = [self metaFilesValue]; 
    71         if(metaFilesKey == nil) 
     71        if(metaFilesKey != nil) 
     72        { 
     73                //This is the slow method 
     74                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        NSPredicate *fetchPredicate = [self metaFileFetchPredicate]; 
     82        if(fetchPredicate == nil) 
    7283                return nil; 
    7384         
    74         NSMutableArray *files = [[[self valueForKeyPath:metaFilesKey] allObjects] mutableCopy]
     85        NSPredicate *combPredicate
    7586        if(filterPredicate != nil) 
    76                 [files filterUsingPredicate:filterPredicate]; 
     87                combPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:fetchPredicate, filterPredicate, nil]]; 
     88        else 
     89                combPredicate = fetchPredicate; 
     90         
     91        NSMutableArray *files = [doFetchRequest(SapphireFileMetaDataName, [self managedObjectContext], combPredicate) mutableCopy]; 
    7792         
    7893        [cachedMetaFiles setArray:files]; 
     
    85100} 
    86101 
    87 - (NSMutableArray *)internalDirectoryFetch 
    88 
    89         NSString *dirsKey = [self dirsValueFromFiles]; 
    90         if(dirsKey == nil) 
    91                 return nil; 
    92          
    93         NSArray *dirs = [[cachedMetaFiles valueForKeyPath:dirsKey] mutableCopy]; 
    94         return [dirs autorelease]; 
     102- (NSMutableArray *)internalDirectoryFetchFromFiles:(NSArray *)files 
     103
     104        return nil; 
     105
     106 
     107- (void)prefetch:(NSArray *)files 
     108
    95109} 
    96110 
     
    112126- (void)reloadDirectoryContents 
    113127{ 
    114         [[self managedObjectContext] refreshObject:self mergeChanges:YES]; 
     128        [[self managedObjectContext] refreshObject:self mergeChanges:NO]; 
    115129        [cachedLookup removeAllObjects]; 
    116130        [cachedFiles removeAllObjects]; 
     
    119133        int sortValue = self.sortMethodValue; 
    120134        NSMutableArray *files = [self internalFileFetch]; 
     135        [self prefetch:files]; 
    121136        if([files count] != 0) 
    122137        { 
     
    137152        } 
    138153         
    139         NSMutableArray *dirs = [self internalDirectoryFetch]; 
     154        NSMutableArray *dirs = [self internalDirectoryFetchFromFiles:files]; 
    140155        if([dirs count] != 0) 
    141156        { 
     
    189204        while((obj = [objEnum nextObject]) != nil) 
    190205        { 
    191                 [moc refreshObject:obj mergeChanges:YES]; 
    192         } 
    193  
    194         [moc refreshObject:self mergeChanges:YES]; 
     206                [moc refreshObject:obj mergeChanges:NO]; 
     207        } 
     208 
     209        [moc refreshObject:self mergeChanges:NO]; 
    195210} 
    196211 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireSeason.m

    r599 r622  
    5050} 
    5151 
    52 - (NSString *)metaFilesValue; 
    53 { 
    54         return @"episodes.@distinctUnionOfSets.files"; 
    55 } 
    56  
    5752- (NSPredicate *)metaFileFetchPredicate 
    5853{ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVShow.m

    r603 r622  
    11#import "SapphireTVShow.h" 
     2#import "SapphireSeason.h" 
     3#import "SapphireEpisode.h" 
     4#import "SapphireSubEpisode.h" 
    25#import "CoreDataSupportFunctions.h" 
    36#import "SapphireMetaDataSupport.h" 
     
    4245} 
    4346 
    44 - (NSString *)dirsValueFromFiles 
    45 { 
    46         return @"@distinctUnionOfObjects.tvEpisode.season"; 
    47 } 
    48  
    4947- (NSString *)dirNameValue 
    5048{ 
    5149        return @"seasonName"; 
    52 } 
    53  
    54 - (NSString *)metaFilesValue; 
    55 { 
    56         return @"episodes.@distinctUnionOfSets.files"; 
    5750} 
    5851 
     
    7770} 
    7871 
     72static inline NSArray *getEpsFromFiles(NSManagedObjectContext *moc, NSArray *files) 
     73{ 
     74        NSSet *epIds = [NSSet setWithArray:[files valueForKeyPath:@"tvEpisode.objectID"]]; 
     75         
     76        NSPredicate *epPredicate = [NSPredicate predicateWithFormat:@"SELF IN %@", epIds]; 
     77        return doFetchRequest(SapphireEpisodeName, moc, epPredicate); 
     78} 
     79 
     80- (NSMutableArray *)internalDirectoryFetchFromFiles:(NSArray *)files 
     81{ 
     82        NSManagedObjectContext *moc = [self managedObjectContext]; 
     83        NSArray *eps = getEpsFromFiles(moc, files); 
     84         
     85        NSSet *seasonIds = [NSSet setWithArray:[eps valueForKeyPath:@"season.objectID"]]; 
     86        NSPredicate *seasonPred = [NSPredicate predicateWithFormat:@"SELF IN %@", seasonIds]; 
     87        NSMutableArray *ret = [doFetchRequest(SapphireSeasonName, moc, seasonPred) mutableCopy]; 
     88        return [ret autorelease]; 
     89} 
     90 
     91- (void)prefetch:(NSArray *)files 
     92{ 
     93        NSManagedObjectContext *moc = [self managedObjectContext]; 
     94        NSArray *eps = getEpsFromFiles(moc, files); 
     95         
     96        NSPredicate *subEpsPred = [NSPredicate predicateWithFormat:@"episode IN %@", eps]; 
     97        doFetchRequest(SapphireSubEpisodeName, moc, subEpsPred); 
     98} 
     99 
    79100@end