cog/Plugins/M3u/M3uContainer.m

88 lines
2.2 KiB
Matlab
Raw Normal View History

//
// 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 18:56:23 +00:00
+ (NSArray *)mimeTypes
{
return [NSArray arrayWithObjects:@"audio/x-mpegurl", @"audio/mpegurl", nil];
}
+ (NSURL *)urlForPath:(NSString *)path relativeTo:(NSString *)baseFilename
{
if ([path hasPrefix:@"/"]) {
return [NSURL URLWithString:[@"file://" stringByAppendingString:path]];
}
NSRange protocolRange = [path rangeOfString:@"://"];
if (protocolRange.location != NSNotFound)
{
return [NSURL URLWithString:path];
}
NSMutableString *unixPath = [path mutableCopy];
//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;
}
+ (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