Changeset 734

Show
Ignore:
Timestamp:
01/08/2009 09:03:22 PM (3 years ago)
Author:
gbooker
Message:

Switched the the next version of the metadata.
Fixes #264

Location:
branches/CoreData/SapphireFrappliance
Files:
49 modified

Legend:

Unmodified
Added
Removed
  • branches/CoreData/SapphireFrappliance/FRAppliance/SapphireApplianceController.m

    r733 r734  
    246246{ 
    247247        NSFileManager *fm = [NSFileManager defaultManager]; 
    248         NSString *storeFile = [applicationSupportDir() stringByAppendingPathComponent:@"metaData.sapphireData"]; 
     248        NSString *storeFile = [applicationSupportDir() stringByAppendingPathComponent:@"metaData.sapphireDataV2"]; 
    249249        BOOL exists = [fm fileExistsAtPath:storeFile]; 
    250         NSString *plistFile = [applicationSupportDir() stringByAppendingPathComponent:@"metaData.plist"]; 
    251         BOOL oldExists = [fm fileExistsAtPath:plistFile]; 
     250        BOOL oldExists = [fm fileExistsAtPath:[applicationSupportDir() stringByAppendingPathComponent:@"metaData.sapphireData"]]; 
     251        oldExists |= [fm fileExistsAtPath:[applicationSupportDir() stringByAppendingPathComponent:@"metaData.plist"]]; 
    252252        return !exists && oldExists; 
    253253} 
     
    257257{ 
    258258        if(storeFile == nil) 
    259                 storeFile = [applicationSupportDir() stringByAppendingPathComponent:@"metaData.sapphireData"]; 
     259                storeFile = [applicationSupportDir() stringByAppendingPathComponent:@"metaData.sapphireDataV2"]; 
    260260        NSFileManager *fm = [NSFileManager defaultManager]; 
    261261        [fm constructPath:[storeFile stringByDeletingLastPathComponent]]; 
     
    264264         
    265265        NSString *mopath = [[NSBundle bundleForClass:[self class]] pathForResource:@"Sapphire" ofType:@"momd"]; 
    266         mopath = [mopath stringByAppendingPathComponent:@"SapphireV1.mom"]; 
     266        mopath = [mopath stringByAppendingPathComponent:@"SapphireV2.mom"]; 
    267267        NSURL *mourl = [NSURL fileURLWithPath:mopath]; 
    268268        NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:mourl]; 
  • branches/CoreData/SapphireFrappliance/FRAppliance/SapphireMetaDataUpgrading.m

    r733 r734  
    2525 
    2626@implementation SapphireMetaDataUpgrading 
     27 
     28- (id) debugInit 
     29{ 
     30        self = [super init]; 
     31         
     32        moc = [SapphireApplianceController createManagedObjectContextForFile:nil]; 
     33         
     34        return self; 
     35} 
    2736 
    2837- (id) initWithScene: (BRRenderScene *) scene 
     
    112121} 
    113122 
     123- (NSManagedObjectContext *)createV1Moc:(NSString *)storeFile 
     124{ 
     125        NSURL *storeUrl = [NSURL fileURLWithPath:storeFile]; 
     126        NSError *error = nil; 
     127         
     128        NSString *mopath = [[NSBundle bundleForClass:[self class]] pathForResource:@"Sapphire" ofType:@"momd"]; 
     129        mopath = [mopath stringByAppendingPathComponent:@"SapphireV1.mom"]; 
     130        NSURL *mourl = [NSURL fileURLWithPath:mopath]; 
     131        NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:mourl]; 
     132         
     133        NSPersistentStoreCoordinator *coord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 
     134        if(![coord addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) 
     135        { 
     136                SapphireLog(SAPPHIRE_LOG_ALL, SAPPHIRE_LOG_LEVEL_ERROR, @"Could not add store: %@", error); 
     137                 
     138                [coord release]; 
     139                [model release]; 
     140                return nil; 
     141        } 
     142         
     143        NSManagedObjectContext *retmoc = [[NSManagedObjectContext alloc] init]; 
     144        [retmoc setUndoManager:nil]; 
     145        [retmoc setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; 
     146        [retmoc setPersistentStoreCoordinator:coord]; 
     147         
     148        [model release]; 
     149        [coord release]; 
     150         
     151        return retmoc;   
     152} 
     153 
    114154- (void)doUpgrade:(id)obj 
    115155{ 
    116156        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    117         NSString *plistFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Sapphire/metaData.plist"]; 
    118         [SapphireMetaDataSupport importPlist:[plistFile stringByDeletingLastPathComponent] intoContext:moc withDisplay:self]; 
     157        NSString *v1StoreFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Sapphire/metaData.sapphireData"]; 
     158        NSFileManager *fm = [NSFileManager defaultManager]; 
     159        if([fm fileExistsAtPath:v1StoreFile]) 
     160        { 
     161                NSManagedObjectContext *oldContext = [self createV1Moc:v1StoreFile]; 
     162                if(oldContext != nil) 
     163                        [SapphireMetaDataSupport importV1Store:oldContext intoContext:moc withDisplay:self]; 
     164        } 
     165        else 
     166        { 
     167                NSString *plistFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Sapphire/metaData.plist"]; 
     168                [SapphireMetaDataSupport importPlist:[plistFile stringByDeletingLastPathComponent] intoContext:moc withDisplay:self]; 
     169        } 
    119170        [SapphireMetaDataSupport save:moc]; 
    120171        [self performSelectorOnMainThread:@selector(finished) withObject:nil waitUntilDone:NO]; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCast.h

    r540 r734  
    66+ (SapphireCast *)cast:(NSString *)cast inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireCast *)createCast:(NSString *)cast inContext:(NSManagedObjectContext *)moc; 
     8+ (NSDictionary *)upgradeV1CastFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
    89@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCast.m

    r623 r734  
    2828        ret.name = cast; 
    2929        return ret; 
     30} 
     31 
     32+ (NSDictionary *)upgradeV1CastFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc 
     33{ 
     34        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     35        NSArray *oldCast = doFetchRequest(SapphireCastName, oldMoc, nil); 
     36        NSEnumerator *castEnum = [oldCast objectEnumerator]; 
     37        NSManagedObject *oldCastMember; 
     38        while((oldCastMember = [castEnum nextObject]) != nil) 
     39        { 
     40                SapphireCast *newCastMember = [NSEntityDescription insertNewObjectForEntityForName:SapphireCastName inManagedObjectContext:newMoc]; 
     41                NSString *name = [oldCastMember valueForKey:@"name"]; 
     42                newCastMember.name = name; 
     43                newCastMember.sortMethod = [oldCastMember valueForKey:@"sortMethod"]; 
     44                newCastMember.hasMajorRole = [oldCastMember valueForKey:@"hasMajorRole"]; 
     45                [lookup setObject:newCastMember forKey:name]; 
     46        } 
     47        return lookup; 
    3048} 
    3149 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCollectionDirectory.h

    r729 r734  
    77+ (SapphireCollectionDirectory *)collectionAtPath:(NSString *)path mount:(BOOL)isMount skip:(BOOL)skip hidden:(BOOL)hidden manual:(BOOL)manual inContext:(NSManagedObjectContext *)moc; 
    88+ (SapphireCollectionDirectory *)collectionAtPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
     9+ (SapphireCollectionDirectory *)upgradeV1CollectionDirectory:(NSManagedObject *)oldCol toContext:(NSManagedObjectContext *)newMoc; 
    910+ (NSArray *)availableCollectionDirectoriesInContext:(NSManagedObjectContext *)moc; 
    1011+ (NSArray *)skippedCollectionDirectoriesInContext:(NSManagedObjectContext *)moc; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireCollectionDirectory.m

    r729 r734  
    3636{ 
    3737        return [SapphireCollectionDirectory collectionAtPath:path mount:YES skip:NO hidden:NO manual:NO inContext:moc]; 
     38} 
     39 
     40+ (SapphireCollectionDirectory *)upgradeV1CollectionDirectory:(NSManagedObject *)oldCol toContext:(NSManagedObjectContext *)newMoc 
     41{ 
     42        SapphireCollectionDirectory *ret = [NSEntityDescription insertNewObjectForEntityForName:MY_NAME inManagedObjectContext:newMoc]; 
     43        ret.hidden = [oldCol valueForKey:@"hidden"]; 
     44        ret.isMount = [oldCol valueForKey:@"isMount"]; 
     45        ret.manualCollection = [oldCol valueForKey:@"manualCollection"]; 
     46        ret.skip = [oldCol valueForKey:@"skip"]; 
     47         
     48        return ret; 
    3849} 
    3950 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirector.h

    r540 r734  
    66+ (SapphireDirector *)createDirector:(NSString *)director inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireDirector *)director:(NSString *)director inContext:(NSManagedObjectContext *)moc; 
     8+ (NSDictionary *)upgradeV1DirectorsFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
    89@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirector.m

    r623 r734  
    2929} 
    3030 
     31+ (NSDictionary *)upgradeV1DirectorsFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc 
     32{ 
     33        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     34        NSArray *oldDirectors = doFetchRequest(SapphireDirectorName, oldMoc, nil); 
     35        NSEnumerator *directorEnum = [oldDirectors objectEnumerator]; 
     36        NSManagedObject *oldDirector; 
     37        while((oldDirector = [directorEnum nextObject]) != nil) 
     38        { 
     39                SapphireDirector *newDirector = [NSEntityDescription insertNewObjectForEntityForName:SapphireDirectorName inManagedObjectContext:newMoc]; 
     40                NSString *name = [oldDirector valueForKey:@"name"]; 
     41                newDirector.name = name; 
     42                newDirector.sortMethod = [oldDirector valueForKey:@"sortMethod"]; 
     43                [lookup setObject:newDirector forKey:name]; 
     44        } 
     45        return lookup; 
     46} 
     47 
    3148- (NSPredicate *)metaFileFetchPredicate 
    3249{ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.h

    r650 r734  
    2020+ (SapphireDirectoryMetaData *)createDirectoryWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    2121+ (SapphireDirectoryMetaData *)createDirectoryWithPath:(NSString *)path parent:(SapphireDirectoryMetaData *)parent inContext:(NSManagedObjectContext *)moc; 
     22+ (NSDictionary *)upgradeV1DirectoriesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
    2223- (void)insertDictionary:(NSDictionary *)dict withDefer:(NSMutableDictionary *)defer andDisplay:(SapphireMetaDataUpgrading *)display; 
    2324- (void)rescanDirWithExistingDirs:(NSMutableArray *)existingDirs files:(NSMutableArray *)existingFiles symDirs:(NSMutableArray *)existingSymDirs symFiles:(NSMutableArray *)existingSymFiles; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectoryMetaData.m

    r696 r734  
    1212#import "SapphireMovie.h" 
    1313#import "NSManagedObject-Extensions.h" 
     14#import "SapphireCollectionDirectory.h" 
    1415 
    1516@implementation SapphireDirectoryMetaData 
     
    5152 
    5253        return [SapphireDirectoryMetaData internalCreateDirectoryWithPath:path parent:parent inContext:moc]; 
     54} 
     55 
     56+ (NSDictionary *)upgradeV1DirectoriesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc 
     57{ 
     58        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     59        NSArray *dirs = doFetchRequest(SapphireDirectoryMetaDataName, oldMoc, nil); 
     60        NSEnumerator *dirEnum = [dirs objectEnumerator]; 
     61        NSManagedObjectContext *oldDir; 
     62        while((oldDir = [dirEnum nextObject]) != nil) 
     63        { 
     64                SapphireDirectoryMetaData *newDir = [NSEntityDescription insertNewObjectForEntityForName:SapphireDirectoryMetaDataName inManagedObjectContext:newMoc]; 
     65                NSString *path = [oldDir valueForKey:@"path"]; 
     66                newDir.path = path; 
     67                NSManagedObject *oldCollection = [newDir valueForKey:@"collectionDirectory"]; 
     68                if(oldCollection != nil) 
     69                        newDir.collectionDirectory = [SapphireCollectionDirectory upgradeV1CollectionDirectory:oldCollection toContext:newMoc]; 
     70                [lookup setObject:newDir forKey:path]; 
     71        } 
     72        dirEnum = [dirs objectEnumerator]; 
     73        while((oldDir = [dirEnum nextObject]) != nil) 
     74        { 
     75                NSString *path = [oldDir valueForKey:@"path"]; 
     76                NSString *parentPath = [oldDir valueForKeyPath:@"parent.path"]; 
     77                if(parentPath != nil) 
     78                        ((SapphireDirectoryMetaData *)[lookup objectForKey:path]).parent = [lookup objectForKey:parentPath]; 
     79        } 
     80        return lookup; 
    5381} 
    5482 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectorySymLink.h

    r540 r734  
    66+ (SapphireDirectorySymLink *)directoryLinkWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireDirectorySymLink *)createDirectoryLinkWithPath:(NSString *)path toPath:(NSString *)target inContext:(NSManagedObjectContext *)moc; 
     8+ (void)upgradeV1DirLinksFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc directories:(NSDictionary *)dirLookup; 
    89@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireDirectorySymLink.m

    r585 r734  
    11#import "SapphireDirectorySymLink.h" 
    22#import "SapphireDirectoryMetaData.h" 
     3#import "CoreDataSupportFunctions.h" 
    34 
    45@implementation SapphireDirectorySymLink 
     
    2728        return ret; 
    2829} 
     30 
     31+ (void)upgradeV1DirLinksFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc directories:(NSDictionary *)dirLookup 
     32{ 
     33        NSArray *links = doFetchRequest(SapphireDirectorySymLinkName, oldMoc, nil); 
     34        NSEnumerator *linkEnum = [links objectEnumerator]; 
     35        NSManagedObject *oldLink; 
     36        while((oldLink = [linkEnum nextObject]) != nil) 
     37        { 
     38                NSString *destinationPath = [oldLink valueForKeyPath:@"directory.path"]; 
     39                SapphireDirectoryMetaData *destination = nil; 
     40                if(destinationPath != nil) 
     41                        destination = [dirLookup objectForKey:destinationPath]; 
     42                if(destination == nil) 
     43                        continue; 
     44                 
     45                NSString *containingPath = [oldLink valueForKeyPath:@"containingDirectory.path"]; 
     46                SapphireDirectoryMetaData *containing = nil; 
     47                if(containingPath != nil) 
     48                        containing = [dirLookup objectForKey:containingPath]; 
     49                if(containing == nil) 
     50                        continue; 
     51                 
     52                SapphireDirectorySymLink *newLink = [NSEntityDescription insertNewObjectForEntityForName:SapphireDirectorySymLinkName inManagedObjectContext:newMoc]; 
     53                newLink.path = [oldLink valueForKey:@"path"]; 
     54                newLink.directory = destination; 
     55                newLink.containingDirectory = containing; 
     56        } 
     57} 
     58 
    2959@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireEpisode.h

    r627 r734  
    66        NSArray                 *sortedSubEpisodes; 
    77} 
     8+ (SapphireEpisode *)episode:(int)ep inSeason:(int)season forShow:(NSString *)show withPath:(NSString *)showPath inContext:(NSManagedObjectContext *)moc; 
     9+ (SapphireEpisode *)episodeTitle:(NSString *)title inSeason:(int)season forShow:(NSString *)show withPath:(NSString *)showPath inContext:(NSManagedObjectContext *)moc; 
    810+ (SapphireEpisode *)episodeWithDictionary:(NSDictionary *)dict inContext:(NSManagedObjectContext *)moc; 
     11+ (void)upgradeV1EpisodesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup; 
    912 
    1013- (int)episodeNumberValue; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireEpisode.m

    r732 r734  
    88#import "SapphireXMLData.h" 
    99#import "SapphireApplianceController.h" 
     10#import "CoreDataSupportFunctions.h" 
    1011 
    1112@implementation SapphireEpisode 
     
    4546        [ret addSubEpisodesObject:[SapphireSubEpisode createSubEpisodeTitle:title inEpisode:ret]]; 
    4647        return ret; 
     48} 
     49 
     50+ (void)upgradeV1EpisodesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup 
     51{ 
     52        NSArray *eps = doFetchRequest(SapphireEpisodeName, oldMoc, nil); 
     53        NSEnumerator *epEnum = [eps objectEnumerator]; 
     54        NSManagedObject *oldEp; 
     55        while((oldEp = [epEnum nextObject]) != nil) 
     56        { 
     57                NSArray *oldFilePaths = [oldEp valueForKeyPath:@"files.path"]; 
     58                NSEnumerator *pathEnum = [oldFilePaths objectEnumerator]; 
     59                NSString *path; 
     60                NSMutableSet *newFiles = [NSMutableSet set]; 
     61                while((path = [pathEnum nextObject]) != nil) 
     62                { 
     63                        SapphireFileMetaData *newFile = [fileLookup objectForKey:path]; 
     64                        if(newFile != nil) 
     65                                [newFiles addObject:newFile]; 
     66                } 
     67                if([newFiles count] == 0) 
     68                        continue; 
     69                 
     70                NSNumber *seasonNum = [oldEp valueForKeyPath:@"season.seasonNumber"]; 
     71                NSString *showName = [oldEp valueForKeyPath:@"tvShow.name"]; 
     72                NSString *showPath = [oldEp valueForKeyPath:@"tvShow.showPath"]; 
     73                 
     74                SapphireSeason *season = [SapphireSeason season:[seasonNum intValue] forShow:showName withPath:showPath inContext:newMoc]; 
     75                if(season == nil) 
     76                        continue; 
     77                 
     78                SapphireEpisode *newEp = [NSEntityDescription insertNewObjectForEntityForName:SapphireEpisodeName inManagedObjectContext:newMoc]; 
     79                newEp.season = season; 
     80                newEp.tvShow = season.tvShow; 
     81                [newEp.filesSet setSet:newFiles]; 
     82                 
     83                NSEnumerator *subEpEnum = [[oldEp valueForKey:@"subEpisodes"] objectEnumerator]; 
     84                NSManagedObject *subEp; 
     85                while((subEp = [subEpEnum nextObject]) != nil) 
     86                        [SapphireSubEpisode upgradeV1SubEpisode:subEp toContext:newMoc inEpisode:newEp]; 
     87        } 
    4788} 
    4889 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileMetaData.h

    r732 r734  
    6868} FileContainerType; 
    6969 
     70@class SapphireMetaDataUpgrading; 
     71 
    7072@interface SapphireFileMetaData : _SapphireFileMetaData {} 
    7173+ (SapphireFileMetaData *)fileWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    7274+ (SapphireFileMetaData *)createFileWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    7375+ (SapphireFileMetaData *)createFileWithPath:(NSString *)path parent:(SapphireDirectoryMetaData *)parent inContext:(NSManagedObjectContext *)moc; 
     76+ (NSDictionary *)upgradeV1FilesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc withMovies:(NSDictionary *)movieLookup directories:(NSDictionary *)dirLookup; 
    7477 
    7578- (void)insertDictionary:(NSDictionary *)dict withDefer:(NSMutableDictionary *)defer; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileMetaData.m

    r732 r734  
    1111#import "SapphireFileSymLink.h" 
    1212#import "SapphireSettings.h" 
     13#import "CoreDataSupportFunctions.h" 
    1314 
    1415#import "SapphireTVShow.h" 
     
    134135         
    135136        return [SapphireFileMetaData internalCreateFileWithPath:path parent:parent inContext:moc]; 
     137} 
     138 
     139+ (NSDictionary *)upgradeV1FilesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc withMovies:(NSDictionary *)movieLookup directories:(NSDictionary *)dirLookup 
     140{ 
     141        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     142        NSArray *files = doFetchRequest(SapphireFileMetaDataName, oldMoc, nil); 
     143        NSEnumerator *fileEnum = [files objectEnumerator]; 
     144        NSManagedObject *oldFile; 
     145        while((oldFile = [fileEnum nextObject]) != nil) 
     146        { 
     147                SapphireFileMetaData *newFile = [NSEntityDescription insertNewObjectForEntityForName:SapphireFileMetaDataName inManagedObjectContext:newMoc]; 
     148                NSString *path = [oldFile valueForKey:@"path"]; 
     149                newFile.path = path; 
     150                newFile.parent = [dirLookup objectForKey:[oldFile valueForKeyPath:@"parent.path"]]; 
     151                newFile.audioDescription = [oldFile valueForKey:@"audioDescription"]; 
     152                newFile.audioFormatID = [oldFile valueForKey:@"audioFormatID"]; 
     153                newFile.duration = [oldFile valueForKey:@"duration"]; 
     154                newFile.favorite = [oldFile valueForKey:@"favorite"]; 
     155                newFile.fileClass = [oldFile valueForKey:@"fileClass"]; 
     156                newFile.fileContainerType = [oldFile valueForKey:@"fileContainerType"]; 
     157                newFile.hasVideo = [oldFile valueForKey:@"hasVideo"]; 
     158                newFile.importTypeValue = [[oldFile valueForKey:@"importType"] intValue] & ~IMPORT_TYPE_XML_MASK; 
     159                newFile.modified = [oldFile valueForKey:@"modified"]; 
     160                newFile.resumeTime = [oldFile valueForKey:@"resumeTime"]; 
     161                newFile.sampleRate = [oldFile valueForKey:@"sampleRate"]; 
     162                newFile.size = [oldFile valueForKey:@"size"]; 
     163                newFile.subtitlesDescription = [oldFile valueForKey:@"subtitlesDescription"]; 
     164                newFile.videoDescription = [oldFile valueForKey:@"videoDescription"]; 
     165                newFile.watched = [oldFile valueForKey:@"watched"]; 
     166                NSNumber *oldMovieNumber = [oldFile valueForKeyPath:@"movie.imdbNumber"]; 
     167                if(oldMovieNumber != nil) 
     168                        newFile.movie = [movieLookup objectForKey:oldMovieNumber]; 
     169                 
     170                [lookup setObject:newFile forKey:path]; 
     171        } 
     172        return lookup; 
    136173} 
    137174 
     
    402439                [file addFileData:fileMeta]; 
    403440        } 
    404         return updated ; 
     441        return updated; 
    405442} 
    406443 
     
    680717- (void)setMovie:(SapphireMovie *)movie 
    681718{ 
    682         SapphireMovie *oldMovie = super.movie; 
     719        SapphireMovie *oldMovie = self.movie; 
    683720        super.movie = movie; 
    684721        if(movie != nil) 
     
    698735- (void)setTvEpisode:(SapphireEpisode *)ep 
    699736{ 
    700         SapphireEpisode *oldEp = super.tvEpisode; 
     737        SapphireEpisode *oldEp = self.tvEpisode; 
    701738        super.tvEpisode = ep; 
    702739        if(ep != nil) 
     
    709746                self.xmlData.episode.episode = ep; 
    710747        [oldEp clearPredicateCache]; 
     748} 
     749 
     750- (void)setXmlData:(SapphireXMLData *)data 
     751{ 
     752        super.xmlData = data; 
     753        if(data != nil) 
     754        { 
     755                data.episode.episode = self.tvEpisode; 
     756                data.movie.movie = self.movie; 
     757        } 
    711758} 
    712759 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileSymLink.h

    r540 r734  
    66+ (SapphireFileSymLink *)fileLinkWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireFileSymLink *)createFileLinkWithPath:(NSString *)path toPath:(NSString *)target inContext:(NSManagedObjectContext *)moc; 
     8+ (void)upgradeV1FileLinksFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc directories:(NSDictionary *)dirLookup file:(NSDictionary *)fileLookup; 
    89 
    910- (NSNumber *)watched; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileSymLink.m

    r586 r734  
    22#import "SapphireFileMetaData.h" 
    33#import "SapphireDirectoryMetaData.h" 
     4#import "CoreDataSupportFunctions.h" 
    45 
    56@implementation SapphireFileSymLink 
     
    3031} 
    3132 
     33+ (void)upgradeV1FileLinksFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc directories:(NSDictionary *)dirLookup file:(NSDictionary *)fileLookup 
     34{ 
     35        NSArray *links = doFetchRequest(SapphireFileSymLinkName, oldMoc, nil); 
     36        NSEnumerator *linkEnum = [links objectEnumerator]; 
     37        NSManagedObject *oldLink; 
     38        while((oldLink = [linkEnum nextObject]) != nil) 
     39        { 
     40                NSString *destinationPath = [oldLink valueForKeyPath:@"file.path"]; 
     41                SapphireFileMetaData *destination = nil; 
     42                if(destinationPath != nil) 
     43                        destination = [fileLookup objectForKey:destinationPath]; 
     44                if(destination == nil) 
     45                        continue; 
     46                 
     47                NSString *containingPath = [oldLink valueForKeyPath:@"containingDirectory.path"]; 
     48                SapphireDirectoryMetaData *containing = nil; 
     49                if(containingPath != nil) 
     50                        containing = [dirLookup objectForKey:containingPath]; 
     51                if(containing == nil) 
     52                        continue; 
     53                 
     54                SapphireFileSymLink *newLink = [NSEntityDescription insertNewObjectForEntityForName:SapphireFileSymLinkName inManagedObjectContext:newMoc]; 
     55                newLink.path = [oldLink valueForKey:@"path"]; 
     56                newLink.file = destination; 
     57                newLink.containingDirectory = containing; 
     58        } 
     59} 
     60 
    3261- (NSNumber *)watched 
    3362{ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireGenre.h

    r540 r734  
    66+ (SapphireGenre *)createGenre:(NSString *)genre inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireGenre *)genre:(NSString *)genre inContext:(NSManagedObjectContext *)moc; 
     8+ (NSDictionary *)upgradeV1GenresFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
    89@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireGenre.m

    r623 r734  
    3030} 
    3131 
     32+ (NSDictionary *)upgradeV1GenresFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc 
     33{ 
     34        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     35        NSArray *oldGenres = doFetchRequest(SapphireGenreName, oldMoc, nil); 
     36        NSEnumerator *genreEnum = [oldGenres objectEnumerator]; 
     37        NSManagedObject *oldGenre; 
     38        while((oldGenre = [genreEnum nextObject]) != nil) 
     39        { 
     40                SapphireGenre *newGenre = [NSEntityDescription insertNewObjectForEntityForName:SapphireGenreName inManagedObjectContext:newMoc]; 
     41                NSString *name = [oldGenre valueForKey:@"name"]; 
     42                newGenre.name = name; 
     43                newGenre.sortMethod = [oldGenre valueForKey:@"sortMethod"]; 
     44                [lookup setObject:newGenre forKey:name]; 
     45        } 
     46        return lookup; 
     47} 
     48 
    3249- (NSPredicate *)metaFileFetchPredicate 
    3350{ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireJoinedFile.h

    r540 r734  
    55@interface SapphireJoinedFile : _SapphireJoinedFile {} 
    66+ (SapphireJoinedFile *)joinedFileForPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
     7+ (void)upgradeV1JoinedFileFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup; 
    78@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireJoinedFile.m

    r578 r734  
    1818} 
    1919 
     20+ (void)upgradeV1JoinedFileFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup 
     21{ 
     22        NSArray *joins = doFetchRequest(SapphireJoinedFileName, oldMoc, nil); 
     23        NSEnumerator *joinEnum = [joins objectEnumerator]; 
     24        NSManagedObject *oldJoin; 
     25        while((oldJoin = [joinEnum nextObject]) != nil) 
     26        { 
     27                NSString *destinationPath = [oldJoin valueForKeyPath:@"file.path"]; 
     28                SapphireFileMetaData *destination = nil; 
     29                if(destinationPath != nil) 
     30                        destination = [fileLookup objectForKey:destinationPath]; 
     31                if(destination == nil) 
     32                        continue; 
     33                 
     34                NSArray *containingPaths = [oldJoin valueForKeyPath:@"joinedFiles.path"]; 
     35                NSEnumerator *pathEnum = [containingPaths objectEnumerator]; 
     36                NSString *path; 
     37                NSMutableSet *joined = [NSMutableSet set]; 
     38                while((path = [pathEnum nextObject]) != nil) 
     39                { 
     40                        SapphireFileMetaData *join = [fileLookup objectForKey:path]; 
     41                        if(join != nil) 
     42                                [joined addObject:join]; 
     43                } 
     44                if([joined count] == 0) 
     45                        continue; 
     46                 
     47                SapphireJoinedFile *newJoin = [NSEntityDescription insertNewObjectForEntityForName:SapphireJoinedFileName inManagedObjectContext:newMoc]; 
     48                newJoin.file = destination; 
     49                [newJoin.joinedFilesSet setSet:joined]; 
     50        } 
     51} 
     52 
    2053@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMovie.h

    r732 r734  
    66@interface SapphireMovie : _SapphireMovie {} 
    77+ (SapphireMovie *)movieWithIMDB:(int)imdbNumber inContext:(NSManagedObjectContext *)moc; 
     8+ (SapphireMovie *)createMovieWithIMDB:(int)imdbNumber inContext:(NSManagedObjectContext *)moc; 
    89+ (SapphireMovie *)movieWithDictionary:(NSDictionary *)dict inContext:(NSManagedObjectContext *)moc; 
     10+ (SapphireMovie *)movieWithTitle:(NSString *)title inContext:(NSManagedObjectContext *)moc; 
     11+ (SapphireMovie *)createMovieWithTitle:(NSString *)title inContext:(NSManagedObjectContext *)moc; 
    912+ (int)imdbNumberFromString:(NSString *)imdbStr; 
     13+ (NSDictionary *)upgradeV1MoviesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc withCast:(NSDictionary *)cast directors:(NSDictionary *)directors genres:(NSDictionary *)genres; 
    1014 
    1115- (NSArray *)orderedCast; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMovie.m

    r732 r734  
    1010#import "SapphireXMLData.h" 
    1111#import "NSString-Extensions.h" 
     12#import "SapphireMovieTranslation.h" 
    1213 
    1314NSString *FILE_DID_CHANGE_MOVIE_NOTIFICATION = @"FileDidChangeMovie"; 
     
    4041        ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireMovieName inManagedObjectContext:moc]; 
    4142        ret.imdbNumber = [NSNumber numberWithInt:imdbNumber]; 
     43        return ret; 
     44} 
     45 
     46+ (SapphireMovie *)movieWithTitle:(NSString *)title inContext:(NSManagedObjectContext *)moc 
     47{ 
     48        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"imdbNumber == nil && title == %@", title]; 
     49        return (SapphireMovie *)doSingleFetchRequest(SapphireMovieName, moc, predicate); 
     50} 
     51 
     52+ (SapphireMovie *)createMovieWithTitle:(NSString *)title inContext:(NSManagedObjectContext *)moc 
     53{ 
     54        SapphireMovie *ret = [SapphireMovie movieWithTitle:title inContext:moc]; 
     55        if(ret != nil) 
     56                return ret; 
     57         
     58        ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireMovieName inManagedObjectContext:moc]; 
     59        ret.title = title; 
     60        ret.imdbNumber = nil; 
    4261        return ret; 
    4362} 
     
    98117} 
    99118 
     119+ (NSDictionary *)upgradeV1MoviesFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc withCast:(NSDictionary *)cast directors:(NSDictionary *)directors genres:(NSDictionary *)genres 
     120{ 
     121        NSMutableDictionary *lookup = [NSMutableDictionary dictionary]; 
     122        NSArray *oldMovies = doFetchRequest(SapphireMovieName, oldMoc, nil); 
     123        NSEnumerator *movieEnum = [oldMovies objectEnumerator]; 
     124        NSManagedObject *oldMovie; 
     125        while((oldMovie = [movieEnum nextObject]) != nil) 
     126        { 
     127                SapphireMovie *newMovie = [NSEntityDescription insertNewObjectForEntityForName:SapphireMovieName inManagedObjectContext:newMoc]; 
     128                NSNumber *imdbNumber = [oldMovie valueForKey:@"imdbNumber"]; 
     129                newMovie.imdbNumber = imdbNumber; 
     130                newMovie.imdbRating = [oldMovie valueForKey:@"imdbRating"]; 
     131                newMovie.imdbTop250Ranking = [oldMovie valueForKey:@"imdbTop250Ranking"]; 
     132                newMovie.MPAARating = [oldMovie valueForKey:@"MPAARating"]; 
     133                newMovie.orderedCastData = [oldMovie valueForKey:@"orderedCastData"]; 
     134                newMovie.orderedDirectorsData = [oldMovie valueForKey:@"orderedDirectorsData"]; 
     135                newMovie.orderedGenresData = [oldMovie valueForKey:@"orderedGenresData"]; 
     136                newMovie.oscarsWon = [oldMovie valueForKey:@"oscarsWon"]; 
     137                newMovie.plot = [oldMovie valueForKey:@"plot"]; 
     138                newMovie.releaseDate = [oldMovie valueForKey:@"releaseDate"]; 
     139                newMovie.title = [oldMovie valueForKey:@"title"]; 
     140                NSArray *castNames = [oldMovie valueForKeyPath:@"cast.name"]; 
     141                NSEnumerator *castEnum = [castNames objectEnumerator]; 
     142                NSString *name; 
     143                NSMutableSet *objSet = [NSMutableSet set]; 
     144                while((name = [castEnum nextObject]) != nil) 
     145                { 
     146                        [objSet addObject:[cast objectForKey:name]]; 
     147                } 
     148                [newMovie.castSet setSet:objSet]; 
     149                NSArray *directorNames = [oldMovie valueForKeyPath:@"directors.name"]; 
     150                NSEnumerator *directorEnum = [directorNames objectEnumerator]; 
     151                objSet = [NSMutableSet set]; 
     152                while((name = [directorEnum nextObject]) != nil) 
     153                { 
     154                        [objSet addObject:[directors objectForKey:name]]; 
     155                } 
     156                [newMovie.directorsSet setSet:objSet]; 
     157                NSArray *genreNames = [oldMovie valueForKeyPath:@"genres.name"]; 
     158                NSEnumerator *genreEnum = [genreNames objectEnumerator]; 
     159                objSet = [NSMutableSet set]; 
     160                while((name = [genreEnum nextObject]) != nil) 
     161                { 
     162                        [objSet addObject:[genres objectForKey:name]]; 
     163                } 
     164                [newMovie.genresSet setSet:objSet]; 
     165                 
     166                NSEnumerator *translationEnum = [[oldMovie valueForKey:@"translations"] objectEnumerator]; 
     167                NSManagedObject *translation; 
     168                while((translation = [translationEnum nextObject]) != nil) 
     169                { 
     170                        [SapphireMovieTranslation upgradeV1MovieTranslation:translation toMovie:newMovie]; 
     171                } 
     172                [lookup setObject:newMovie forKey:imdbNumber]; 
     173        } 
     174        return lookup; 
     175} 
     176 
    100177- (NSComparisonResult)releaseDateCompare:(SapphireMovie *)other 
    101178{ 
     
    275352        checkOrderedData(orderedCast, overridden); 
    276353        if(![overridden count]) 
    277         { 
    278354                self.overriddenCastData = nil; 
     355        else 
     356        { 
     357                NSArray *names = [overridden valueForKey:@"name"]; 
     358                self.overriddenCastData = [NSKeyedArchiver archivedDataWithRootObject:names]; 
    279359        } 
    280360        [self setPrimitiveValue:nil forKey:ORDERED_CAST_KEY]; 
     
    287367        checkOrderedData(orderedGenres, overridden); 
    288368        if(![overridden count]) 
    289         { 
    290369                self.overriddenGenresData = nil; 
     370        else 
     371        { 
     372                NSArray *names = [overridden valueForKey:@"name"]; 
     373                self.overriddenGenresData = [NSKeyedArchiver archivedDataWithRootObject:names]; 
    291374        } 
    292375        [self setPrimitiveValue:nil forKey:ORDERED_GENRES_KEY]; 
     
    299382        checkOrderedData(orderedDirectors, overridden); 
    300383        if(![overridden count]) 
    301         { 
    302384                self.overriddenDirectorsData = nil; 
     385        else 
     386        { 
     387                NSArray *names = [overridden valueForKey:@"name"]; 
     388                self.overriddenDirectorsData = [NSKeyedArchiver archivedDataWithRootObject:names]; 
    303389        } 
    304390        [self setPrimitiveValue:nil forKey:ORDERED_DIRECTOR_KEY]; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMoviePoster.h

    r540 r734  
    55@interface SapphireMoviePoster : _SapphireMoviePoster {} 
    66+ (SapphireMoviePoster *)createPosterWithLink:(NSString *)link index:(int)index translation:(SapphireMovieTranslation *)translation inContext:(NSManagedObjectContext *)moc; 
     7+ (SapphireMoviePoster *)upgradeV1MoviePoster:(NSManagedObject *)oldTran toTranslation:(SapphireMovieTranslation *)translation; 
    78@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMoviePoster.m

    r557 r734  
    1313} 
    1414 
     15+ (SapphireMoviePoster *)upgradeV1MoviePoster:(NSManagedObject *)oldTran toTranslation:(SapphireMovieTranslation *)translation 
     16{ 
     17        NSManagedObjectContext *newMoc = [translation managedObjectContext]; 
     18        SapphireMoviePoster *ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireMoviePosterName inManagedObjectContext:newMoc]; 
     19        ret.link = [oldTran valueForKey:@"link"]; 
     20        ret.index = [oldTran valueForKey:@"index"]; 
     21        ret.movieTranslation = translation; 
     22        return ret; 
     23} 
     24 
    1525- (NSComparisonResult)compare:(SapphireMoviePoster *)other 
    1626{ 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMovieTranslation.h

    r557 r734  
    88+ (SapphireMovieTranslation *)movieTranslationWithName:(NSString *)name inContext:(NSManagedObjectContext *)moc; 
    99+ (SapphireMovieTranslation *)createMovieTranslationWithName:(NSString *)name inContext:(NSManagedObjectContext *)moc; 
     10+ (SapphireMovieTranslation *)upgradeV1MovieTranslation:(NSManagedObject *)oldTran toMovie:(SapphireMovie *)movie; 
    1011 
    1112- (NSArray *)orderedPosters; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireMovieTranslation.m

    r578 r734  
    11#import "SapphireMovieTranslation.h" 
    22#import "CoreDataSupportFunctions.h" 
     3#import "SapphireMoviePoster.h" 
    34 
    45@implementation SapphireMovieTranslation 
     
    2223} 
    2324 
     25+ (SapphireMovieTranslation *)upgradeV1MovieTranslation:(NSManagedObject *)oldTran toMovie:(SapphireMovie *)movie 
     26{ 
     27        NSManagedObjectContext *newMoc = [movie managedObjectContext]; 
     28         
     29        SapphireMovieTranslation *ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireMovieTranslationName inManagedObjectContext:newMoc]; 
     30        ret.IMDBLink = [oldTran valueForKey:@"IMDBLink"]; 
     31        ret.IMPLink = [oldTran valueForKey:@"IMPLink"]; 
     32        ret.name = [oldTran valueForKey:@"name"]; 
     33        ret.selectedPosterIndex = [oldTran valueForKey:@"selectedPosterIndex"]; 
     34        ret.movie = movie; 
     35         
     36        NSEnumerator *posterEnum = [[oldTran valueForKey:@"posters"] objectEnumerator]; 
     37        NSManagedObject *oldPoster; 
     38        while((oldPoster = [posterEnum nextObject]) != nil) 
     39        { 
     40                [SapphireMoviePoster upgradeV1MoviePoster:oldPoster toTranslation:ret]; 
     41        } 
     42        return ret; 
     43} 
    2444 
    2545- (SapphireMoviePoster *)selectedPoster 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireSeason.h

    r551 r734  
    55@interface SapphireSeason : _SapphireSeason {} 
    66+ (SapphireSeason *)season:(int)season forShow:(NSString *)show withPath:(NSString *)showPath inContext:(NSManagedObjectContext *)moc; 
     7+ (SapphireSeason *)upgradeV1Season:(NSManagedObject *)oldSeason toShow:(SapphireTVShow *)show; 
    78 
    89- (NSComparisonResult)compare:(SapphireSeason *)other; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireSeason.m

    r622 r734  
    2323        ret.tvShow = tvshow; 
    2424        ret.seasonNumber = [NSNumber numberWithInt:season]; 
     25        return ret; 
     26} 
     27 
     28+ (SapphireSeason *)upgradeV1Season:(NSManagedObject *)oldSeason toShow:(SapphireTVShow *)show 
     29{ 
     30        NSManagedObjectContext *newMoc = [show managedObjectContext]; 
     31         
     32        SapphireSeason *ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireSeasonName inManagedObjectContext:newMoc]; 
     33        ret.seasonDescription = [oldSeason valueForKey:@"seasonDescription"]; 
     34        ret.seasonNumber = [oldSeason valueForKey:@"seasonNumber"]; 
     35        ret.tvShow = show; 
    2536        return ret; 
    2637} 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireSubEpisode.h

    r714 r734  
    88+ (SapphireSubEpisode *)createSubEpisode:(int)subNum inEpisode:(SapphireEpisode *)ep; 
    99+ (SapphireSubEpisode *)createSubEpisodeTitle:(NSString *)title inEpisode:(SapphireEpisode *)ep; 
     10+ (void)upgradeV1SubEpisode:(NSManagedObject *)oldEp toContext:(NSManagedObjectContext *)newMoc inEpisode:(SapphireEpisode *)ep; 
    1011 
    1112- (void)insertDictionary:(NSDictionary *)dict epIndex:(int)index; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireSubEpisode.m

    r718 r734  
    5555        ret.episodeTitle = title; 
    5656        return ret;              
     57} 
     58 
     59+ (void)upgradeV1SubEpisode:(NSManagedObject *)oldEp toContext:(NSManagedObjectContext *)newMoc inEpisode:(SapphireEpisode *)ep 
     60{ 
     61        SapphireSubEpisode *newEp = [NSEntityDescription insertNewObjectForEntityForName:SapphireSubEpisodeName inManagedObjectContext:newMoc]; 
     62        newEp.absoluteEpisodeNumber = [oldEp valueForKey:@"absoluteEpisodeNumber"]; 
     63        newEp.airDate = [oldEp valueForKey:@"airDate"]; 
     64        newEp.episodeDescription = [oldEp valueForKey:@"episodeDescription"]; 
     65        newEp.episodeNumber = [oldEp valueForKey:@"episodeNumber"]; 
     66        newEp.episodeTitle = [oldEp valueForKey:@"episodeTitle"]; 
     67        newEp.episode = ep; 
    5768} 
    5869 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVShow.h

    r551 r734  
    66+ (SapphireTVShow *)show:(NSString *)show withPath:(NSString *)showPath inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireTVShow *)showWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
     8+ (void)upgradeV1ShowsFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
    89 
    910- (NSComparisonResult)compare:(SapphireTVShow *)other; 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVShow.m

    r622 r734  
    77#import "NSString-Extensions.h" 
    88#import "SapphireFileSorter.h" 
     9#import "SapphireTVTranslation.h" 
    910 
    1011@implementation SapphireTVShow 
     
    3839        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"showPath == %@", path]; 
    3940        return (SapphireTVShow *)doSingleFetchRequest(SapphireTVShowName, moc, predicate); 
     41} 
     42 
     43+ (void)upgradeV1ShowsFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc 
     44{ 
     45        NSArray *oldShows = doFetchRequest(SapphireTVShowName, oldMoc, nil); 
     46        NSEnumerator *showEnum = [oldShows objectEnumerator]; 
     47        NSManagedObject *oldShow; 
     48        while((oldShow = [showEnum nextObject]) != nil) 
     49        { 
     50                SapphireTVShow *newShow = [NSEntityDescription insertNewObjectForEntityForName:SapphireTVShowName inManagedObjectContext:newMoc]; 
     51                newShow.name = [oldShow valueForKey:@"name"]; 
     52                newShow.showDescription = [oldShow valueForKey:@"showDescription"]; 
     53                newShow.showID = [oldShow valueForKey:@"showID"]; 
     54                newShow.showPath = [oldShow valueForKey:@"showPath"]; 
     55                 
     56                NSEnumerator *translationEnum = [[oldShow valueForKey:@"translations"] objectEnumerator]; 
     57                NSManagedObject *translation; 
     58                while((translation = [translationEnum nextObject]) != nil) 
     59                { 
     60                        [SapphireTVTranslation upgradeV1TVTranslation:translation toShow:newShow]; 
     61                } 
     62                 
     63                NSEnumerator *seasonEnum = [[oldShow valueForKey:@"seasons"] objectEnumerator]; 
     64                NSManagedObject *season; 
     65                while((season = [seasonEnum nextObject]) != nil) 
     66                { 
     67                        [SapphireSeason upgradeV1Season:season toShow:newShow];  
     68                } 
     69        } 
    4070} 
    4171 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVTranslation.h

    r540 r734  
    66+ (SapphireTVTranslation *)tvTranslationForName:(NSString *)name inContext:(NSManagedObjectContext *)moc; 
    77+ (SapphireTVTranslation *)createTVTranslationForName:(NSString *)name withPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
     8+ (SapphireTVTranslation *)upgradeV1TVTranslation:(NSManagedObject *)oldTran toShow:(SapphireTVShow *)show; 
    89@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVTranslation.m

    r578 r734  
    2323} 
    2424 
     25+ (SapphireTVTranslation *)upgradeV1TVTranslation:(NSManagedObject *)oldTran toShow:(SapphireTVShow *)show 
     26{ 
     27        NSManagedObjectContext *newMoc = [show managedObjectContext]; 
     28         
     29        SapphireTVTranslation *ret = [NSEntityDescription insertNewObjectForEntityForName:SapphireTVTranslationName inManagedObjectContext:newMoc]; 
     30        ret.name = [oldTran valueForKey:@"name"]; 
     31        ret.showPath = [oldTran valueForKey:@"showPath"]; 
     32        ret.tvShow = show; 
     33        return ret; 
     34} 
     35 
    2536@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLData.h

    r732 r734  
    1515        } 
    1616@interface SapphireXMLData : _SapphireXMLData {} 
     17+ (void)upgradeV1XMLFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup; 
    1718- (void)insertDictionary:(NSDictionary *)dict; 
    1819@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLData.m

    r591 r734  
    66#import "SapphireGenre.h" 
    77#import "SapphireDirector.h" 
     8#import "CoreDataSupportFunctions.h" 
    89 
    910#define MODIFIED_KEY                            @"Modified" 
     
    1112 
    1213@implementation SapphireXMLData 
     14 
     15+ (void)upgradeV1XMLFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc file:(NSDictionary *)fileLookup 
     16{ 
     17        NSArray *xmls = doFetchRequest(SapphireXMLDataName, oldMoc, nil); 
     18        NSEnumerator *xmlEnum = [xmls objectEnumerator]; 
     19        NSManagedObject *oldXML; 
     20        while((oldXML = [xmlEnum nextObject]) != nil) 
     21        { 
     22                NSString *path = [oldXML valueForKeyPath:@"file.path"]; 
     23                SapphireFileMetaData *file = nil; 
     24                if(path != nil) 
     25                        file = [fileLookup objectForKey:path]; 
     26                if(file == nil) 
     27                        continue; 
     28                 
     29                SapphireXMLData *newXML = [NSEntityDescription insertNewObjectForEntityForName:SapphireXMLDataName inManagedObjectContext:newMoc]; 
     30                newXML.contentDescription = [oldXML valueForKey:@"contentDescription"]; 
     31                newXML.fileClass = [oldXML valueForKey:@"fileClass"]; 
     32                newXML.modified = [oldXML valueForKey:@"modified"]; 
     33                newXML.summary = [oldXML valueForKey:@"summary"]; 
     34                newXML.title = [oldXML valueForKey:@"title"]; 
     35                 
     36                NSManagedObject *epXML = [oldXML valueForKey:@"episode"]; 
     37                if(epXML != nil) 
     38                        [SapphireXMLEpisodeData upgradeV1XMLEp:epXML toContext:newMoc inData:newXML]; 
     39                NSManagedObject *movieXML = [oldXML valueForKey:@"movie"]; 
     40                if(movieXML != nil) 
     41                        [SapphireXMLMovieData upgradeV1XMLMovie:movieXML toContext:newMoc inData:newXML]; 
     42                file.xmlData = newXML; 
     43                 
     44                SapphireXMLEpisodeData *episode = newXML.episode; 
     45                if(episode != nil && episode.episode == nil) 
     46                        [episode constructEpisode]; 
     47                SapphireXMLMovieData *movie = newXML.movie; 
     48                if(movie != nil && movie.movie == nil) 
     49                        [movie constructMovie]; 
     50        } 
     51} 
    1352 
    1453- (SapphireXMLEpisodeData *)episodeXMLData 
     
    133172        if(value != nil) 
    134173                self.fileClass = value; 
     174         
     175        tv = self.episode; 
     176        if(tv != nil && tv.episode == nil) 
     177                [tv constructEpisode]; 
     178        movie = self.movie; 
     179        if(movie != nil && movie.movie == nil) 
     180                [movie constructMovie];  
    135181} 
    136182 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLEpisodeData.h

    r557 r734  
    44 
    55@interface SapphireXMLEpisodeData : _SapphireXMLEpisodeData {} 
     6 
     7+ (void)upgradeV1XMLEp:(NSManagedObject *)oldEp toContext:(NSManagedObjectContext *)newMoc inData:(SapphireXMLData *)data; 
     8- (void)constructEpisode; 
     9 
    610@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLEpisodeData.m

    r557 r734  
    11#import "SapphireXMLEpisodeData.h" 
     2#import "SapphireXMLData.h" 
     3#import "SapphireEpisode.h" 
     4#import "SapphireFileMetaData.h" 
    25 
    36@implementation SapphireXMLEpisodeData 
    47 
    5 // Custom logic goes here. 
     8+ (void)upgradeV1XMLEp:(NSManagedObject *)oldEp toContext:(NSManagedObjectContext *)newMoc inData:(SapphireXMLData *)data 
     9{ 
     10        SapphireXMLEpisodeData *newData = [NSEntityDescription insertNewObjectForEntityForName:SapphireXMLEpisodeDataName inManagedObjectContext:newMoc]; 
     11         
     12        newData.absoluteEpisodeNumber = [oldEp valueForKey:@"absoluteEpisodeNumber"]; 
     13        newData.episodeNumber = [oldEp valueForKey:@"episodeNumber"]; 
     14        newData.lastEpisodeNumber = [oldEp valueForKey:@"lastEpisodeNumber"]; 
     15        newData.searchEpisode = [oldEp valueForKey:@"searchEpisode"]; 
     16        newData.searchLastEpisodeNumber = [oldEp valueForKey:@"searchLastEpisodeNumber"]; 
     17        newData.searchSeasonNumber = [oldEp valueForKey:@"searchSeasonNumber"]; 
     18        newData.searchShowName = [oldEp valueForKey:@"searchShowName"]; 
     19        newData.xml = data; 
     20} 
     21 
     22- (void)constructEpisode 
     23{ 
     24        int season = self.searchSeasonNumberValue; 
     25        NSString *show = self.searchShowName; 
     26         
     27        if(season == 0 || show == nil) 
     28                return; 
     29         
     30        int ep = self.searchEpisodeValue; 
     31        NSString *title = self.xml.title; 
     32         
     33        SapphireEpisode *ret; 
     34        if(ep != 0) 
     35        { 
     36                ret = [SapphireEpisode episode:ep inSeason:season forShow:show withPath:nil inContext:[self managedObjectContext]]; 
     37        } 
     38        else if(title != nil) 
     39        { 
     40                ret = [SapphireEpisode episodeTitle:title inSeason:season forShow:show withPath:nil inContext:[self managedObjectContext]]; 
     41        } 
     42        else 
     43                return; 
     44         
     45        self.episode = ret; 
     46        self.xml.file.tvEpisode = ret; 
     47} 
    648 
    749@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLMovieData.h

    r569 r734  
    44 
    55@interface SapphireXMLMovieData : _SapphireXMLMovieData {} 
     6+ (void)upgradeV1XMLMovie:(NSManagedObject *)oldMovie toContext:(NSManagedObjectContext *)newMoc inData:(SapphireXMLData *)data; 
    67- (NSArray *)orderedCast; 
    78- (void)setOrderedCast:(NSArray *)ordered; 
     
    1011- (NSArray *)orderedDirectors; 
    1112- (void)setOrderedDirectors:(NSArray *)ordered; 
     13- (void)constructMovie; 
    1214@end 
  • branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLMovieData.m

    r732 r734  
    55#import "SapphireMovie.h" 
    66#import "SapphireFileMetaData.h" 
     7#import "SapphireXMLData.h" 
    78 
    89#define ORDERED_CAST_KEY                @"orderedCast" 
     
    1415 
    1516@implementation SapphireXMLMovieData 
     17 
     18+ (void)upgradeV1XMLMovie:(NSManagedObject *)oldMovie toContext:(NSManagedObjectContext *)newMoc inData:(SapphireXMLData *)data 
     19{ 
     20        SapphireXMLMovieData *newMovie = [NSEntityDescription insertNewObjectForEntityForName:SapphireXMLMovieDataName inManagedObjectContext:newMoc]; 
     21        newMovie.orderedCastData = [oldMovie valueForKey:@"orderedCastData"]; 
     22        newMovie.orderedDirectorsData = [oldMovie valueForKey:@"orderedDirectorsData"]; 
     23        newMovie.orderedGenresData = [oldMovie valueForKey:@"orderedGenresData"]; 
     24        newMovie.xml = data; 
     25} 
    1626 
    1727- (NSArray *)orderedCast 
     
    153163} 
    154164 
     165- (void)constructMovie 
     166{ 
     167        int imdbNumber = self.searchIMDBNumberValue; 
     168        NSString *title = self.xml.title; 
     169        SapphireMovie *ret; 
     170        if(imdbNumber != 0) 
     171                ret = [SapphireMovie createMovieWithIMDB:imdbNumber inContext:[self managedObjectContext]]; 
     172        else if(title != nil) 
     173                ret = [SapphireMovie createMovieWithTitle:title inContext:[self managedObjectContext]]; 
     174        else 
     175                return; 
     176         
     177        self.movie = ret; 
     178        self.xml.file.movie = ret; 
     179} 
     180 
    155181@end 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireMetaDataSupport.h

    r696 r734  
    5252 * @brief Import the old plist into the context 
    5353 * 
     54 * @param v1Context The context to use for old objects 
     55 * @param context The context to use for new objects 
     56 * @param display The display for UI feedback 
     57 */ 
     58+ (void)importV1Store:(NSManagedObjectContext *)v1Context intoContext:(NSManagedObjectContext *)context withDisplay:(SapphireMetaDataUpgrading *)display; 
     59 
     60/*! 
     61 * @brief Import the old plist into the context 
     62 * 
    5463 * @param configDir The directory containing old configuration files 
    5564 * @param context The context to use for new objects 
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireMetaDataSupport.m

    r696 r734  
    3131#import "SapphireTVShow.h" 
    3232#import "SapphireMetaDataUpgrading.h" 
     33#import "SapphireDirector.h" 
     34#import "SapphireGenre.h" 
     35#import "SapphireDirectorySymLink.h" 
     36#import "SapphireFileSymLink.h" 
     37#import "SapphireEpisode.h" 
     38#import "SapphireXMLData.h" 
    3339 
    3440#define META_VERSION_KEY                        @"Version" 
     
    172178{ 
    173179        return [[SapphireMetaDataSupport sharedInstance] wasLocked]; 
     180} 
     181 
     182+ (void)importV1Store:(NSManagedObjectContext *)v1Context intoContext:(NSManagedObjectContext *)context withDisplay:(SapphireMetaDataUpgrading *)display 
     183{ 
     184        [display setCurrentFile:@"Upgrading Cast"]; 
     185        NSDictionary *castLookup = [SapphireCast upgradeV1CastFromContext:v1Context toContext:context]; 
     186        [display setCurrentFile:@"Upgrading Directors"]; 
     187        NSDictionary *directorLookup = [SapphireDirector upgradeV1DirectorsFromContext:v1Context toContext:context]; 
     188        [display setCurrentFile:@"Upgrading Genres"]; 
     189        NSDictionary *genreLookup = [SapphireGenre upgradeV1GenresFromContext:v1Context toContext:context]; 
     190        [display setCurrentFile:@"Upgrading Movies"]; 
     191        NSDictionary *movieLookup = [SapphireMovie upgradeV1MoviesFromContext:v1Context toContext:context withCast:castLookup directors:directorLookup genres:genreLookup]; 
     192        [display setCurrentFile:@"Upgrading Shows"]; 
     193        [SapphireTVShow upgradeV1ShowsFromContext:v1Context toContext:context]; 
     194        [display setCurrentFile:@"Upgrading Directories"]; 
     195        NSDictionary *dirLookup = [SapphireDirectoryMetaData upgradeV1DirectoriesFromContext:v1Context toContext:context]; 
     196        [display setCurrentFile:@"Upgrading Files"]; 
     197        NSDictionary *fileLookup = [SapphireFileMetaData upgradeV1FilesFromContext:v1Context toContext:context withMovies:movieLookup directories:dirLookup]; 
     198        [display setCurrentFile:@"Upgrading SymLinks"]; 
     199        [SapphireDirectorySymLink upgradeV1DirLinksFromContext:v1Context toContext:context directories:dirLookup]; 
     200        [SapphireFileSymLink upgradeV1FileLinksFromContext:v1Context toContext:context directories:dirLookup file:fileLookup]; 
     201        [display setCurrentFile:@"Upgrading Joined Files"]; 
     202        [SapphireJoinedFile upgradeV1JoinedFileFromContext:v1Context toContext:context file:fileLookup]; 
     203        [display setCurrentFile:@"Upgrading Episodes"]; 
     204        [SapphireEpisode upgradeV1EpisodesFromContext:v1Context toContext:context file:fileLookup]; 
     205        [display setCurrentFile:@"Upgrading XML"]; 
     206        [SapphireXMLData upgradeV1XMLFromContext:v1Context toContext:context file:fileLookup]; 
    174207} 
    175208 
  • branches/CoreData/SapphireFrappliance/main_debug.m

    r724 r734  
    2828#import "SapphireDirectoryMetaData.h" 
    2929#import "SapphireApplianceController.h" 
     30#import "SapphireMetaDataUpgrading.h" 
    3031 
    3132@interface TestFileScanning : NSObject <SapphireMetaDataScannerDelegate> 
     
    8081@end 
    8182 
     83@interface SapphireMetaDataUpgrading (debug) 
     84- (id)debugInit; 
     85- (void)doUpgrade:(id)obj; 
     86@end 
     87 
     88 
    8289 
    8390int main(int argc, char *argv[]) 
     
    9299        [bundle load]; 
    93100         
    94 //      NSString *storeFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Sapphire/metaData.sapphireData"]; 
    95         NSString *storeFile = @"/Volumes/frontrow/Library/Application Support/Sapphire/metaData.sapphireData"; 
    96         BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:storeFile]; 
    97         if(!exists) 
    98                 return 0; 
    99          
    100         NSManagedObjectContext *moc = [SapphireApplianceController createManagedObjectContextForFile:storeFile]; 
     101//      NSString *storeFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Sapphire/metaData.sapphireDataV2"]; 
     102////    NSString *storeFile = @"/Volumes/frontrow/Library/Application Support/Sapphire/metaData.sapphireData"; 
     103//      BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:storeFile]; 
     104//      if(!exists) 
     105//              return 0; 
     106//       
     107//      NSManagedObjectContext *moc = [SapphireApplianceController createManagedObjectContextForFile:storeFile]; 
    101108         
    102109        //Debug code goes here: 
    103 #define TESTING_FILE_SCANNING 
     110#define TESTING_UPGRADE 
     111#ifdef TESTING_UPGRADE 
     112        BOOL needed = [SapphireApplianceController upgradeNeeded]; 
     113        SapphireMetaDataUpgrading *upgrade = [[SapphireMetaDataUpgrading alloc] debugInit]; 
     114        [upgrade doUpgrade:nil]; 
     115#endif 
     116//#define TESTING_FILE_SCANNING 
    104117#ifdef TESTING_FILE_SCANNING 
    105118        NSMutableArray *collections = [[SapphireCollectionDirectory allCollectionsInContext:moc] mutableCopy];