Changeset 452

Show
Ignore:
Timestamp:
01/12/08 16:50:09 (1 year ago)
Author:
gbooker
Message:
  • Removed the pause and background callbacks to the data menu and instead the importers return an enum indicating if they skipped, imported, need to be paused, or backgrounded.
  • If an importer needed to be paused (selection menu), don't run the previous importers again when we resume.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/SapphireAllImporter.m

    r409 r452  
    2424@implementation SapphireAllImporter 
    2525 
    26 - (BOOL)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
     26- (ImportState)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
    2727{ 
    2828        return [super importMetaData:metaData]; 
  • trunk/SapphireFileDataImporter.m

    r419 r452  
    9696} 
    9797 
    98 - (BOOL) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
     98- (ImportState) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
    9999{ 
    100100        /*Initialization*/ 
    101         BOOL ret = NO; 
     101        ImportState ret = NO; 
    102102        NSFileManager *fm = [NSFileManager defaultManager]; 
    103103        /*Get the file*/ 
     
    119119                        [self importXMLFile:xmlFilePath forMeta:metaData] ; 
    120120                        xmlFileCount++ ; 
    121                         ret = YES
     121                        ret = IMPORT_STATE_UPDATED
    122122                } 
    123123        } 
     
    126126        { 
    127127                [[SapphireImportHelper sharedHelper] importFileData:metaData inform:dataMenu]; 
    128                 [dataMenu itemImportBackgrounded]
     128                ret = IMPORT_STATE_BACKGROUND
    129129        } 
    130130        /*Return whether we imported or not*/ 
  • trunk/SapphireImportHelper.m

    r433 r452  
    157157                        ret = updateMetaData([file file]); 
    158158                else 
    159                         ret = [allImporter importMetaData:[file file]]
     159                        ret = ([allImporter importMetaData:[file file]] == IMPORT_STATE_UPDATED)
    160160                [server importComplete:ret]; 
    161161        } 
  • trunk/SapphireImporterDataMenu.h

    r436 r452  
    2626 
    2727/*! 
     28 * @brief Status of an import 
     29 */ 
     30typedef enum{ 
     31        IMPORT_STATE_NOT_UPDATED,               /*!< @brief The data was not updated*/ 
     32        IMPORT_STATE_UPDATED,                   /*!< @brief The data was updated*/ 
     33        IMPORT_STATE_NEEDS_SUSPEND,             /*!< @brief The data update has been suspended; run it again later*/ 
     34        IMPORT_STATE_BACKGROUND,                /*!< @brief The data was backgrounded*/ 
     35} ImportState; 
     36 
     37/*! 
    2838 * @brief The importer protocol 
    2939 * 
     
    3646 * 
    3747 * @param metaData The file to import 
    38  * @return YES if imported, NO otherwise 
     48 * @return The state of the import 
    3949 */ 
    40 - (BOOL)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData; 
     50- (ImportState)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData; 
    4151 
    4252/*! 
     
    140150 
    141151/*! 
    142  * @brief Pause the import process 
    143  */ 
    144 - (void)pause; 
    145  
    146 /*! 
    147152 * @brief Resume the import process 
    148153 */ 
    149154- (void)resume; 
    150  
    151 /*! 
    152  * @brief Say that the file's import is backgrounded 
    153  */ 
    154 - (void)itemImportBackgrounded; 
    155155 
    156156/*! 
  • trunk/SapphireImporterDataMenu.m

    r445 r452  
    2929- (void)setFileProgress:(NSString *)updateFileProgress; 
    3030- (void)resetUIElements; 
     31- (void)pause; 
     32- (void)itemImportBackgrounded; 
    3133@end 
    3234 
     
    244246        BOOL ret = NO; 
    245247        @try { 
    246                 ret = [importer importMetaData:[importItems objectAtIndex:0]]; 
     248                ImportState result = [importer importMetaData:[importItems objectAtIndex:0]]; 
     249                switch(result) 
     250                { 
     251                        case IMPORT_STATE_UPDATED: 
     252                                ret = YES; 
     253                                break; 
     254                        case IMPORT_STATE_NEEDS_SUSPEND: 
     255                                [self pause]; 
     256                                ret = NO; 
     257                                break; 
     258                        case IMPORT_STATE_BACKGROUND: 
     259                                [self itemImportBackgrounded]; 
     260                                ret = NO; 
     261                                break; 
     262                } 
    247263        } 
    248264        @catch (NSException * e) { 
     
    356372- (void)itemImportBackgrounded 
    357373{ 
    358         if([importItems count]
     374        if([importItems count] && !suspended
    359375                [importItems removeObjectAtIndex:0]; 
    360376        backgrounded = YES; 
  • trunk/SapphireMovieImporter.m

    r436 r452  
    643643} 
    644644 
    645 /* - (BOOL) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData */ 
    646 - (BOOL) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData  
     645- (ImportState) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData  
    647646{ 
    648647        currentData = metaData; 
    649648        /*Check to see if it is already imported*/ 
    650649        if([metaData importedTimeFromSource:META_IMDB_IMPORT_KEY]) 
    651                 return NO
     650                return IMPORT_STATE_NOT_UPDATED
    652651        id controller = [[dataMenu stack] peekController]; 
    653652        /* Check to see if we are waiting on the user to select a show title */ 
     
    655654        { 
    656655                /* Another chooser is on the screen - delay further processing */ 
    657                 return NO
     656                return IMPORT_STATE_NOT_UPDATED
    658657        } 
    659658        /*Get path*/ 
    660659        NSString *path = [metaData path]; 
    661660        if(![self isMovieCandidate:[path pathExtension]]) 
    662                 return NO
     661                return IMPORT_STATE_NOT_UPDATED
    663662        /*Get fineName*/ 
    664663        NSString *fileName = [path lastPathComponent]; 
    665664        if([metaData fileClass]==FILE_CLASS_TV_SHOW) /* File is a TV Show - skip it */ 
    666                 return NO
     665                return IMPORT_STATE_NOT_UPDATED
    667666         
    668667        /*Get the movie title*/ 
     
    674673                if(dataMenu == nil) 
    675674                /*There is no data menu, background import. So we can't ask user, skip*/ 
    676                         return NO
     675                        return IMPORT_STATE_NOT_UPDATED
    677676                /*Ask the user what movie this is*/ 
    678677                NSArray *movies = [self searchResultsForMovie:fileName]; 
     
    683682                        [metaData importInfo:[NSMutableDictionary dictionary] fromSource:META_IMDB_IMPORT_KEY withTime:[[NSDate date] timeIntervalSince1970]]; 
    684683                        [metaData setFileClass:FILE_CLASS_OTHER]; 
    685                         return YES; 
    686                 } 
    687                 /*Pause for the user's input*/ 
    688                 [dataMenu pause]; 
     684                        return IMPORT_STATE_UPDATED; 
     685                } 
    689686                /*Bring up the prompt*/ 
    690687                SapphireMovieChooser *chooser = [[SapphireMovieChooser alloc] initWithScene:[dataMenu scene]]; 
     
    695692                [[dataMenu stack] pushController:chooser]; 
    696693                [chooser release]; 
    697                 return NO
     694                return IMPORT_STATE_NEEDS_SUSPEND
    698695                //Data will be ready for access on the next call 
    699696        } 
     
    707704                if(dataMenu == nil) 
    708705                /*There is no data menu, background import. So we can't ask user, skip*/ 
    709                         return NO
     706                        return IMPORT_STATE_NOT_UPDATED
    710707                /* Posters will be downloaded, let the user choose one */ 
    711708                [SapphireFrontRowCompat renderScene:[dataMenu scene]]; 
     
    733730                if([posters count]) 
    734731                { 
    735                         [dataMenu pause]; 
    736732                        posterChooser=[[SapphirePosterChooser alloc] initWithScene:[dataMenu scene]]; 
    737733                        if(![posterChooser okayToDisplay]) 
     
    754750                                [[dataMenu stack] pushController:posterChooser]; 
    755751                                [posterChooser release]; 
    756                                 return NO
     752                                return IMPORT_STATE_NEEDS_SUSPEND
    757753                        } 
    758754                        [dataMenu resume]; 
     
    798794                        [myDelegate autorelease]; 
    799795                } 
    800 //              return NO; 
    801796        } 
    802797        else if(autoSelectPoster) 
     
    820815        infoIMDB = [self getMetaForMovie:movieDataLink withPath:path]; 
    821816        if(!infoIMDB) 
    822                 return NO
     817                return IMPORT_STATE_NOT_UPDATED
    823818        [infoIMDB removeObjectForKey:IMDB_LINK_KEY]; 
    824819        [metaData importInfo:infoIMDB fromSource:META_IMDB_IMPORT_KEY withTime:[[NSDate date] timeIntervalSince1970]]; 
    825820        [metaData setFileClass:FILE_CLASS_MOVIE]; 
    826821        /*We imported something*/ 
    827         return YES
     822        return IMPORT_STATE_UPDATED
    828823} 
    829824 
  • trunk/SapphireMultipleImporter.h

    r407 r452  
    2828@interface SapphireMultipleImporter : NSObject <SapphireImporter>{ 
    2929        NSArray         *importers;             /*!< @brief The list of importers to use, in order*/ 
     30        int                     importIndex;    /*!< @brief The index of the next importer to run*/ 
     31        ImportState     resumedState;   /*!< @brief The state to use when we finally resume */ 
    3032} 
    3133 
  • trunk/SapphireMultipleImporter.m

    r409 r452  
    3131         
    3232        importers = [importerList retain]; 
     33        importIndex = 0; 
    3334         
    3435        return self; 
     
    4142} 
    4243 
    43 - (BOOL)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
     44- (ImportState)importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
    4445{ 
    45         BOOL ret = NO; 
    46         NSEnumerator *importEnum = [importers objectEnumerator]; 
    47         id <SapphireImporter> importer = nil; 
    48         while((importer = [importEnum nextObject]) != nil) 
    49                 ret |= [importer importMetaData:metaData]; 
     46        ImportState ret = resumedState; 
     47        int count = [importers count]; 
     48        for(;importIndex < count; importIndex++) 
     49        { 
     50                id <SapphireImporter> importer = [importers objectAtIndex:importIndex]; 
     51                ImportState result = [importer importMetaData:metaData]; 
     52                switch(result) 
     53                { 
     54                        case IMPORT_STATE_NEEDS_SUSPEND: 
     55                                resumedState = ret; 
     56                                return result; 
     57                        case IMPORT_STATE_BACKGROUND: 
     58                                ret = result; 
     59                                break; 
     60                        case IMPORT_STATE_UPDATED: 
     61                                if(ret != IMPORT_STATE_BACKGROUND) 
     62                                        ret = result; 
     63                                break; 
     64                } 
     65        } 
    5066         
     67        importIndex = 0; 
     68        resumedState = IMPORT_STATE_NOT_UPDATED; 
    5169        return ret; 
    5270} 
  • trunk/SapphireTVShowImporter.m

    r451 r452  
    478478} 
    479479 
    480 - (BOOL) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
     480- (ImportState) importMetaData:(id <SapphireFileMetaDataProtocol>)metaData 
    481481{ 
    482482        currentData = metaData; 
    483483        /*Check to see if it is already imported*/ 
    484484        if([metaData importedTimeFromSource:META_TVRAGE_IMPORT_KEY]) 
    485                 return NO
     485                return IMPORT_STATE_NOT_UPDATED
    486486        id controller = [[dataMenu stack] peekController]; 
    487487        /* Check to see if we are waiting on the user to select a movie title */ 
     
    489489        { 
    490490                /* Another chooser is on the screen - delay further processing */ 
    491                 return NO
     491                return IMPORT_STATE_NOT_UPDATED
    492492        } 
    493493        /*Get path*/ 
     
    528528        /*See if we found a match*/ 
    529529        if(index == NSNotFound) 
    530                 return NO
     530                return IMPORT_STATE_NOT_UPDATED
    531531         
    532532        /*Get the show title*/ 
     
    538538                if(dataMenu == nil) 
    539539                        /*There is no data menu, background import. So we can't ask user, skip*/ 
    540                         return NO
     540                        return IMPORT_STATE_NOT_UPDATED
    541541                /*Ask the user what show this is*/ 
    542542                NSArray *shows = [self searchResultsForSeries:searchStr]; 
    543                 /*Pause for the user's input*/ 
    544                 [dataMenu pause]; 
    545543                /*Bring up the prompt*/ 
    546544                SapphireShowChooser *chooser = [[SapphireShowChooser alloc] initWithScene:[dataMenu scene]]; 
     
    552550                [[dataMenu stack] pushController:chooser]; 
    553551                [chooser release]; 
    554                 return NO
     552                return IMPORT_STATE_NEEDS_SUSPEND
    555553        } 
    556554         
     
    571569        /*No season, no info*/ 
    572570        if(season == 0) 
    573                 return NO
     571                return IMPORT_STATE_NOT_UPDATED
    574572         
    575573        int otherEp = 0; 
     
    600598        /*No info, well, no info*/ 
    601599        if(!info) 
    602                 return NO
     600                return IMPORT_STATE_NOT_UPDATED
    603601                 
    604602        /* Lets process the cover art directory structure */ 
     
    637635         
    638636        /*We imported something*/ 
    639         return YES
     637        return IMPORT_STATE_UPDATED
    640638} 
    641639