From 3f6cb1bc1c1fd6629e714970e4b339f4609606f2 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Wed, 11 Aug 2021 17:33:02 -0700 Subject: [PATCH] VGMStream: Fix .txtp with option fragments in the filename --- Plugins/vgmstream/vgmstream/VGMContainer.m | 19 ++++++++++++++----- Plugins/vgmstream/vgmstream/VGMInterface.m | 10 ++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Plugins/vgmstream/vgmstream/VGMContainer.m b/Plugins/vgmstream/vgmstream/VGMContainer.m index 6f5abe7a7..894ce6b9c 100755 --- a/Plugins/vgmstream/vgmstream/VGMContainer.m +++ b/Plugins/vgmstream/vgmstream/VGMContainer.m @@ -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) { diff --git a/Plugins/vgmstream/vgmstream/VGMInterface.m b/Plugins/vgmstream/vgmstream/VGMInterface.m index 520644b18..3d930dc5d 100644 --- a/Plugins/vgmstream/vgmstream/VGMInterface.m +++ b/Plugins/vgmstream/vgmstream/VGMInterface.m @@ -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); }