Using the universal libValidate. Fixed a small Audioscrobbler crash that could happen...
[MenuTunes.git] / AudioscrobblerController.m
index 3864a0c..05a3a07 100644 (file)
@@ -43,7 +43,7 @@ static AudioscrobblerController *_sharedController = nil;
                _postURL = [NSURL URLWithString:@"http://audioscrobbler.com/"];*/
                
                _delayDate = [[NSDate date] retain];
-               _responseData = nil;
+               _responseData = [[NSMutableData alloc] init];
                _tracks = [[NSMutableArray alloc] init];
                _submitTracks = [[NSMutableArray alloc] init];
                [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAudioscrobblerNotification:) name:@"AudioscrobblerHandshakeComplete" object:self];
@@ -91,8 +91,12 @@ static AudioscrobblerController *_sharedController = nil;
        if (!_handshakeCompleted && user) {
                NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://post.audioscrobbler.com/?hs=true&p=1.1&c=%@&v=%@&u=%@", AUDIOSCROBBLER_ID, AUDIOSCROBBLER_VERSION, user]];
                
+               [_lastStatus release];
+               _lastStatus = [NSLocalizedString(@"audioscrobbler_handshaking", @"Attempting to handshake with server") retain];
+               [[NSNotificationCenter defaultCenter] postNotificationName:@"AudioscrobblerStatusChanged" object:nil userInfo:[NSDictionary dictionaryWithObject:_lastStatus forKey:@"StatusString"]];
+               
                _currentStatus = AudioscrobblerRequestingHandshakeStatus;
-               _responseData = [[NSMutableData alloc] init];
+               //_responseData = [[NSMutableData alloc] init];
                [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15] delegate:self];
        }
 }
@@ -210,18 +214,26 @@ static AudioscrobblerController *_sharedController = nil;
        }
        
        ITDebugLog(@"Audioscrobbler: Sending track submission request");
+       [_lastStatus release];
+       _lastStatus = [NSLocalizedString(@"audioscrobbler_submitting", @"Submitting tracks to server") retain];
+       [[NSNotificationCenter defaultCenter] postNotificationName:@"AudioscrobblerStatusChanged" object:nil userInfo:[NSDictionary dictionaryWithObject:_lastStatus forKey:@"StatusString"]];
        
        //Create and send the request
        NSMutableURLRequest *request = [[NSURLRequest requestWithURL:_postURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15] mutableCopy];
-       NSLog(@"Posting Audioscrobbler URL request: %@", requestString);
        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:[requestString dataUsingEncoding:NSUTF8StringEncoding]];
        _currentStatus = AudioscrobblerSubmittingTracksStatus;
-       _responseData = [[NSMutableData alloc] init];
+       //_responseData = [[NSMutableData alloc] init];
+       [_responseData setData:nil];
        [NSURLConnection connectionWithRequest:request delegate:self];
        [requestString release];
        [request release];
        
+       //For now we're not going to cache results, as it is less of a headache
+       //[_tracks removeObjectsInArray:_submitTracks];
+       [_tracks removeAllObjects];
+       [_submitTracks removeAllObjects];
+       
        //If we have tracks left, submit again after the interval seconds
 }
 
@@ -236,6 +248,7 @@ static AudioscrobblerController *_sharedController = nil;
 
 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
 {
+       [_responseData setData:nil];
        [_lastStatus release];
        _lastStatus = [[NSString stringWithFormat:NSLocalizedString(@"audioscrobbler_error", @"Error - %@"), [error localizedDescription]] retain];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AudioscrobblerStatusChanged" object:self userInfo:[NSDictionary dictionaryWithObject:_lastStatus forKey:@"StatusString"]];
@@ -257,7 +270,6 @@ static AudioscrobblerController *_sharedController = nil;
                responseAction = [lines objectAtIndex:0];
        }
        ITDebugLog(@"Audioscrobbler: Response %@", string);
-       NSLog(@"Audioscrobbler: Response %@", string);
        if (_currentStatus == AudioscrobblerRequestingHandshakeStatus) {
                if ([lines count] < 2) {
                        //We have a protocol error
@@ -290,10 +302,6 @@ static AudioscrobblerController *_sharedController = nil;
                        //We have a protocol error
                }
        } else if (_currentStatus == AudioscrobblerSubmittingTracksStatus) {
-               //For now we're not going to cache results, as it is less of a headache
-               [_tracks removeObjectsInArray:_submitTracks];
-               [_submitTracks removeAllObjects];
-               
                if ([responseAction isEqualToString:@"OK"]) {
                        ITDebugLog(@"Audioscrobbler: Submission successful, clearing queue.");
                        /*[_tracks removeObjectsInArray:_submitTracks];
@@ -311,7 +319,6 @@ static AudioscrobblerController *_sharedController = nil;
                        //Bad auth
                } else if (([responseAction length] > 5) && [[responseAction substringToIndex:5] isEqualToString:@"FAILED"]) {
                        ITDebugLog(@"Audioscrobbler: Submission failed (%@)", [responseAction substringFromIndex:6]);
-                       NSLog(@"Audioscrobbler: Submission failed (%@)", [responseAction substringFromIndex:6]);
                        key = @"audioscrobbler_submission_failed";
                        comment = @"Last track submission failed - see console for error";
                        //Failed
@@ -332,7 +339,13 @@ static AudioscrobblerController *_sharedController = nil;
        _lastStatus = [NSLocalizedString(key, comment) retain];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AudioscrobblerStatusChanged" object:nil userInfo:[NSDictionary dictionaryWithObject:_lastStatus forKey:@"StatusString"]];
        [string release];
-       [_responseData release];
+       [_responseData setData:nil];
+}
+
+-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
+{
+       //Don't cache any Audioscrobbler communication
+       return nil;
 }
 
 @end