cog/Playlist/PlaylistEntry.m

125 lines
2.5 KiB
Matlab
Raw Normal View History

2005-06-02 18:16:43 +00:00
//
// PlaylistEntry.m
// Cog
//
// Created by Vincent Spader on 3/14/05.
2005-07-02 21:02:06 +00:00
// Copyright 2005 Vincent Spader All rights reserved.
2005-06-02 18:16:43 +00:00
//
#import "PlaylistEntry.h"
#import "CogAudio/AudioPropertiesReader.h"
#import "CogAudio/AudioMetadataReader.h"
2005-06-02 18:16:43 +00:00
@implementation PlaylistEntry
2008-02-20 00:44:40 +00:00
@synthesize index;
@synthesize shuffleIndex;
@synthesize status;
@synthesize statusMessage;
@synthesize queuePosition;
2005-06-02 18:16:43 +00:00
2008-02-20 00:44:40 +00:00
@synthesize URL;
2005-06-02 18:16:43 +00:00
2008-02-20 00:44:40 +00:00
@synthesize artist;
@synthesize album;
@synthesize genre;
@synthesize year;
@synthesize track;
2005-06-02 18:16:43 +00:00
2008-02-20 00:44:40 +00:00
@synthesize totalFrames;
@synthesize bitrate;
@synthesize channels;
@synthesize bitsPerSample;
@synthesize sampleRate;
2005-06-02 18:16:43 +00:00
2008-02-20 00:44:40 +00:00
@synthesize seekable;
2006-05-12 14:41:02 +00:00
2008-02-29 21:54:09 +00:00
// The following read-only keys depend on the values of other properties
+ (NSSet *)keyPathsForValuesAffectingDisplay
{
return [NSSet setWithObjects:@"artist",@"title",nil];
}
+ (NSSet *)keyPathsForValuesAffectingLength
{
return [NSSet setWithObject:@"totalFrames"];
2006-05-12 14:41:02 +00:00
}
2008-02-29 21:54:09 +00:00
+ (NSSet *)keyPathsForValuesAffectingPath
2005-06-02 18:16:43 +00:00
{
2008-02-29 21:54:09 +00:00
return [NSSet setWithObject:@"URL"];
}
+ (NSSet *)keyPathsForValuesAffectingFilename
{
return [NSSet setWithObject:@"URL"];
2006-05-12 19:08:39 +00:00
}
- (void)readPropertiesThread
2006-05-12 19:08:39 +00:00
{
2008-02-20 00:44:40 +00:00
NSDictionary *properties = [AudioPropertiesReader propertiesForURL:self.URL];
if (!properties) {
2008-02-23 19:46:23 +00:00
self.status = kCogEntryError;
self.statusMessage = @"Failed to read properties!";
2006-05-12 19:08:39 +00:00
return;
}
2008-02-29 21:54:09 +00:00
[self performSelectorOnMainThread:@selector(setValuesForKeysWithDictionary:) withObject:properties waitUntilDone:YES];
2006-05-12 19:08:39 +00:00
}
- (void)readMetadataThread
2006-05-12 19:08:39 +00:00
{
2008-02-20 00:44:40 +00:00
NSDictionary *metadata = [AudioMetadataReader metadataForURL:self.URL];
2008-02-29 21:54:09 +00:00
[self performSelectorOnMainThread:@selector(setValuesForKeysWithDictionary:) withObject:metadata waitUntilDone:YES];
2006-05-12 19:08:39 +00:00
}
- (NSString *)description
{
2008-02-20 00:44:40 +00:00
return [NSString stringWithFormat:@"PlaylistEntry %i:(%@)", self.index, self.URL];
}
2008-02-29 21:54:09 +00:00
// Get the URL if the title is blank
@synthesize title;
- (NSString *)title
{
if(self.URL && (title == nil || [title isEqualToString:@""]))
{
return [[self.URL path] lastPathComponent];
}
return [[title retain] autorelease];
}
2008-02-29 21:56:01 +00:00
@dynamic display;
- (NSString *)display
{
if ((self.artist == NULL) || ([self.artist isEqualToString:@""]))
return self.title;
else {
return [NSString stringWithFormat:@"%@ - %@", self.artist, self.title];
}
}
@dynamic length;
- (NSNumber *)length
{
return [NSNumber numberWithDouble:((double)self.totalFrames / self.sampleRate)];
2008-02-20 00:44:40 +00:00
}
@dynamic path;
2008-02-20 00:44:40 +00:00
- (NSString *)path
{
return [[self.URL path] stringByAbbreviatingWithTildeInPath];
}
@dynamic filename;
2008-02-20 00:44:40 +00:00
- (NSString *)filename
{
return [[self.URL path] lastPathComponent];
}
2005-06-02 18:16:43 +00:00
@end