43
51
+ (Album*)albumWithId:(NSString*)anAlbumId
53
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"albumId == %@", anAlbumId];
54
return [self albumMatchingPredicate:predicate];
57
+ (Album*)albumWithTitle:(NSString*)albumTitle artist:(NSString*)albumArtist;
59
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@ AND artist = %@", albumTitle, albumArtist];
60
return [self albumMatchingPredicate:predicate];
63
+ (Album*)albumMatchingPredicate:(NSPredicate*)predicate;
45
65
NSFetchRequest * fetch = [[NSFetchRequest alloc] init];
46
66
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:PerThreadManagedObjectContext()];
47
67
[fetch setEntity:entityDescription];
49
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"albumId == %@", anAlbumId];
50
68
[fetch setPredicate:predicate];
52
69
NSError * error = nil;
53
70
NSArray * matches = [PerThreadManagedObjectContext() executeFetchRequest:fetch error:&error];
56
if ([matches count] > 0)
58
return [matches objectAtIndex:0];
66
- (id)copyWithZone:(NSZone *)zone
68
Album *copy = [[Album allocWithZone:zone] init];
70
NSString *t = [self.title copyWithZone:zone];
73
NSString *a = [self.artist copyWithZone:zone];
76
NSString *i = [self.albumId copyWithZone:zone];
79
NSString *c = [self.coverArtId copyWithZone:zone];
90
- (void)encodeWithCoder:(NSCoder*)encoder
92
[encoder encodeObject:self.title forKey:@"title"];
93
[encoder encodeObject:self.artist forKey:@"artist"];
94
[encoder encodeObject:self.albumId forKey:@"albumId"];
95
[encoder encodeObject:self.coverArtId forKey:@"coverArtId"];
98
- (id)initWithCoder:(NSCoder*)decoder
100
self.title = [[decoder decodeObjectForKey:@"title"] retain];
101
self.artist = [[decoder decodeObjectForKey:@"artist"] retain];
102
self.albumId = [[decoder decodeObjectForKey:@"albumId"] retain];
103
self.coverArtId = [[decoder decodeObjectForKey:@"coverArtId"] retain];
73
return [matches lastObject];
76
- (NSString *)dearticlizedTitle
78
return [self.title dearticlizedString];
83
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
86
NSMutableSet *parameters = [NSMutableSet set];
87
[parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.albumId, nil]];
88
NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getAlbum.view" parameters:parameters];
89
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
91
AlbumParser *parser = [[AlbumParser alloc] init];
92
parser.albumObjectId = [self objectID];
94
[xmlParser setDelegate:parser];
96
if (![xmlParser parse])
98
error = [[xmlParser parserError] copy];
105
return [error autorelease];
108
108
- (NSString*)description
116
116
return titleResultsRange.length > 0;
119
- (BOOL)hasCachedSongs;
121
NSManagedObjectContext *moc = [self managedObjectContext];
122
NSEntityDescription *songEntity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:moc];
123
NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
124
[fetch setEntity:songEntity];
125
[fetch setPredicate:[NSPredicate predicateWithFormat:@"album = %@ and cachedSongPath != NIL", self.title]];
127
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:NULL];
128
return [results count] > 0;