// // DumbMetadataReader.m // Dumb // // Created by Vincent Spader on 10/12/07. // Copyright 2007 __MyCompanyName__. All rights reserved. // #import "DumbMetadataReader.h" #import "DumbDecoder.h" #import #import "Logging.H" @implementation DumbMetadataReader + (NSArray *)fileTypes { return [DumbDecoder fileTypes]; } + (NSArray *)mimeTypes { return [DumbDecoder mimeTypes]; } + (float)priority { return 1.0f; } + (NSDictionary *)metadataForURL:(NSURL *)url { id audioSourceClass = NSClassFromString(@"AudioSource"); id source = [audioSourceClass audioSourceForURL:url]; if(![source open:url]) return 0; if(![source seekable]) return 0; [source seek:0 whence:SEEK_END]; long size = [source tell]; [source seek:0 whence:SEEK_SET]; void *data = malloc(size); [source read:data amount:size]; DUMBFILE *df = dumbfile_open_memory_and_free(data, size); if(!df) { ALog(@"Open failed for file: %@", [url absoluteString]); return NO; } DUH *duh; NSString *ext = [[url pathExtension] lowercaseString]; duh = dumb_read_any_quick(df, [ext isEqualToString:@"mod"] ? 0 : 1, 0); dumbfile_close(df); if(!duh) { ALog(@"Failed to create duh"); return nil; } // Some titles are all spaces?! NSString *title = [[NSString stringWithUTF8String:duh_get_tag(duh, "TITLE")] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; unload_duh(duh); if(title == nil) { title = @""; } return [NSDictionary dictionaryWithObject:title forKey:@"title"]; } @end