2007-10-08 21:20:46 -04:00
|
|
|
//
|
|
|
|
// M3uContainer.m
|
|
|
|
// M3u
|
|
|
|
//
|
|
|
|
// Created by Zaphod Beeblebrox on 10/8/07.
|
|
|
|
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "M3uContainer.h"
|
|
|
|
|
|
|
|
|
|
|
|
@implementation M3uContainer
|
|
|
|
|
|
|
|
+ (NSArray *)fileTypes
|
|
|
|
{
|
|
|
|
return [NSArray arrayWithObject:@"m3u"];
|
|
|
|
}
|
|
|
|
|
2007-10-14 15:56:23 -03:00
|
|
|
+ (NSArray *)mimeTypes
|
|
|
|
{
|
|
|
|
return [NSArray arrayWithObjects:@"audio/x-mpegurl", @"audio/mpegurl", nil];
|
|
|
|
}
|
|
|
|
|
2007-10-08 21:20:46 -04:00
|
|
|
+ (NSURL *)urlForPath:(NSString *)path relativeTo:(NSString *)baseFilename
|
|
|
|
{
|
|
|
|
if ([path hasPrefix:@"/"]) {
|
2007-10-15 19:19:14 -03:00
|
|
|
return [NSURL URLWithString:[@"file://" stringByAppendingString:path]];
|
2007-10-08 21:20:46 -04:00
|
|
|
}
|
|
|
|
|
2007-10-15 19:19:14 -03:00
|
|
|
NSRange protocolRange = [path rangeOfString:@"://"];
|
|
|
|
if (protocolRange.location != NSNotFound)
|
2007-10-08 21:20:46 -04:00
|
|
|
{
|
|
|
|
return [NSURL URLWithString:path];
|
|
|
|
}
|
2007-10-15 19:19:14 -03:00
|
|
|
|
2007-10-08 21:20:46 -04:00
|
|
|
NSMutableString *unixPath = [path mutableCopy];
|
|
|
|
|
|
|
|
//Only relative paths would have windows backslashes.
|
|
|
|
[unixPath replaceOccurrencesOfString:@"\\" withString:@"/" options:0 range:NSMakeRange(0, [unixPath length])];
|
2007-10-15 19:19:14 -03:00
|
|
|
|
|
|
|
NSMutableString *urlString = [[NSMutableString alloc] init];
|
|
|
|
[urlString setString:@"file://"];
|
|
|
|
|
|
|
|
NSString *basePath = [[[baseFilename stringByStandardizingPath] stringByDeletingLastPathComponent] stringByAppendingString:@"/"];
|
|
|
|
|
|
|
|
[urlString appendString:basePath];
|
|
|
|
[urlString appendString:unixPath];
|
|
|
|
|
|
|
|
[unixPath release];
|
2007-10-08 21:20:46 -04:00
|
|
|
|
2007-10-15 19:19:14 -03:00
|
|
|
NSURL *url = [NSURL URLWithString:urlString];
|
|
|
|
[urlString release];
|
|
|
|
|
|
|
|
return url;
|
2007-10-08 21:20:46 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
+ (NSArray *)urlsForContainerURL:(NSURL *)url
|
|
|
|
{
|
|
|
|
if (![url isFileURL])
|
|
|
|
return [NSArray array];
|
|
|
|
|
|
|
|
NSString *filename = [url path];
|
|
|
|
|
|
|
|
NSError *error = nil;
|
|
|
|
NSString *contents = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error];
|
|
|
|
if (error || !contents) {
|
|
|
|
NSLog(@"Could not open file...%@ %@", contents, error);
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
NSString *entry;
|
|
|
|
NSEnumerator *e = [[contents componentsSeparatedByString:@"\n"] objectEnumerator];
|
|
|
|
NSMutableArray *entries = [NSMutableArray array];
|
|
|
|
|
|
|
|
while (entry = [[e nextObject] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]])
|
|
|
|
{
|
|
|
|
if ([entry hasPrefix:@"#"] || [entry isEqualToString:@""]) //Ignore extra info
|
|
|
|
continue;
|
|
|
|
|
|
|
|
//Need to add basePath, and convert to URL
|
|
|
|
[entries addObject:[M3uContainer urlForPath:entry relativeTo:filename]];
|
|
|
|
}
|
|
|
|
|
|
|
|
return entries;
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|