More fun times with network prefs.
[MenuTunes.git] / MainController.m
index 92f3ee6..5637bae 100755 (executable)
@@ -2,6 +2,7 @@
 #import "MenuController.h"
 #import "PreferencesController.h"
 #import "NetworkController.h"
+#import "NetworkObject.h"
 #import <ITKit/ITHotKeyCenter.h>
 #import <ITKit/ITHotKey.h>
 #import <ITKit/ITKeyCombo.h>
@@ -41,6 +42,7 @@ static MainController *sharedController;
         statusWindowController = [StatusWindowController sharedController];
         menuController = [[MenuController alloc] init];
         df = [[NSUserDefaults standardUserDefaults] retain];
+        [[PreferencesController sharedPrefs] setController:self];
         timerUpdating = NO;
         blinged = NO;
     }
@@ -62,7 +64,7 @@ static MainController *sharedController;
     if ([df boolForKey:@"enableSharing"]) {
         [self setServerStatus:YES];
     } else if ([df boolForKey:@"useSharedPlayer"]) {
-        if (![self connectToServer]) {
+        if ([self connectToServer] == 0) {
             [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES];
         }
     }
@@ -471,7 +473,6 @@ static MainController *sharedController;
 - (void)showPreferences
 {
     ITDebugLog(@"Show preferences.");
-    [[PreferencesController sharedPrefs] setController:self];
     [[PreferencesController sharedPrefs] showPrefsWindow:self];
 }
 
@@ -942,19 +943,27 @@ static MainController *sharedController;
     }
 }
 
-- (BOOL)connectToServer
+- (int)connectToServer
 {
+    int result;
     ITDebugLog(@"Attempting to connect to shared remote.");
+    result = [networkController connectToHost:[df stringForKey:@"sharedPlayerHost"]];
     //Connect
-    if ([networkController connectToHost:[df stringForKey:@"sharedPlayerHost"]]) {
-        currentRemote = [[networkController networkObject] remote];
-        [refreshTimer invalidate];
+    if (result == 1) {
+        [[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
+        currentRemote = [[[networkController networkObject] remote] retain];
+        [self timerUpdate];
         ITDebugLog(@"Connection successful.");
-        return YES;
+        return 1;
+    } else if (result == 0) {
+        ITDebugLog(@"Connection failed.");
+        currentRemote = [remoteArray objectAtIndex:0];
+        return 0;
     } else {
+        //Do something about the password being invalid
         ITDebugLog(@"Connection failed.");
         currentRemote = [remoteArray objectAtIndex:0];
-        return NO;
+        return -1;
     }
 }
 
@@ -962,6 +971,7 @@ static MainController *sharedController;
 {
     ITDebugLog(@"Disconnecting from shared remote.");
     //Disconnect
+    [currentRemote release];
     currentRemote = [remoteArray objectAtIndex:0];
     [networkController disconnect];
     [self timerUpdate];
@@ -974,7 +984,9 @@ static MainController *sharedController;
     if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) {
         ITDebugLog(@"Remote server found.");
         [timer invalidate];
-        [[StatusWindowController sharedController] showReconnectQueryWindow];
+        if (![networkController isConnectedToServer]) {
+            [[StatusWindowController sharedController] showReconnectQueryWindow];
+        }
     } else {
         ITDebugLog(@"Remote server not found.");
     }
@@ -983,20 +995,21 @@ static MainController *sharedController;
 - (void)networkError:(NSException *)exception
 {
     ITDebugLog(@"Remote exception thrown: %@: %@", [exception name], [exception reason]);
-    NSLog(@"Remote exception thrown: %@: %@", [exception name], [exception reason]);
-    NSRunCriticalAlertPanel(@"Remote MenuTunes Disconnected", @"The MenuTunes server you were connected to stopped responding or quit. MenuTunes will revert back to the local player.", @"OK", nil, nil);
-    if ([networkController isConnectedToServer] && [self disconnectFromServer]) {
-        if ([[exception name] isEqualToString:NSPortTimeoutException]) {
+    NSLog(@"%@", [exception reason]);
+    if ([[exception name] isEqualToString:NSPortTimeoutException] && [networkController isConnectedToServer]) {
+        NSRunCriticalAlertPanel(@"Remote MenuTunes Disconnected", @"The MenuTunes server you were connected to stopped responding or quit. MenuTunes will revert back to the local player.", @"OK", nil, nil);
+        if ([self disconnectFromServer]) {
+            [[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
             [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES];
+        } else {
+            ITDebugLog(@"CRITICAL ERROR, DISCONNECTING!");
         }
-    } else {
-        ITDebugLog(@"CRITICAL ERROR, DISCONNECTING!");
     }
 }
 
 - (void)reconnect
 {
-    if (![self connectToServer]) {
+    if ([self connectToServer] == 0) {
         [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES];
     }
     [[StatusWindow sharedWindow] setLocked:NO];
@@ -1063,8 +1076,8 @@ static MainController *sharedController;
 
 - (void)applicationWillTerminate:(NSNotification *)note
 {
-    [self clearHotKeys];
     [networkController stopRemoteServerSearch];
+    [self clearHotKeys];
     [[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
 }
 
@@ -1085,5 +1098,4 @@ static MainController *sharedController;
     [super dealloc];
 }
 
-
 @end
\ No newline at end of file