From 259ae5fac769954c7db5974b86e791a929fe6700 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Wed, 9 Nov 2005 16:16:26 +0000 Subject: [PATCH] Handshake is attempted at launch and when the username is changed. Lowered timeout to 15 seconds when submitting. I need to figure out a good way to log errors. --- AudioscrobblerController.h | 2 +- AudioscrobblerController.m | 29 ++++++++++++++++++----------- MainController.m | 4 ++++ PreferencesController.m | 2 ++ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/AudioscrobblerController.h b/AudioscrobblerController.h index 0495c1a..7daddea 100644 --- a/AudioscrobblerController.h +++ b/AudioscrobblerController.h @@ -33,7 +33,7 @@ typedef enum { } + (AudioscrobblerController *)sharedController; -- (void)attemptHandshake; +- (void)attemptHandshake:(BOOL)force; - (BOOL)handshakeCompleted; - (void)submitTrack:(NSString *)title artist:(NSString *)artist album:(NSString *)album length:(int)length; - (void)submitTracks; diff --git a/AudioscrobblerController.m b/AudioscrobblerController.m index 79bad7b..6206ad8 100644 --- a/AudioscrobblerController.m +++ b/AudioscrobblerController.m @@ -68,8 +68,12 @@ static AudioscrobblerController *_sharedController = nil; [super dealloc]; } -- (void)attemptHandshake +- (void)attemptHandshake:(BOOL)force { + if (_handshakeCompleted && !force) { + return; + } + //Delay if we haven't met the interval time limit NSTimeInterval interval = [_delayDate timeIntervalSinceNow]; if (interval > 0) { @@ -84,7 +88,7 @@ static AudioscrobblerController *_sharedController = nil; _currentStatus = AudioscrobblerRequestingHandshakeStatus; _responseData = [[NSMutableData alloc] init]; - [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30] delegate:self]; + [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15] delegate:self]; } } @@ -114,7 +118,15 @@ static AudioscrobblerController *_sharedController = nil; - (void)submitTracks { if (!_handshakeCompleted) { - [self attemptHandshake]; + [self attemptHandshake:NO]; + return; + } + + NSString *user = [[NSUserDefaults standardUserDefaults] stringForKey:@"audioscrobblerUser"], *passString = [PreferencesController getKeychainItemPasswordForUser:user]; + char *pass = (char *)[passString UTF8String]; + + if (passString == nil) { + NSLog(@"Audioscrobbler: Access denied to user password"); return; } @@ -128,8 +140,6 @@ static AudioscrobblerController *_sharedController = nil; int i; NSMutableString *requestString; NSString *authString, *responseHash = @""; - NSString *user = [[NSUserDefaults standardUserDefaults] stringForKey:@"audioscrobblerUser"]; - char *pass = (char *)[[PreferencesController getKeychainItemPasswordForUser:user] UTF8String]; unsigned char *buffer; EVP_MD_CTX ctx; @@ -178,7 +188,7 @@ static AudioscrobblerController *_sharedController = nil; } //Create and send the request - NSMutableURLRequest *request = [[NSURLRequest requestWithURL:_postURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30] mutableCopy]; + NSMutableURLRequest *request = [[NSURLRequest requestWithURL:_postURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15] mutableCopy]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:[requestString dataUsingEncoding:NSUTF8StringEncoding]]; _currentStatus = AudioscrobblerSubmittingTracksStatus; @@ -225,7 +235,7 @@ static AudioscrobblerController *_sharedController = nil; if ([lines count] < 2) { //We have a protocol error } - if ([responseAction isEqualToString:@"UPTODATE"]) { + if ([responseAction isEqualToString:@"UPTODATE"] || (([responseAction length] > 5) && [[responseAction substringToIndex:5] isEqualToString:@"UPDATE"])) { if ([lines count] >= 4) { _md5Challenge = [[lines objectAtIndex:1] retain]; _postURL = [[NSURL alloc] initWithString:[lines objectAtIndex:2]]; @@ -234,15 +244,12 @@ static AudioscrobblerController *_sharedController = nil; } else { //We have a protocol error } - //Something - } else if (([responseAction length] > 5) && [[responseAction substringToIndex:5] isEqualToString:@"UPDATE"]) { - //Something plus update action } else if (([responseAction length] > 5) && [[responseAction substringToIndex:5] isEqualToString:@"FAILED"]) { //We have a error } else if ([responseAction isEqualToString:@"BADUSER"]) { //We have a bad user } else { - //We have a protocol + //We have a protocol error } } else if (_currentStatus == AudioscrobblerSubmittingTracksStatus) { if ([responseAction isEqualToString:@"OK"]) { diff --git a/MainController.m b/MainController.m index d51b72f..7a8c874 100755 --- a/MainController.m +++ b/MainController.m @@ -198,6 +198,10 @@ static MainController *sharedController; [statusItem setImage:[NSImage imageNamed:@"MenuNormal"]]; [statusItem setAlternateImage:[NSImage imageNamed:@"MenuInverted"]]; + if ([df boolForKey:@"audioscrobblerEnabled"]) { + [[AudioscrobblerController sharedController] attemptHandshake:NO]; + } + [networkController startRemoteServerSearch]; [NSApp deactivate]; [self performSelector:@selector(rawr) withObject:nil afterDelay:1.0]; diff --git a/PreferencesController.m b/PreferencesController.m index 61e0c11..6f8abfd 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -6,6 +6,7 @@ #import "StatusWindow.h" #import "StatusWindowController.h" #import "CustomMenuTableView.h" +#import "AudioscrobblerController.h" #import @@ -433,6 +434,7 @@ static PreferencesController *prefs = nil; [PreferencesController deleteKeychainItemForUser:currentAccount]; } [PreferencesController createKeychainItemForUser:newAccount andPassword:[audioscrobblerPasswordTextField stringValue]]; + [[AudioscrobblerController sharedController] attemptHandshake:YES]; } } else if ( [sender tag ] == 6030) { //Here we set the password for an existing keychain item or we create a new keychain item. -- 2.20.1