Changeset 1165 for branches

Show
Ignore:
Timestamp:
02/23/10 16:51:22 (2 years ago)
Author:
gbooker
Message:

Better handle files without extensions and preserve the lookup name better.
Fixes #283

Location:
branches/PlayerFramework/SapphireFrappliance
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • branches/PlayerFramework/SapphireFrappliance/Browser/SapphireMarkMenu.m

    r1092 r1165  
    289289                 
    290290                NSString *prettyName = [fileMeta prettyName]; 
    291                 if(prettyName != nil && [[[[fileMeta path] lastPathComponent] stringByDeletingPathExtension] caseInsensitiveCompare:prettyName] != NSOrderedSame) 
     291                if(prettyName != nil && [[fileMeta fileName] caseInsensitiveCompare:prettyName] != NSOrderedSame) 
    292292                { 
    293293                        [marks insertObject: 
     
    469469                NSString *savePath = [[joinList objectAtIndex:0] path]; 
    470470                BOOL hasmovExt = [[savePath pathExtension] isEqualToString:@"mov"]; 
    471                 NSString *base = [savePath stringByDeletingPathExtension]; 
     471                NSString *base = [[joinList objectAtIndex:0] extensionlessPath]; 
    472472                if([[base lowercaseString] hasSuffix:@" part 1"]) 
    473473                        base = [base substringToIndex:[base length] - 7]; 
     
    750750                        { 
    751751                                NSString *title = [NSString stringWithFormat:BRLocalizedString(@"Rename %@", @"Rename a file, directory, or collection, argument is path"), [fileMeta path]]; 
    752                                 NSString *oldName = [[[fileMeta path] lastPathComponent] stringByDeletingPathExtension]; 
     752                                NSString *oldName = [fileMeta fileName]; 
    753753                                 
    754754                                NSInvocation *invoke = [NSInvocation invocationWithMethodSignature:[fileMeta methodSignatureForSelector:@selector(rename:)]]; 
  • branches/PlayerFramework/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileMetaData.h

    r949 r1165  
    191191 
    192192/*! 
     193 * @brief Return the filename, minus the path extension 
     194 */ 
     195- (NSString *)fileName; 
     196 
     197/*! 
     198 * @brief Return the path, minus the path extension 
     199 */ 
     200- (NSString *)extensionlessPath; 
     201 
     202/*! 
    193203 * @brief Get the overridden show name 
    194204 * 
  • branches/PlayerFramework/SapphireFrappliance/MetaData/SapphireMObjects/SapphireFileMetaData.m

    r977 r1165  
    231231                        self.fileClassValue = FILE_CLASS_TV_SHOW; 
    232232                        NSString *epCoverPath = [[SapphireMetaDataSupport collectionArtPath] stringByAppendingPathComponent:[ep path]]; 
    233                         NSString *oldBasePath = [[epCoverPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:[self.path lastPathComponent]]; 
    234                         NSString *oldCoverPath = searchCoverArtExtForPath([oldBasePath stringByDeletingPathExtension]); 
     233                        NSString *oldBasePath = [[epCoverPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:[self fileName]]; 
     234                        NSString *oldCoverPath = searchCoverArtExtForPath(oldBasePath); 
    235235                        if(oldCoverPath != nil) 
    236236                        { 
     
    251251                        self.fileClassValue = FILE_CLASS_MOVIE; 
    252252                        NSString *movieCoverPath = [movie coverArtPath]; 
    253                         NSString *oldBasePath = [[[SapphireMetaDataSupport collectionArtPath] stringByAppendingPathComponent:@"@MOVIES"] stringByAppendingPathComponent:[self.path lastPathComponent]]; 
    254                         NSString *oldCoverPath = searchCoverArtExtForPath([oldBasePath stringByDeletingPathExtension]); 
     253                        NSString *oldBasePath = [[[SapphireMetaDataSupport collectionArtPath] stringByAppendingPathComponent:@"@MOVIES"] stringByAppendingPathComponent:[self fileName]]; 
     254                        NSString *oldCoverPath = searchCoverArtExtForPath(oldBasePath); 
    255255                        if(oldCoverPath != nil) 
    256256                        { 
     
    352352         
    353353        //Check XML 
    354         NSString *xmlFilePath=[[self.path stringByDeletingPathExtension] stringByAppendingPathExtension:@"xml"]; 
     354        NSString *xmlFilePath=[[self extensionlessPath] stringByAppendingPathExtension:@"xml"]; 
    355355        SapphireXMLData *xml = self.xmlData; 
    356356        NSDictionary *xmlProps = [fm fileAttributesAtPath:xmlFilePath traverseLink:YES]; 
     
    591591{ 
    592592        NSManagedObjectContext *moc = [self managedObjectContext]; 
    593         NSString *lowerFileName = [[self.path lastPathComponent] lowercaseString]; 
     593        NSString *lowerFileName = [[self fileName] lowercaseString]; 
    594594 
    595595        SapphireEpisode *ep = self.tvEpisode; 
     
    613613        else 
    614614                lookupName = lowerFileName; 
    615         SapphireMovieTranslation *movieTran = [SapphireMovieTranslation movieTranslationWithName:[lookupName stringByDeletingPathExtension] inContext:moc]; 
     615        SapphireMovieTranslation *movieTran = [SapphireMovieTranslation movieTranslationWithName:lookupName inContext:moc]; 
    616616        if(movieTran != nil) 
    617617        { 
     
    651651{ 
    652652        /*Find cover art for the current file in the "Cover Art" dir */ 
    653         NSString *subPath = [self path]; 
    654         if([self fileContainerTypeValue] != FILE_CONTAINER_TYPE_VIDEO_TS) 
    655                 subPath = [subPath stringByDeletingPathExtension]; 
     653        NSString *subPath = [self extensionlessPath]; 
    656654         
    657655        NSString *fileName = [subPath lastPathComponent]; 
     
    737735        [SapphireMetaDataSupport save:[self managedObjectContext]]; 
    738736        NSLog(@"Save done"); 
    739         NSString *extLessPath = [oldPath stringByDeletingPathExtension]; 
     737        NSString *extLessPath = [self extensionlessPath]; 
    740738        NSEnumerator *secondaryExtEnum = [secondaryFiles objectEnumerator]; 
    741739        NSString *extension; 
     740        NSString *newExtlessPath = newPath; 
     741        if(self.fileContainerTypeValue != FILE_CONTAINER_TYPE_VIDEO_TS) 
     742                newExtlessPath = [newExtlessPath stringByDeletingPathExtension]; 
    742743         
    743744        while((extension = [secondaryExtEnum nextObject]) != nil) 
     
    746747                if([fm fileExistsAtPath:secondaryPath]) 
    747748                { 
    748                         NSString *newSecondaryPath = [[newPath stringByDeletingPathExtension] stringByAppendingPathExtension:extension]; 
     749                        NSString *newSecondaryPath = [newExtlessPath stringByAppendingPathExtension:extension]; 
    749750                        if(newParent != nil) 
    750751                        { 
     
    767768        if(coverArtPath != nil) 
    768769        { 
    769                 NSString *newCoverArtPath = [[newPath stringByDeletingPathExtension] stringByAppendingPathExtension:[coverArtPath pathExtension]]; 
     770                NSString *newCoverArtPath = [newExtlessPath stringByAppendingPathExtension:[coverArtPath pathExtension]]; 
    770771                if(newParent != nil) 
    771772                { 
     
    800801                return BRLocalizedString(@"A File name should not contain any '/' characters", @"Error indicating that filenames cannot contain / characters"); 
    801802        NSString *oldPath = [self path]; 
    802         newFilename = [newFilename stringByAppendingPathExtension:[oldPath pathExtension]]; 
     803        if(self.fileContainerTypeValue != FILE_CONTAINER_TYPE_VIDEO_TS) 
     804                newFilename = [newFilename stringByAppendingPathExtension:[oldPath pathExtension]]; 
    803805        NSString *newPath = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newFilename]; 
    804806        if([oldPath isEqualToString:newPath]) 
     
    858860} 
    859861 
     862- (NSString *)fileName 
     863{ 
     864        NSString *ret = [self.path lastPathComponent]; 
     865        if(self.fileContainerTypeValue != FILE_CONTAINER_TYPE_VIDEO_TS) 
     866                ret = [ret stringByDeletingPathExtension]; 
     867         
     868        return ret; 
     869} 
     870 
     871- (NSString *)extensionlessPath 
     872{ 
     873        NSString *ret = self.path; 
     874        if(self.fileContainerTypeValue != FILE_CONTAINER_TYPE_VIDEO_TS) 
     875                ret = [ret stringByDeletingPathExtension]; 
     876         
     877        return ret; 
     878} 
     879 
    860880- (NSMutableDictionary *)getDisplayedMetaDataInOrder:(NSArray * *)order; 
    861881{ 
  • branches/PlayerFramework/SapphireFrappliance/MetaDataImporting/SapphireMovieImporter.m

    r1146 r1165  
    3232#import "SapphireURLLoader.h" 
    3333#import "SapphireScraper.h" 
     34#import "NSString-Extensions.h" 
    3435 
    3536@interface SapphireMovieImportStateData : SapphireImportStateData 
     
    157158                SapphireFileMetaData *metaData = state->file; 
    158159                NSManagedObjectContext *moc = [metaData managedObjectContext]; 
    159                 NSString *lookupName = [[state->lookupName lowercaseString] stringByDeletingPathExtension]; 
    160                 SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:lookupName inContext:moc]; 
     160                SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:state->lookupName inContext:moc]; 
    161161                [tran setIMDBLink:[[movies objectAtIndex:0] objectForKey:movieTranslationLinkKey]]; 
    162162                [self getMovieResultsForState:state translation:tran]; 
     
    167167                SapphireMovieChooser *chooser = [[SapphireMovieChooser alloc] initWithScene:[delegate chooserScene]]; 
    168168                [chooser setMovies:movies]; 
    169                 [chooser setFileName:state->lookupName];                 
     169                [chooser setFileName:[NSString stringByCroppingDirectoryPath:state->path toLength:3]]; 
    170170                [chooser setListTitle:BRLocalizedString(@"Select Movie Title", @"Prompt the user for title of movie")]; 
    171171                /*And display prompt*/ 
     
    265265                [infoIMDB setObject:movieTitle forKey:META_MOVIE_TITLE_KEY]; 
    266266         
    267         NSString *movieTranslationString = [[state->lookupName lowercaseString] stringByDeletingPathExtension]; 
    268267        SapphireFileMetaData *metaData = state->file; 
    269268        NSManagedObjectContext *moc = [metaData managedObjectContext]; 
    270         SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:movieTranslationString inContext:moc]; 
     269        SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:state->lookupName inContext:moc]; 
    271270        SapphireMovie *movie = [SapphireMovie movieWithDictionary:infoIMDB inContext:moc]; 
    272271        if(movie == nil) 
     
    342341                { 
    343342                        [posterChooser setPosters:previews]; 
    344                         [posterChooser setFileName:state->lookupName]; 
     343                        [posterChooser setFileName:[NSString stringByCroppingDirectoryPath:state->path toLength:3]]; 
    345344                        [posterChooser setFile:state->file]; 
    346345                        [posterChooser setListTitle:BRLocalizedString(@"Select Movie Poster", @"Prompt the user for poster selection")]; 
     
    430429                return ImportStateNotUpdated; 
    431430        SapphireLog(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_DEBUG, @"Going to movie import %@", path); 
    432         NSString *fileName = [path lastPathComponent]; 
     431        NSString *extLessPath = path; 
     432        if([metaData fileContainerTypeValue] != FILE_CONTAINER_TYPE_VIDEO_TS) 
     433                extLessPath = [extLessPath stringByDeletingPathExtension]; 
     434         
    433435        /*choose between file or directory name for lookup */ 
    434436        NSString *lookupName; 
    435437        if([[SapphireSettings sharedSettings] dirLookup]) 
    436                 lookupName = [[path stringByDeletingLastPathComponent] lastPathComponent]; 
    437         else 
    438                 lookupName = fileName; 
     438                lookupName = [[[path stringByDeletingLastPathComponent] lastPathComponent] lowercaseString]; 
     439        else 
     440                lookupName = [[extLessPath lastPathComponent] lowercaseString]; 
    439441         
    440442        SapphireSiteMovieScraper *siteScraper = [[[SapphireSiteMovieScraper alloc] initWithMovieScraper:scraper delegate:self loader:[SapphireApplianceController urlLoader]] autorelease]; 
     
    444446        NSString *movieDataLink = nil ; 
    445447        /*Check to see if we know this movie*/ 
    446         NSString *movieTranslationString = [[lookupName lowercaseString] stringByDeletingPathExtension]; 
    447         SapphireLog(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_DETAIL, @"Searching for movie %@", movieTranslationString); 
     448        SapphireLog(SAPPHIRE_LOG_IMPORT, SAPPHIRE_LOG_LEVEL_DETAIL, @"Searching for movie %@", state->lookupName); 
    448449        NSManagedObjectContext *moc = [metaData managedObjectContext]; 
    449         SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:movieTranslationString inContext:moc]; 
     450        SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:state->lookupName inContext:moc]; 
    450451        int searchIMDBNumber = [metaData searchIMDBNumber]; 
    451452        if(searchIMDBNumber > 0) 
    452453        { 
    453454                if(!tran) 
    454                         tran = [SapphireMovieTranslation createMovieTranslationWithName:movieTranslationString inContext:moc]; 
     455                        tran = [SapphireMovieTranslation createMovieTranslationWithName:state->lookupName inContext:moc]; 
    455456                [tran setIMDBLink:[NSString stringWithFormat:@"/title/tt%08d", searchIMDBNumber]]; 
    456457        } 
     
    458459        { 
    459460                BOOL nfoPathIsDir = NO; 
    460                 NSString *nfoFilePath=[[path stringByDeletingPathExtension] stringByAppendingPathExtension:@"nfo"]; 
     461                NSString *nfoFilePath=[extLessPath stringByAppendingPathExtension:@"nfo"]; 
    461462                NSString *moviePath = nil; 
    462463                if([[NSFileManager defaultManager] fileExistsAtPath:nfoFilePath isDirectory:&nfoPathIsDir] && !nfoPathIsDir) 
     
    472473                         
    473474                        /*Look for a year in the title*/ 
    474                         NSString *searchStr = [lookupName stringByDeletingPathExtension]; 
    475                         NSScanner *titleYearScanner = [NSScanner scannerWithString:searchStr]; 
     475                        NSScanner *titleYearScanner = [NSScanner scannerWithString:state->lookupName]; 
    476476                        NSString *normalTitle = nil; 
    477477                        int year = 0; 
     
    486486                        if(!success) 
    487487                        { 
    488                                 normalTitle = searchStr; 
     488                                normalTitle = state->lookupName; 
    489489                        } 
    490490                        else 
     
    537537                SapphireMovieChooser *movieChooser = (SapphireMovieChooser *)chooser; 
    538538                NSManagedObjectContext *moc = [state->file managedObjectContext]; 
    539                 NSString *filename = [[[movieChooser fileName] lowercaseString] stringByDeletingPathExtension]; 
    540                 SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:filename inContext:moc]; 
     539                SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:state->lookupName inContext:moc]; 
    541540                if([tran IMDBLink]) 
    542541                { 
     
    548547        { 
    549548                SapphirePosterChooser *posterChooser = (SapphirePosterChooser *)chooser; 
    550                 NSString *filename = [[[posterChooser fileName] lowercaseString] stringByDeletingPathExtension]; 
    551549                NSManagedObjectContext *moc = [state->file managedObjectContext]; 
    552                 SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:filename inContext:moc]; 
     550                SapphireMovieTranslation *tran = [SapphireMovieTranslation movieTranslationWithName:state->lookupName inContext:moc]; 
    553551                if([[tran selectedPoster] link]) 
    554552                { 
     
    585583                        /*They selected a movie title, save the translation and write it*/ 
    586584                        NSDictionary *movie = [[movieChooser movies] objectAtIndex:selection]; 
    587                         NSString *filename = [[[movieChooser fileName] lowercaseString] stringByDeletingPathExtension]; 
    588                         SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:filename inContext:moc]; 
     585                        SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:state->lookupName inContext:moc]; 
    589586                        /* Add IMDB Key */ 
    590587                        [tran setIMDBLink:[movie objectForKey:movieTranslationLinkKey]]; 
     
    605602                else 
    606603                { 
    607                         NSString *filename = [[[posterChooser fileName] lowercaseString] stringByDeletingPathExtension]; 
    608                         SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:filename inContext:moc]; 
     604                        SapphireMovieTranslation *tran = [SapphireMovieTranslation createMovieTranslationWithName:state->lookupName inContext:moc]; 
    609605                        [tran setSelectedPosterIndexValue:selectedPoster]; 
    610606                        [self saveMoviePosterAtURL:[[tran posterAtIndex:selectedPoster] link] forTranslation:tran]; 
  • branches/PlayerFramework/SapphireFrappliance/MetaDataImporting/SapphireNfoImporter.m

    r1044 r1165  
    4848        /*Check for NFO file*/ 
    4949        BOOL nfoPathIsDir = NO; 
    50         NSString *nfoFilePath=[[path stringByDeletingPathExtension] stringByAppendingPathExtension:@"nfo"]; 
     50        NSString *extLessPath = path; 
     51        if([metaData fileContainerTypeValue] != FILE_CONTAINER_TYPE_VIDEO_TS) 
     52                extLessPath = [extLessPath stringByDeletingPathExtension]; 
     53         
     54        NSString *nfoFilePath=[extLessPath stringByAppendingPathExtension:@"nfo"]; 
    5155        if(![fm fileExistsAtPath:nfoFilePath isDirectory:&nfoPathIsDir] || nfoPathIsDir) 
    5256                return ImportStateNotUpdated; 
  • branches/PlayerFramework/SapphireFrappliance/MetaDataImporting/SapphireTVShowImporter.m

    r1138 r1165  
    286286                SapphireShowChooser *chooser = [[SapphireShowChooser alloc] initWithScene:[delegate chooserScene]]; 
    287287                [chooser setShows:shows]; 
    288                 [chooser setFileName:[NSString stringByCroppingDirectoryPath:state->path toLength:3]];           
     288                [chooser setFileName:[NSString stringByCroppingDirectoryPath:state->path toLength:3]]; 
    289289                [chooser setListTitle:BRLocalizedString(@"Select Show Title", @"Prompt the user for showname with a file")]; 
    290290                /*And display prompt*/ 
     
    593593                return ImportStateNotUpdated; 
    594594        //      NSArray *pathComponents = [path pathComponents]; 
     595        NSString *extLessPath = path; 
     596        if([metaData fileContainerTypeValue] != FILE_CONTAINER_TYPE_VIDEO_TS) 
     597                extLessPath = [extLessPath stringByDeletingPathExtension]; 
     598 
    595599        NSString *fileName = [path lastPathComponent]; 
    596600         
     
    704708        { 
    705709                BOOL nfoPathIsDir = NO; 
    706                 NSString *nfoFilePath=[[path stringByDeletingPathExtension] stringByAppendingPathExtension:@"nfo"]; 
     710                NSString *nfoFilePath=[extLessPath stringByAppendingPathExtension:@"nfo"]; 
    707711                NSString *showPath = nil; 
    708712                if([[NSFileManager defaultManager] fileExistsAtPath:nfoFilePath isDirectory:&nfoPathIsDir] && !nfoPathIsDir) 
  • branches/PlayerFramework/SapphireFrappliance/MetaDataImporting/SapphireXMLFileDataImporter.m

    r1019 r1165  
    9999        /*Check for XML file*/ 
    100100        BOOL xmlPathIsDir = NO; 
    101         NSString *xmlFilePath=[[path stringByDeletingPathExtension] stringByAppendingPathExtension:@"xml"]; 
     101        NSString *extLessPath = path; 
     102        if([metaData fileContainerTypeValue] != FILE_CONTAINER_TYPE_VIDEO_TS) 
     103                extLessPath = [extLessPath stringByDeletingPathExtension]; 
     104 
     105        NSString *xmlFilePath=[extLessPath stringByAppendingPathExtension:@"xml"]; 
    102106        SapphireXMLData *xml = [metaData xmlData]; 
    103107        if(![fm fileExistsAtPath:xmlFilePath isDirectory:&xmlPathIsDir] || xmlPathIsDir)