From 47582ae4f4c6bae072ac1ae8265ee4a7a9186c37 Mon Sep 17 00:00:00 2001 From: vspader Date: Mon, 15 Oct 2007 22:57:30 +0000 Subject: [PATCH] Fixed playlist saving/loading bug. --- Plugins/CueSheet/CueSheet.m | 42 +++++++++++++++++------------------ Plugins/M3u/M3uContainer.m | 44 ++++++++++++++++++------------------- Plugins/Pls/PlsContainer.m | 42 +++++++++++++++++------------------ 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/Plugins/CueSheet/CueSheet.m b/Plugins/CueSheet/CueSheet.m index 9adeda960..332d8afea 100644 --- a/Plugins/CueSheet/CueSheet.m +++ b/Plugins/CueSheet/CueSheet.m @@ -18,10 +18,6 @@ - (NSURL *)urlForPath:(NSString *)path relativeTo:(NSString *)baseFilename { - if ([path hasPrefix:@"/"]) { - return [NSURL URLWithString:[@"file://" stringByAppendingString:path]]; - } - NSRange protocolRange = [path rangeOfString:@"://"]; if (protocolRange.location != NSNotFound) { @@ -29,24 +25,28 @@ } NSMutableString *unixPath = [path mutableCopy]; + + NSString *fragment = @""; + NSRange fragmentRange = [path rangeOfString:@"#"]; + if (fragmentRange.location != NSNotFound) + { + fragmentRange = NSMakeRange(fragmentRange.location, [unixPath length] - fragmentRange.location); + + fragment = [unixPath substringWithRange:fragmentRange]; + [unixPath deleteCharactersInRange:fragmentRange]; + } + + if (![unixPath hasPrefix:@"/"]) { + //Only relative paths would have windows backslashes. + [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; + + NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; + + [unixPath insertString:basePath atIndex:0]; + } - //Only relative paths would have windows backslashes. - [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; - - NSMutableString *urlString = [[NSMutableString alloc] init]; - [urlString setString:@"file://"]; - - NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; - - [urlString appendString:basePath]; - [urlString appendString:unixPath]; - - [unixPath release]; - - NSURL *url = [NSURL URLWithString:urlString]; - [urlString release]; - - return url; + //Append the fragment + return [NSURL URLWithString:[[[NSURL fileURLWithPath:unixPath] absoluteString] stringByAppendingString: fragment]]; } - (void)parseFile:(NSString *)filename diff --git a/Plugins/M3u/M3uContainer.m b/Plugins/M3u/M3uContainer.m index 8873b7dd5..012f47e61 100644 --- a/Plugins/M3u/M3uContainer.m +++ b/Plugins/M3u/M3uContainer.m @@ -23,10 +23,6 @@ + (NSURL *)urlForPath:(NSString *)path relativeTo:(NSString *)baseFilename { - if ([path hasPrefix:@"/"]) { - return [NSURL URLWithString:[@"file://" stringByAppendingString:path]]; - } - NSRange protocolRange = [path rangeOfString:@"://"]; if (protocolRange.location != NSNotFound) { @@ -34,24 +30,28 @@ } NSMutableString *unixPath = [path mutableCopy]; + + NSString *fragment = @""; + NSRange fragmentRange = [path rangeOfString:@"#"]; + if (fragmentRange.location != NSNotFound) + { + fragmentRange = NSMakeRange(fragmentRange.location, [unixPath length] - fragmentRange.location); + + fragment = [unixPath substringWithRange:fragmentRange]; + [unixPath deleteCharactersInRange:fragmentRange]; + } + + if (![unixPath hasPrefix:@"/"]) { + //Only relative paths would have windows backslashes. + [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; + + NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; + + [unixPath insertString:basePath atIndex:0]; + } - //Only relative paths would have windows backslashes. - [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; - - NSMutableString *urlString = [[NSMutableString alloc] init]; - [urlString setString:@"file://"]; - - NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; - - [urlString appendString:basePath]; - [urlString appendString:unixPath]; - - [unixPath release]; - - NSURL *url = [NSURL URLWithString:urlString]; - [urlString release]; - - return url; + //Append the fragment + return [NSURL URLWithString:[[[NSURL fileURLWithPath:unixPath] absoluteString] stringByAppendingString: fragment]]; } + (NSArray *)urlsForContainerURL:(NSURL *)url @@ -78,7 +78,7 @@ continue; //Need to add basePath, and convert to URL - [entries addObject:[M3uContainer urlForPath:entry relativeTo:filename]]; + [entries addObject:[self urlForPath:entry relativeTo:filename]]; } return entries; diff --git a/Plugins/Pls/PlsContainer.m b/Plugins/Pls/PlsContainer.m index c3c12cdb6..db1553e53 100644 --- a/Plugins/Pls/PlsContainer.m +++ b/Plugins/Pls/PlsContainer.m @@ -23,10 +23,6 @@ + (NSURL *)urlForPath:(NSString *)path relativeTo:(NSString *)baseFilename { - if ([path hasPrefix:@"/"]) { - return [NSURL URLWithString:[@"file://" stringByAppendingString:path]]; - } - NSRange protocolRange = [path rangeOfString:@"://"]; if (protocolRange.location != NSNotFound) { @@ -34,24 +30,28 @@ } NSMutableString *unixPath = [path mutableCopy]; + + NSString *fragment = @""; + NSRange fragmentRange = [path rangeOfString:@"#"]; + if (fragmentRange.location != NSNotFound) + { + fragmentRange = NSMakeRange(fragmentRange.location, [unixPath length] - fragmentRange.location); + + fragment = [unixPath substringWithRange:fragmentRange]; + [unixPath deleteCharactersInRange:fragmentRange]; + } + + if (![unixPath hasPrefix:@"/"]) { + //Only relative paths would have windows backslashes. + [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; + + NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; + + [unixPath insertString:basePath atIndex:0]; + } - //Only relative paths would have windows backslashes. - [unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])]; - - NSMutableString *urlString = [[NSMutableString alloc] init]; - [urlString setString:@"file://"]; - - NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"]; - - [urlString appendString:basePath]; - [urlString appendString:unixPath]; - - [unixPath release]; - - NSURL *url = [NSURL URLWithString:urlString]; - [urlString release]; - - return url; + //Append the fragment + return [NSURL URLWithString:[[[NSURL fileURLWithPath:unixPath] absoluteString] stringByAppendingString: fragment]]; } + (NSArray *)urlsForContainerURL:(NSURL *)url