Handshake is attempted at launch and when the username is changed. Lowered timeout...
[MenuTunes.git] / MainController.m
index db0269f..7a8c874 100755 (executable)
@@ -198,6 +198,10 @@ static MainController *sharedController;
     [statusItem setImage:[NSImage imageNamed:@"MenuNormal"]];
     [statusItem setAlternateImage:[NSImage imageNamed:@"MenuInverted"]];
 
     [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];
     [networkController startRemoteServerSearch];
     [NSApp deactivate];
        [self performSelector:@selector(rawr) withObject:nil afterDelay:1.0];
@@ -469,8 +473,8 @@ static MainController *sharedController;
                                if (_audioscrobblerTimer) {
                                        [_audioscrobblerTimer invalidate];
                                }
                                if (_audioscrobblerTimer) {
                                        [_audioscrobblerTimer invalidate];
                                }
-                               if (length > 0) {
-                                       _audioscrobblerTimer = [NSTimer scheduledTimerWithTimeInterval:((length < 240) ? length / 2 : 120) target:self selector:@selector(submitAudioscrobblerTrack:) userInfo:nil repeats:NO];
+                               if (length > 30) {
+                                       _audioscrobblerTimer = [NSTimer scheduledTimerWithTimeInterval:((length < 240) ? length / 2 : 120) target:self selector:@selector(submitAudioscrobblerTrack:) userInfo:nil repeats:YES];
                                }
                        } else {
                                _audioscrobblerTimer = nil;
                                }
                        } else {
                                _audioscrobblerTimer = nil;
@@ -595,8 +599,8 @@ static MainController *sharedController;
                        if (_audioscrobblerTimer) {
                                [_audioscrobblerTimer invalidate];
                        }
                        if (_audioscrobblerTimer) {
                                [_audioscrobblerTimer invalidate];
                        }
-                       if (length > 0) {
-                               _audioscrobblerTimer = [NSTimer scheduledTimerWithTimeInterval:((length < 240) ? length / 2 : 120) target:self selector:@selector(submitAudioscrobblerTrack:) userInfo:nil repeats:NO];
+                       if (length > 30) {
+                               _audioscrobblerTimer = [NSTimer scheduledTimerWithTimeInterval:((length < 240) ? length / 2 : 120) target:self selector:@selector(submitAudioscrobblerTrack:) userInfo:nil repeats:YES];
                        }
                } else {
                        _audioscrobblerTimer = nil;
                        }
                } else {
                        _audioscrobblerTimer = nil;
@@ -614,20 +618,29 @@ static MainController *sharedController;
 
 - (void)submitAudioscrobblerTrack:(NSTimer *)timer
 {
 
 - (void)submitAudioscrobblerTrack:(NSTimer *)timer
 {
+       int interval = [timer timeInterval];
+       [timer invalidate];
+       _audioscrobblerTimer = nil;
+       ITDebugLog(@"Audioscrobbler: Attempting to submit current track");
        if ([df boolForKey:@"audioscrobblerEnabled"]) {
                NS_DURING
        if ([df boolForKey:@"audioscrobblerEnabled"]) {
                NS_DURING
-                       NSString *title = [[self currentRemote] currentSongTitle], *artist = [[self currentRemote] currentSongArtist];
-                       if (title && artist) {
-                               [[AudioscrobblerController sharedController] submitTrack:title
-                                                                                                                               artist:artist
-                                                                                                                               album:[[self currentRemote] currentSongAlbum]
-                                                                                                                               length:[[self currentRemote] currentSongDuration]];
+                       int elapsed = [[self currentRemote] currentSongPlayed];
+                       if ((abs(elapsed - interval) < 5) && ([[self currentRemote] playerPlayingState] == ITMTRemotePlayerPlaying)) {
+                               NSString *title = [[self currentRemote] currentSongTitle], *artist = [[self currentRemote] currentSongArtist];
+                               if (title && artist) {
+                                       ITDebugLog(@"Audioscrobbler: Submitting current track");
+                                       [[AudioscrobblerController sharedController] submitTrack:title
+                                                                                                                                       artist:artist
+                                                                                                                                       album:[[self currentRemote] currentSongAlbum]
+                                                                                                                                       length:[[self currentRemote] currentSongDuration]];
+                               }
+                       } else if (interval - elapsed > 0) {
+                               ITDebugLog(@"Audioscrobbler: Creating a new timer that will run in %i seconds", interval - elapsed);
+                               _audioscrobblerTimer = [NSTimer scheduledTimerWithTimeInterval:(interval - elapsed) target:self selector:@selector(submitAudioscrobblerTrack:) userInfo:nil repeats:YES];
                        }
                NS_HANDLER
                        [self networkError:localException];
                NS_ENDHANDLER
                        }
                NS_HANDLER
                        [self networkError:localException];
                NS_ENDHANDLER
-               [timer invalidate];
-               _audioscrobblerTimer = nil;
        }
 }
 
        }
 }