41
50
+ (BOOL)artistWithIdExists:(NSString*)anArtistId
52
return [Artist artistWithId:anArtistId] != nil;
55
+ (Artist*)artistWithId:(NSString*)anArtistId
57
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"artistId == %@", anArtistId];
58
return [self artistMatchingPredicate:predicate];
61
+ (Artist*)artistWithName:(NSString*)artistName;
63
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", artistName];
64
return [self artistMatchingPredicate:predicate];
67
+ (Artist*)artistMatchingPredicate:(NSPredicate*)predicate;
43
69
NSFetchRequest * fetch = [[NSFetchRequest alloc] init];
44
70
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Artist" inManagedObjectContext:PerThreadManagedObjectContext()];
45
71
[fetch setEntity:entityDescription];
47
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"artistId == %@", anArtistId];
48
72
[fetch setPredicate:predicate];
50
73
NSError * error = nil;
51
74
NSArray * matches = [PerThreadManagedObjectContext() executeFetchRequest:fetch error:&error];
54
return (0 != [matches count]);
57
- (id)initWithCoder:(NSCoder*)decoder
59
if ((self = [super init]))
61
self.name = [decoder decodeObjectForKey:@"name"];
62
self.artistId = [decoder decodeObjectForKey:@"artistId"];
68
- (void)encodeWithCoder:(NSCoder*)encoder
70
[encoder encodeObject:self.name forKey:@"name"];
71
[encoder encodeObject:self.artistId forKey:@"artistId"];
77
return [matches lastObject];
74
80
- (NSString*)description
82
88
return titleResultsRange.length > 0;
91
- (NSString *)dearticlizedName
93
return [self.name dearticlizedString];
96
// Note: executes synchronously!
97
- (NSError*)loadAlbums
99
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
100
NSError *error = nil;
102
NSMutableSet *parameters = [NSMutableSet set];
103
[parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.artistId, nil]];
104
NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getMusicDirectory.view" parameters:parameters];
105
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
106
ArtistParser *parser = [[ArtistParser alloc] init];
107
parser.artistManagedObjectID = [self objectID];
108
[xmlParser setDelegate:parser];
110
if (![xmlParser parse])
112
error = [[xmlParser parserError] copy];
119
return [error autorelease];
122
- (BOOL)hasCachedSongs;
124
NSManagedObjectContext *moc = [self managedObjectContext];
125
NSEntityDescription *songEntity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:moc];
126
NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
127
[fetch setEntity:songEntity];
128
[fetch setPredicate:[NSPredicate predicateWithFormat:@"artist = %@ and cachedSongPath != NIL", self.name]];
130
NSError *error = nil;
131
NSArray *results = [moc executeFetchRequest:fetch error:&error];
132
return [results count] > 0;