Skip to content

Commit

Permalink
Improve PC-FX disc detection
Browse files Browse the repository at this point in the history
The data track is usually the second track so this fixes rips with multiple binaries in a cue sheet
  • Loading branch information
clobber committed May 22, 2015
1 parent d52dc32 commit d4ccf47
Showing 1 changed file with 21 additions and 17 deletions.
38 changes: 21 additions & 17 deletions OpenEmu/PC-FX/OEPCFXSystemController.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,38 +32,42 @@ @implementation OEPCFXSystemController

- (OECanHandleState)canHandleFile:(NSString *)path
{
NSString *dataTrack;
NSArray *dataTracks;
if([[[path pathExtension] lowercaseString] isEqualToString:@"ccd"])
{
OECloneCD *cueSheet = [[OECloneCD alloc] initWithURL:[NSURL fileURLWithPath:path]];
dataTrack = [cueSheet dataTrackPath];
OECloneCD *ccd = [[OECloneCD alloc] initWithURL:[NSURL fileURLWithPath:path]];
dataTracks = [ccd referencedFiles];
}
else if([[[path pathExtension] lowercaseString] isEqualToString:@"cue"])
{
OECUESheet *cueSheet = [[OECUESheet alloc] initWithPath:path];
dataTrack = [cueSheet dataTrackPath];
dataTracks = [cueSheet referencedFiles];
}

NSString *dataTrackPath = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:dataTrack];
NSLog(@"PC-FX data track path: %@", dataTrackPath);

BOOL handleFileExtension = [super canHandleFileExtension:[path pathExtension]];
OECanHandleState canHandleFile = OECanHandleNo;

if(handleFileExtension)
{
NSError *error = nil;
NSData *dataTrackBuffer = [NSData dataWithContentsOfFile:dataTrackPath options:NSDataReadingUncached error:&error];
for(id dataTrack in dataTracks)
{
NSString *dataTrackPath = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:dataTrack];

NSString* dataTrackString = @"PC-FX:Hu_CD-ROM ";
NSData* dataSearch = [dataTrackString dataUsingEncoding:NSUTF8StringEncoding];
// this still slows import down but we need to scan the disc as there's no common offset
NSRange indexOfData = [dataTrackBuffer rangeOfData: dataSearch options:0 range:NSMakeRange(0, [dataTrackBuffer length])];
NSError *error = nil;
NSData *dataTrackBuffer = [NSData dataWithContentsOfFile:dataTrackPath options:NSDataReadingUncached error:&error];

if(indexOfData.length > 0)
{
NSLog (@"'%@' at offset = 0x%lX", dataTrackString, indexOfData.location);
canHandleFile = OECanHandleYes;
NSString *dataTrackString = @"PC-FX:Hu_CD-ROM ";
NSData *dataSearch = [dataTrackString dataUsingEncoding:NSUTF8StringEncoding];
// this still slows import down but we need to scan the disc as there's no common offset
NSRange indexOfData = [dataTrackBuffer rangeOfData: dataSearch options:0 range:NSMakeRange(0, [dataTrackBuffer length])];

if(indexOfData.length > 0)
{
NSLog(@"PC-FX data track path: %@", dataTrackPath);
NSLog (@"'%@' at offset = 0x%lX", dataTrackString, indexOfData.location);
canHandleFile = OECanHandleYes;
break;
}
}
}
return canHandleFile;
Expand Down

0 comments on commit d4ccf47

Please sign in to comment.