~threeve/ubuntuone-ios-music/fix-play-on-call

« back to all changes in this revision

Viewing changes to musicstreaming/models/Album.m

  • Committer: Jason Foreman
  • Date: 2011-06-16 18:33:42 UTC
  • mfrom: (191.1.60 master)
  • Revision ID: jason.foreman@canonical.com-20110616183342-vl7a4804xsf0s1b5
Merging branches for v 2.0.

lp:~threeve/ubuntuone-ios-client/master
lp:~urbanape/ubuntuone-ios-client/downloader

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
#import "Album.h"
32
32
#import "Artist.h"
 
33
#import "NSMutableSet+Extras.h"
 
34
#import "NSString+Extras.h"
 
35
#import "AlbumParser.h"
 
36
#import "Subsonic.h"
 
37
 
 
38
@interface Album ()
 
39
+ (Album*)albumMatchingPredicate:(NSPredicate*)predicate;
 
40
@end
33
41
 
34
42
@implementation Album
35
43
@dynamic title, artist, albumId, coverArtId;
42
50
 
43
51
+ (Album*)albumWithId:(NSString*)anAlbumId
44
52
{
 
53
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"albumId == %@", anAlbumId];
 
54
        return [self albumMatchingPredicate:predicate];
 
55
}
 
56
 
 
57
+ (Album*)albumWithTitle:(NSString*)albumTitle artist:(NSString*)albumArtist;
 
58
{
 
59
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@ AND artist = %@", albumTitle, albumArtist];
 
60
        return [self albumMatchingPredicate:predicate];
 
61
}
 
62
 
 
63
+ (Album*)albumMatchingPredicate:(NSPredicate*)predicate;
 
64
{
45
65
        NSFetchRequest * fetch = [[NSFetchRequest alloc] init];
46
66
        NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:PerThreadManagedObjectContext()];
47
67
        [fetch setEntity:entityDescription];
48
 
        
49
 
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"albumId == %@", anAlbumId];
50
68
        [fetch setPredicate:predicate];
51
 
        
52
69
        NSError * error = nil;
53
70
        NSArray * matches = [PerThreadManagedObjectContext() executeFetchRequest:fetch error:&error];
54
71
        [fetch release];
55
72
        
56
 
        if ([matches count] > 0)
57
 
        {
58
 
                return [matches objectAtIndex:0];
59
 
        }
60
 
        else
61
 
        {
62
 
                return nil;
63
 
        }
64
 
}
65
 
 
66
 
- (id)copyWithZone:(NSZone *)zone
67
 
{
68
 
        Album *copy = [[Album allocWithZone:zone] init];
69
 
        
70
 
        NSString *t = [self.title copyWithZone:zone];
71
 
        copy.title = t;
72
 
    
73
 
    NSString *a = [self.artist copyWithZone:zone];
74
 
    copy.artist = a;
75
 
        
76
 
        NSString *i = [self.albumId copyWithZone:zone];
77
 
        copy.albumId = i;
78
 
        
79
 
        NSString *c = [self.coverArtId copyWithZone:zone];
80
 
        copy.coverArtId = c;
81
 
        
82
 
        [t release];
83
 
    [a release];
84
 
        [i release];
85
 
        [c release];
86
 
        
87
 
        return copy;
88
 
}
89
 
 
90
 
- (void)encodeWithCoder:(NSCoder*)encoder
91
 
{
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"];
96
 
}
97
 
 
98
 
- (id)initWithCoder:(NSCoder*)decoder
99
 
{
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];
104
 
        
105
 
        return self;
 
73
        return [matches lastObject];
 
74
}
 
75
 
 
76
- (NSString *)dearticlizedTitle
 
77
{
 
78
    return [self.title dearticlizedString];
 
79
}
 
80
 
 
81
- (NSError*)loadSongs
 
82
{
 
83
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
84
        NSError *error = nil;
 
85
        
 
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];
 
90
        
 
91
        AlbumParser *parser = [[AlbumParser alloc] init];
 
92
        parser.albumObjectId = [self objectID];
 
93
        
 
94
        [xmlParser setDelegate:parser];
 
95
        
 
96
        if (![xmlParser parse])
 
97
        {
 
98
                error = [[xmlParser parserError] copy];
 
99
        }
 
100
        
 
101
        [xmlParser release];
 
102
        [parser release];
 
103
        [pool release];
 
104
        
 
105
        return [error autorelease];
106
106
}
107
107
 
108
108
- (NSString*)description
116
116
    return titleResultsRange.length > 0;
117
117
}
118
118
 
 
119
- (BOOL)hasCachedSongs;
 
120
{
 
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]];
 
126
        
 
127
        NSArray *results = [[self managedObjectContext] executeFetchRequest:fetch error:NULL];
 
128
        return [results count] > 0;
 
129
}
 
130
 
119
131
@end