diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index 3b71dbba9..f156cdf4a 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -152,20 +152,22 @@ - (void)readMetaData:(id)entries { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int i; for (i = 0; i < [entries count]; i++) { PlaylistEntry *pe =[entries objectAtIndex:i]; -// [pe readInfo]; - [pe performSelectorOnMainThread:@selector(readInfo) withObject:nil waitUntilDone:YES]; -// [pe readTags]; - [pe performSelectorOnMainThread:@selector(readTags) withObject:nil waitUntilDone:YES]; + [pe readInfoThread]; +// [pe performSelectorOnMainThread:@selector(readInfoThread) withObject:nil waitUntilDone:YES]; + [pe readTagsThread]; +// [pe performSelectorOnMainThread:@selector(readTagsThread) withObject:nil waitUntilDone:YES]; } [self performSelectorOnMainThread:@selector(updateTotalTime) withObject:nil waitUntilDone:NO]; [entries release]; + [pool release]; } - (void)addPaths:(NSArray *)paths sort:(BOOL)sort diff --git a/Playlist/PlaylistEntry.m b/Playlist/PlaylistEntry.m index f524b6923..94e387d83 100644 --- a/Playlist/PlaylistEntry.m +++ b/Playlist/PlaylistEntry.m @@ -217,6 +217,7 @@ sampleRate = [sf frequency]; [self setLengthString:length]; + [sf release]; // DBLog(@"Length: %f bitRate: %i channels: %i bps: %i samplerate: %f", length, bitRate, channels, bitsPerSample, sampleRate); @@ -224,6 +225,28 @@ // [sp close]; } +- (void)readInfoThreadSetVariables:(SoundFile *)sf +{ + length = [sf length]; + bitRate = [sf bitRate]; + channels = [sf channels]; + bitsPerSample = [sf bitsPerSample]; + sampleRate = [sf frequency]; + + [self setLengthString:length]; + + [sf release]; +} + +- (void)readInfoThread +{ + SoundFile *sf = [SoundFile readInfo:filename]; + if (sf == nil) + return; + + [self performSelectorOnMainThread:@selector(readInfoThreadSetVariables:) withObject:sf waitUntilDone:YES]; +} + - (NSString *)lengthString { return lengthString; @@ -323,4 +346,101 @@ } } +- (void)readTagsThreadSetVariables: (NSArray *)a +{ + + [self setDisplay:[a objectAtIndex:0]]; + NSLog(@"SETTING TITLE TO: %@", [a objectAtIndex:1]); + [self setTitle:[a objectAtIndex:1]]; + [self setArtist:[a objectAtIndex:2]]; + [self setAlbum:[a objectAtIndex:3]]; + [self setGenre:[a objectAtIndex:4]]; + [self setYear:[[a objectAtIndex:5] intValue]]; + [self setTrack:[[a objectAtIndex:6] intValue]]; +} + +- (void)readTagsThread +{ + NSString *lDisplay = nil, *lArtist = nil, *lTitle = nil, *lAlbum = nil, *lGenre = nil; + int lYear = 0, lTrack = 0; + + TagLib_File *tagFile = taglib_file_new((const char *)[filename UTF8String]); + DBLog(@"Does it have a file? %i %s", tagFile, (const char *)[filename UTF8String]); + if (tagFile) + { + TagLib_Tag *tag = taglib_file_tag(tagFile); + DBLog(@"Does it have a tag? %i", tag); + + if (tag) + { + char *pArtist, *pTitle, *pAlbum, *pGenre, *pComment; + + pArtist = taglib_tag_artist(tag); + pTitle = taglib_tag_title(tag); + pAlbum = taglib_tag_album(tag); + pGenre = taglib_tag_genre(tag); + pComment = taglib_tag_comment(tag); + + lYear = taglib_tag_year(tag); + lTrack = taglib_tag_track(tag); + + if (pArtist != NULL) + lArtist = [NSString stringWithUTF8String:(char *)pArtist]; + else + lArtist = nil; + + if (pAlbum != NULL) + lAlbum = [NSString stringWithUTF8String:(char *)pAlbum]; + else + lAlbum = nil; + + if (pTitle != NULL) + { + NSLog(@"SET TITLE PROPERLY"); + lTitle = [NSString stringWithUTF8String:(char *)pTitle]; + } + else + lTitle = nil; + + if (pGenre != NULL) + lGenre = [NSString stringWithUTF8String:(char *)pGenre]; + else + lGenre = nil; + + if ([lArtist isEqualToString:@""] || [lTitle isEqualToString:@""]) + { + NSLog(@"SET TITLE IMPROPERLY"); + + lDisplay = [filename lastPathComponent]; + lTitle = [filename lastPathComponent]; + } + else + { + lDisplay = [NSString stringWithFormat:@"%@ - %@", lArtist, lTitle]; + } + + taglib_tag_free_strings(); + } + + taglib_file_free(tagFile); + } + else + { + NSLog(@"SET TITLE IMPROPERLY2"); + lDisplay = [filename lastPathComponent]; + lTitle = [filename lastPathComponent]; + } + NSLog(@"TITLE IS: %@", lTitle); + [self performSelectorOnMainThread:@selector(readTagsThreadSetVariables:) withObject: + [NSArray arrayWithObjects: + lDisplay, + lTitle, + lArtist, + lAlbum, + lGenre, + [NSNumber numberWithInt:lYear], + [NSNumber numberWithInt:lTrack],nil] + waitUntilDone:YES]; +} + @end