VGMStream: Fix .txtp with option fragments in the filename

CQTexperiment
Christopher Snowhill 2021-08-11 17:33:02 -07:00
parent 4298a232fc
commit 3f6cb1bc1c
2 changed files with 24 additions and 5 deletions

View File

@ -31,13 +31,22 @@
+ (NSArray *)urlsForContainerURL:(NSURL *)url
{
if ([url fragment]) {
// input url already has fragment defined - no need to expand further
return [NSMutableArray arrayWithObject:url];
}
NSString * path = [[url absoluteString] stringByRemovingPercentEncoding];
if ([url fragment]) {
// input url might be a TXTP with fragment parameters, in which case
// we need to parse that anyway
NSString * frag = [url fragment];
NSUInteger len = [frag length];
if (len < 5 || ![[frag substringFromIndex:len - 5] isEqualToString:@".txtp"]) {
// input url already has fragment defined - no need to expand further
return [NSMutableArray arrayWithObject:url];
}
path = [path stringByAppendingFormat:@"%%23%@", frag];
url = [NSURL fileURLWithPath:[path stringByRemovingPercentEncoding]];
}
VGMSTREAM * stream = init_vgmstream_from_cogfile([path UTF8String], 0);
if (!stream)
{

View File

@ -96,6 +96,16 @@ STREAMFILE *cogsf_create_from_path(const char *path) {
NSString * urlString = [NSString stringWithUTF8String:path];
NSURL * url = [NSURL URLWithDataRepresentation:[urlString dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil];
if ([url fragment]) {
// .TXTP fragments need an override here
NSString * frag = [url fragment];
NSUInteger len = [frag length];
if (len > 5 && [[frag substringFromIndex:len - 5] isEqualToString:@".txtp"]) {
urlString = [urlString stringByReplacingOccurrencesOfString:@"#" withString:@"%23"];
url = [NSURL URLWithDataRepresentation:[urlString dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil];
}
}
return cogsf_create_from_url(url);
}