Changeset 966

Show
Ignore:
Timestamp:
11/16/09 20:07:37 (10 months ago)
Author:
gbooker
Message:

Made the virtual directory importer more global and at completed the custom virtual directory setup for tv directories.
Refs #313

Location:
trunk/SapphireFrappliance
Files:
2 added
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/SapphireFrappliance/FRAppliance/SapphireApplianceController.h

    r903 r966  
    2323#define DISTRIBUTED_MESSAGES_PORT 15473 
    2424 
    25 @class SapphireSettings, SapphireTheme, SapphireLeopardOnly, SapphireImporterDataMenu, SapphireBrowser, SapphireDistributedMessagesReceiver; 
     25@class SapphireSettings, SapphireTheme, SapphireLeopardOnly, SapphireImporterDataMenu, SapphireBrowser, SapphireDistributedMessagesReceiver, SapphireCustomVirtualDirectoryImporter; 
    2626 
    2727extern NSString *SAPPHIRE_MANAGED_OBJECT_CONTEXT_CLOSING; 
     
    141141 
    142142/*! 
     143 * @brief Gets the current custom virtual directory importer 
     144 * 
     145 * @return The current custom virtual directory importer 
     146 */ 
     147+ (SapphireCustomVirtualDirectoryImporter *)customVirtualDirectoryImporter; 
     148 
     149/*! 
    143150 * @brief Log an exception to the console 
    144151 * 
  • trunk/SapphireFrappliance/FRAppliance/SapphireApplianceController.m

    r903 r966  
    2727#import "SapphireBrowser.h" 
    2828#import "SapphireDirectoryMetaData.h" 
    29 #import "SapphireFileMetaData.h" 
    3029#import "SapphireSettings.h" 
    3130#import "SapphireTheme.h" 
    3231#import "SapphireCollectionDirectory.h" 
    33 #import "CoreDataSupportFunctions.h" 
    34 #import "SapphireEpisode.h" 
    3532 
    3633#import "SapphireImporterDataMenu.h" 
     
    4340#import "SapphireMetaDataSupport.h" 
    4441#import "SapphireEntityDirectory.h" 
    45 #import "SapphireTVShow.h" 
    4642#import "SapphireMovieDirectory.h" 
    4743#import "SapphireMarkMenu.h" 
    4844#import "SapphireDisplayMenu.h" 
    4945#import "SapphireAudioNowPlayingController.h" 
     46#import "SapphireTVDirectory.h" 
     47#import "SapphireCustomVirtualDirectoryImporter.h" 
    5048 
    5149#import "NSFileManager-Extensions.h" 
     
    248246} 
    249247 
     248+ (SapphireCustomVirtualDirectoryImporter *)customVirtualDirectoryImporter 
     249{ 
     250        static SapphireCustomVirtualDirectoryImporter *customVirtualDirectoryImporter = nil; 
     251        if(customVirtualDirectoryImporter == nil) 
     252                customVirtualDirectoryImporter = [[SapphireCustomVirtualDirectoryImporter alloc] initWithPath:[applicationSupportDir() stringByAppendingPathComponent:@"virtualDirs.xml"]]; 
     253        return customVirtualDirectoryImporter; 
     254} 
     255 
    250256+ (void)logException:(NSException *)e 
    251257{ 
     
    368374        SapphireSetLogLevel(SAPPHIRE_LOG_ALL, SAPPHIRE_LOG_LEVEL_ERROR); 
    369375        SapphireSetLogLevel(SAPPHIRE_LOG_METADATA_STORE, SAPPHIRE_LOG_LEVEL_DEBUG); 
     376        SapphireSetLogLevel(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_INFO); 
    370377         
    371378        distributed = [[SapphireDistributedMessagesReceiver alloc] initWithController:self]; 
     
    431438} 
    432439 
    433 NSArray *showEntityFetch(NSManagedObjectContext *moc, NSPredicate *filterPredicate) 
    434 { 
    435         NSPredicate *showPred = nil; 
    436         if(filterPredicate != nil) 
    437         { 
    438                 NSPredicate *fetchPredicate = [NSPredicate predicateWithFormat:@"tvEpisode != nil"]; 
    439                 NSPredicate *finalPred; 
    440                 if(filterPredicate == nil) 
    441                         finalPred = fetchPredicate; 
    442                 else 
    443                         finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:filterPredicate, fetchPredicate, nil]]; 
    444                 NSArray *files = doFetchRequest(SapphireFileMetaDataName, moc, finalPred); 
    445                  
    446                 NSSet *epIds = [NSSet setWithArray:[files valueForKeyPath:@"tvEpisode.objectID"]]; 
    447                 NSPredicate *epPred = [NSPredicate predicateWithFormat:@"SELF IN %@", epIds]; 
    448                 NSArray *episodes = doFetchRequest(SapphireEpisodeName, moc, epPred); 
    449                  
    450                 NSSet *showIds = [NSSet setWithArray:[episodes valueForKeyPath:@"tvShow.objectID"]]; 
    451                 showPred = [NSPredicate predicateWithFormat:@"SELF IN %@", showIds]; 
    452         } 
    453         return doFetchRequest(SapphireTVShowName, moc, showPred); 
    454 } 
    455  
    456440- (SapphireBrowser *)tvBrowser 
    457441{ 
    458442        BRTexture *predicateGem = [SapphireApplianceController gemForPredicate:[SapphireApplianceController predicate]]; 
    459         SapphireEntityDirectory *tvDir = [[SapphireEntityDirectory alloc] initWithEntityFetch:showEntityFetch inContext:moc]; 
    460         [tvDir setMetaFileFetchPredicate:[NSPredicate predicateWithFormat:@"tvEpisode != nil"]]; 
     443        SapphireTVDirectory *tvDir = [[SapphireTVDirectory alloc] initWithContext:moc]; 
    461444        SapphireBrowser *tvBrowser = [[SapphireBrowser alloc] initWithScene:[self scene] metaData:tvDir]; 
    462445        [tvDir release]; 
  • trunk/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVShow.h

    r734 r966  
    77+ (SapphireTVShow *)showWithPath:(NSString *)path inContext:(NSManagedObjectContext *)moc; 
    88+ (void)upgradeV1ShowsFromContext:(NSManagedObjectContext *)oldMoc toContext:(NSManagedObjectContext *)newMoc; 
     9+ (NSArray *)sortMethods; 
    910 
    1011- (NSComparisonResult)compare:(SapphireTVShow *)other; 
  • trunk/SapphireFrappliance/MetaData/SapphireMObjects/SapphireTVShow.m

    r849 r966  
    6868                } 
    6969        } 
     70} 
     71 
     72+ (NSArray *)sortMethods 
     73{ 
     74        return allowedSorts; 
    7075} 
    7176 
  • trunk/SapphireFrappliance/MetaData/Support/SapphireCustomVirtualDirectoryImporter.m

    r963 r966  
    7373//TVShow specifice attributes 
    7474#define TV_SHOW_SEASON_ELEM                             @"season" 
    75 #define TV_SHOW_SHOW_ELEM                               @"showTitle" 
     75#define TV_SHOW_SHOW_ELEM                               @"showtitle" 
    7676#define TV_SHOW_EPISODE_ELEM                    @"episode" 
    77 #define TV_SHOW_ABS_EPISODE_ELEM                @"episodeNumber" 
     77#define TV_SHOW_ABS_EPISODE_ELEM                @"episodenumber" 
    7878#define TV_SHOW_EPISODE_TITLE_ELEM              @"title" 
    7979#define TV_SHOW_EPISODE_DESC_ELEM               @"description" 
    80 #define TV_SHOW_AIR_DATE_ELEM                   @"airDate" 
     80#define TV_SHOW_AIR_DATE_ELEM                   @"airdate" 
    8181 
    8282typedef enum { 
     
    171171                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatElementString formatString:@"ANY tvEpisode.subEpisodes.episodeTitle"], TV_SHOW_EPISODE_TITLE_ELEM, 
    172172                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatElementString formatString:@"ANY tvEpisode.subEpisodes.episodeDescription"], TV_SHOW_EPISODE_DESC_ELEM, 
    173                                                                                 [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"tvEpisode.season.seasonNumber"], TV_SHOW_SEASON_ELEM, 
    174                                                                                 [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"ANY tvEpisode.subEpisodes.episodeNumber"], TV_SHOW_EPISODE_ELEM, 
    175                                                                                 [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"ANY tvEpisode.subEpisodes.episodeNumber"], TV_SHOW_ABS_EPISODE_ELEM, 
    176                                                                                 [SapphireCommandWrapper commandWithType:CommandTypeFormatNSDateValue formatString:@"ANY tvEpisode.subEpisodes.airDate"], TV_SHOW_AIR_DATE_ELEM, 
     173                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"tvEpisode.season.seasonNumber == %d"], TV_SHOW_SEASON_ELEM, 
     174                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"ANY tvEpisode.subEpisodes.episodeNumber == %d"], TV_SHOW_EPISODE_ELEM, 
     175                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatIntValue formatString:@"ANY tvEpisode.subEpisodes.episodeNumber == %d"], TV_SHOW_ABS_EPISODE_ELEM, 
     176                                                                                [SapphireCommandWrapper commandWithType:CommandTypeFormatNSDateValue formatString:@"ANY tvEpisode.subEpisodes.airDate >= %@"], TV_SHOW_AIR_DATE_ELEM, 
    177177                                                                                nil]; 
    178178                 
     
    221221        { 
    222222                matchPred = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:basePredicate, matchPred, nil]]; 
    223                 SapphireLog(SAPPHIRE_LOG_ALL, SAPPHIRE_LOG_LEVEL_INFO, @"Creating virtual directory with filter: %@", matchPred); 
     223                SapphireLog(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_INFO, @"Creating virtual directory with filter: %@", matchPred); 
    224224                [virtualDir setPredicate:matchPred]; 
    225225        } 
     
    235235{ 
    236236        /*Check for XML file*/ 
    237         SapphireLog(SAPPHIRE_LOG_ALL, SAPPHIRE_LOG_LEVEL_DETAIL, @"Looking for file: %@", path); 
     237        SapphireLog(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_DETAIL, @"Looking for file: %@", path); 
    238238        NSFileManager *fm = [NSFileManager defaultManager]; 
    239239        BOOL xmlPathIsDir = NO; 
  • trunk/SapphireFrappliance/MetaData/Support/SapphireMovieDirectory.h

    r934 r966  
    2222#import "SapphireBasicDirectoryFunctionsDefines.h" 
    2323 
    24 @class SapphireMovieVirtualDirectoryImporter; 
    25  
    2624/*! 
    2725 * @brief The base movies virtual directory 
     
    3735        NSArray                                                 *virtualDirs;           /*!< @brief The virtual directories last imported*/ 
    3836        NSArray                                                 *defaultSorters;        /*!< @brief The list of default file sorters*/ 
    39         SapphireMovieVirtualDirectoryImporter   *vdImport;      /*!< @brief The virtial directory importer*/ 
    4037        Basic_Directory_Function_Instance_Variables 
    4138} 
  • trunk/SapphireFrappliance/MetaData/Support/SapphireMovieDirectory.m

    r963 r966  
    127127         
    128128        NSString *moviePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"video_H" ofType:@"png"]; 
    129         vdImport = [[SapphireCustomVirtualDirectoryImporter alloc] initWithPath:[applicationSupportDir() stringByAppendingPathComponent:@"virtualDirs.xml"]]; 
    130129        defaultSorters = [[NSArray alloc] initWithObjects:titleSort, dateSort, imdbRatingSort, nil]; 
    131130         
     
    169168        [virtualDirs release]; 
    170169        [defaultSorters release]; 
    171         [vdImport release]; 
    172170        Basic_Directory_Function_Deallocs 
    173171        [super dealloc]; 
     
    221219{ 
    222220        /*Import any defined movie virtual directories*/ 
    223         NSArray *newVirtualDirs = [vdImport movieVirtualDirectories]; 
     221        NSArray *newVirtualDirs = [[SapphireApplianceController customVirtualDirectoryImporter] movieVirtualDirectories]; 
    224222        if(![virtualDirs isEqualToArray:newVirtualDirs]) 
    225223        { 
     
    238236                        SapphireFilteredFileDirectory *custom = [[SapphireFilteredFileDirectory alloc] initWithPredicate:[virtualDir predicate] Context:moc]; 
    239237                        [subDirs addObject:custom]; 
    240                         [names addObject:BRLocalizedString([virtualDir title], [virtualDir description])]; 
     238                        [names addObject:[virtualDir title]]; 
    241239                        [custom setPath:[[VIRTUAL_DIR_ROOT_PATH stringByAppendingString:@"/"] stringByAppendingString:[virtualDir description]]]; 
    242240                        [custom setCoverArtPath:moviePath]; // Change this to be part of the XML? 
  • trunk/SapphireFrappliance/Sapphire.xcodeproj/project.pbxproj

    r962 r966  
    6363                F50040110D1998FA003FEA08 /* SapphireLeopardFileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = F500400F0D1998FA003FEA08 /* SapphireLeopardFileEvents.m */; }; 
    6464                F50044160D19A268003FEA08 /* LeopardOnly.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F5003FF90D19980B003FEA08 /* LeopardOnly.framework */; }; 
     65                F506593110B22EC800D0F1FE /* SapphireTVDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = F506593010B22EC800D0F1FE /* SapphireTVDirectory.m */; }; 
    6566                F51BFC1B0D26ACAD00E22363 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F56A19480C3170870022918E /* AppKit.framework */; }; 
    6667                F51BFC1C0D26ACAD00E22363 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 089C1672FE841209C02AAC07 /* Foundation.framework */; }; 
     
    393394                F500400E0D1998FA003FEA08 /* SapphireLeopardFileEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SapphireLeopardFileEvents.h; sourceTree = "<group>"; }; 
    394395                F500400F0D1998FA003FEA08 /* SapphireLeopardFileEvents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SapphireLeopardFileEvents.m; sourceTree = "<group>"; }; 
     396                F506592F10B22EC800D0F1FE /* SapphireTVDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SapphireTVDirectory.h; sourceTree = "<group>"; }; 
     397                F506593010B22EC800D0F1FE /* SapphireTVDirectory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SapphireTVDirectory.m; sourceTree = "<group>"; }; 
    395398                F5185B400D1344D700712020 /* ExceptionHandling.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExceptionHandling.framework; path = /System/Library/Frameworks/ExceptionHandling.framework; sourceTree = "<absolute>"; }; 
    396399                F51BFD2D0D26BDF300E22363 /* SapphireCompatibilityClasses.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SapphireCompatibilityClasses.xcodeproj; path = ../SapphireCompatibilityClasses/SapphireCompatibilityClasses.xcodeproj; sourceTree = "<group>"; }; 
     
    10481051                                F5C55ECC0DE90F7000661563 /* SapphireObjectDirectory.h */, 
    10491052                                F5C55ECD0DE90F7000661563 /* SapphireObjectDirectory.m */, 
     1053                                F506592F10B22EC800D0F1FE /* SapphireTVDirectory.h */, 
     1054                                F506593010B22EC800D0F1FE /* SapphireTVDirectory.m */, 
    10501055                        ); 
    10511056                        path = Support; 
     
    14251430                                5941C04810786ECA004C887B /* SapphireCustomVirtualDirectoryImporter.m in Sources */, 
    14261431                                F5A9A89510A7A69600BA95CD /* NSXMLDocument-Extensions.m in Sources */, 
     1432                                F506593110B22EC800D0F1FE /* SapphireTVDirectory.m in Sources */, 
    14271433                        ); 
    14281434                        runOnlyForDeploymentPostprocessing = 0;