root/branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCast.m @ 840

Revision 840, 3.0 KB (checked in by gbooker, 16 months ago)

Delete unused objects as they become unused so as to not need the prune call later. This will help accelerate things later. Also, handled XML a bit better.

Line 
1#import "SapphireCast.h"
2#import "SapphireMovie.h"
3#import "CoreDataSupportFunctions.h"
4#import "SapphireFileSorter.h"
5#import "SapphireMetaDataSupport.h"
6
7@implementation SapphireCast
8
9static NSArray *allowedSorts = nil;
10
11+ (void)load
12{
13        allowedSorts = [[NSArray alloc] initWithObjects:[SapphireMovieTitleSorter sharedInstance], [SapphireDateSorter sharedInstance], [SapphireMovieIMDBRatingSorter sharedInstance], nil];
14}
15
16+ (SapphireCast *)cast:(NSString *)cast inContext:(NSManagedObjectContext *)moc
17{
18        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", cast];
19        return (SapphireCast *)doSingleFetchRequest(SapphireCastName, moc, predicate);
20}
21
22+ (SapphireCast *)createCast:(NSString *)cast inContext:(NSManagedObjectContext *)moc
23{
24        SapphireCast *ret = [SapphireCast cast:cast inContext:moc];
25        if(ret != nil)
26                return ret;
27       
28        ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireCastName inManagedObjectContext:moc];
29        ret.name = cast;
30        return ret;
31}
32
33+ (NSDictionary *)upgradeV1CastFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc
34{
35        NSMutableDictionary *lookup = [NSMutableDictionary dictionary];
36        NSArray *oldCast = doFetchRequest(SapphireCastName, oldMoc, nil);
37        NSEnumerator *castEnum = [oldCast objectEnumerator];
38        NSManagedObject *oldCastMember;
39        while((oldCastMember = [castEnum nextObject]) != nil)
40        {
41                SapphireCast *newCastMember = [NSEntityDescription insertNewObjectForEntityForName:SapphireCastName inManagedObjectContext:newMoc];
42                NSString *name = [oldCastMember valueForKey:@"name"];
43                newCastMember.name = name;
44                newCastMember.sortMethod = [oldCastMember valueForKey:@"sortMethod"];
45                newCastMember.hasMajorRole = [oldCastMember valueForKey:@"hasMajorRole"];
46                [lookup setObject:newCastMember forKey:name];
47        }
48        return lookup;
49}
50
51- (NSPredicate *)metaFileFetchPredicate
52{
53        NSArray *movieIds = [self.moviesSet valueForKey:@"objectID"];
54        return [NSPredicate predicateWithFormat:@"movie IN %@", movieIds];
55}
56
57- (NSArray *)fileSorters
58{
59        return allowedSorts;
60}
61
62- (NSString *)path
63{
64        return [[super path] stringByAppendingPathComponent:self.name];
65}
66
67- (void)checkMajorRole
68{
69        BOOL currentMajorRole = self.hasMajorRoleValue;
70        BOOL majorRole = NO;
71        NSEnumerator *movieEnum = [self.moviesSet objectEnumerator];
72        SapphireMovie *movie;
73        while((movie = [movieEnum nextObject]) != nil)
74        {
75                if([movie castMemberHasMajorRoleStatus:self])
76                {
77                        majorRole = YES;
78                        break;
79                }
80        }
81        if(majorRole != currentMajorRole)
82                self.hasMajorRoleValue = majorRole;
83}
84
85- (BOOL)shouldDelete
86{
87        return [self.moviesSet count] == 0;
88}
89
90-(void)removeMovies:(NSSet*)removedMovies
91{
92        [super removeMovies:removedMovies];
93        if([self.moviesSet count] == 0)
94                [SapphireMetaDataSupport setObjectForPendingDelete:self];
95        else
96                [self checkMajorRole];
97}
98
99- (void)removeMoviesObject:(SapphireMovie *)removedMovie
100{
101        [super removeMoviesObject:removedMovie];
102        if([self.moviesSet count] == 0)
103                [SapphireMetaDataSupport setObjectForPendingDelete:self];
104        else
105                [self checkMajorRole];
106}
107
108@end
Note: See TracBrowser for help on using the browser.