// // SpotlightPlaylistEntry.m // Cog // // Created by Matthew Grinshpun on 11/02/08. // Copyright 2008 Matthew Leon Grinshpun. All rights reserved. // #import "SpotlightPlaylistEntry.h" // dictionary that lets us translate from and mdKey to an entryKey // if we need the help of a transformer, we use an nsarray // with format (entryKey, transformerName) static NSDictionary *importKeys; @implementation SpotlightPlaylistEntry + (void)initialize { // We need to translate the path string to a full URL NSArray *URLTransform = [NSArray arrayWithObjects:@"URL", @"PathToURLTransformer", nil]; // Extract the artist name from the authors array NSArray *artistTransform = [NSArray arrayWithObjects:@"artist", @"AuthorToArtistTransformer", nil]; // Track numbers must sometimes be converted from NSNumber to NSString NSArray *trackTransform = [NSArray arrayWithObjects:@"spotlightTrack", @"NumberToStringTransformer", nil]; importKeys = [[NSDictionary dictionaryWithObjectsAndKeys: @"title", @"kMDItemTitle", @"album", @"kMDItemAlbum", trackTransform, @"kMDItemAudioTrackNumber", @"year", @"kMDItemRecordingYear", @"genre", @"kMDItemMusicalGenre", @"length", @"kMDItemDurationSeconds", URLTransform, @"kMDItemPath", artistTransform, @"kMDItemAuthors", nil]retain]; } + (SpotlightPlaylistEntry *)playlistEntryWithMetadataItem:(NSMetadataItem *)metadataItem { SpotlightPlaylistEntry *entry = [[[SpotlightPlaylistEntry alloc]init]autorelease]; // loop through the keys we want to extract for (NSString *mdKey in importKeys) { id importTarget = [importKeys objectForKey:mdKey]; // Just copy the object from metadata if ([importTarget isKindOfClass:[NSString class]]) { [entry setValue: [metadataItem valueForAttribute:mdKey] forKey: importTarget]; } // Transform the value in metadata before copying it in else if ([importTarget isKindOfClass:[NSArray class]]) { NSString * importKey = [importTarget objectAtIndex:0]; NSValueTransformer *transformer = [NSValueTransformer valueTransformerForName:[importTarget objectAtIndex:1]]; id transformedValue = [transformer transformedValue: [metadataItem valueForAttribute:mdKey]]; [entry setValue:transformedValue forKey: importKey]; } // The importKeys dictionary contains something strange... else { NSString *errString = [NSString stringWithFormat:@"ERROR: Could not import key %@", mdKey]; NSAssert(NO, errString); } } return entry; } // Length is no longer a dependent key + (NSSet *)keyPathsForValuesAffectingLength { return nil; } - (void)dealloc { self.length = nil; self.spotlightTrack = nil; [super dealloc]; } @synthesize length; @synthesize spotlightTrack; @end