- (ITMTRemote *)loadRemote;
- (void)timerUpdate;
- (void)setLatestSongIdentifier:(NSString *)newIdentifier;
-- (void)showCurrentTrackInfo;
- (void)applicationLaunched:(NSNotification *)note;
- (void)applicationTerminated:(NSNotification *)note;
@end
sharedController = self;
remoteArray = [[NSMutableArray alloc] initWithCapacity:1];
+ [[PreferencesController sharedPrefs] setController:self];
statusWindowController = [StatusWindowController sharedController];
menuController = [[MenuController alloc] init];
df = [[NSUserDefaults standardUserDefaults] retain];
- [[PreferencesController sharedPrefs] setController:self];
timerUpdating = NO;
blinged = NO;
}
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];
}
}
- (BOOL)songIsPlaying
{
- NSString *identifier;
+ NSString *identifier = nil;
NS_DURING
identifier = [[self currentRemote] playerStateUniqueIdentifier];
NS_HANDLER
- (BOOL)radioIsPlaying
{
- ITMTRemotePlayerPlaylistClass class;
+ ITMTRemotePlayerPlaylistClass class = nil;
NS_DURING
class = [[self currentRemote] currentPlaylistClass];
NS_HANDLER
- (BOOL)songChanged
{
- NSString *identifier;
+ NSString *identifier = nil;
NS_DURING
identifier = [[self currentRemote] playerStateUniqueIdentifier];
NS_HANDLER
{
if ([networkController isConnectedToServer]) {
[statusItem setMenu:[menuController menu]];
+ if ([[networkController networkObject] remote] == nil) {
+ [self networkError:nil];
+ }
}
if ( [self songChanged] && (timerUpdating != YES) ) {
[[PreferencesController sharedPrefs] showPrefsWindow:self];
}
+- (void)showTestWindow
+{
+ [self showCurrentTrackInfo];
+}
+
- (void)quitMenuTunes
{
ITDebugLog(@"Quitting MenuTunes.");
- (void)showCurrentTrackInfo
{
- ITMTRemotePlayerSource source;
- NSString *title;
+ ITMTRemotePlayerSource source = 0;
+ NSString *title = nil;
NSString *album = nil;
NSString *artist = nil;
NSString *time = nil;
}
if ( [df boolForKey:@"showTrackNumber"] ) {
- int trackNo;
- int trackCount;
+ int trackNo = 0;
+ int trackCount = 0;
NS_DURING
trackNo = [[self currentRemote] currentSongTrack];
}
if ( [df boolForKey:@"showTrackRating"] ) {
- float currentRating;
+ float currentRating = 0;
NS_DURING
currentRating = [[self currentRemote] currentSongRating];
- (void)showUpcomingSongs
{
- int numSongs;
-
+ int numSongs = 0;
NS_DURING
numSongs = [[self currentRemote] numberOfSongsInPlaylistAtIndex:[[self currentRemote] currentPlaylistIndex]];
NS_HANDLER
ITDebugLog(@"Showing upcoming songs status window.");
NS_DURING
if (numSongs > 0) {
- NSMutableArray *songList = [NSMutableArray arrayWithCapacity:5];
int numSongsInAdvance = [df integerForKey:@"SongsInAdvance"];
+ NSMutableArray *songList = [NSMutableArray arrayWithCapacity:numSongsInAdvance];
int curTrack = [[self currentRemote] currentSongIndex];
int i;
}
}
+ if ([songList count] == 0) {
+ [songList addObject:NSLocalizedString(@"noUpcomingSongs", @"No upcoming songs.")];
+ }
+
[statusWindowController showUpcomingSongsWindowWithTitles:songList];
} else {
[statusWindowController showUpcomingSongsWindowWithTitles:[NSArray arrayWithObject:NSLocalizedString(@"noUpcomingSongs", @"No upcoming songs.")]];
}
}
-- (BOOL)connectToServer
+- (int)connectToServer
{
int result;
ITDebugLog(@"Attempting to connect to shared remote.");
if (result == 1) {
[[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
currentRemote = [[[networkController networkObject] remote] retain];
+ [refreshTimer invalidate];
+ refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+ target:self
+ selector:@selector(timerUpdate)
+ userInfo:nil
+ repeats:YES] retain];
[self timerUpdate];
ITDebugLog(@"Connection successful.");
- return YES;
+ return 1;
} else if (result == 0) {
ITDebugLog(@"Connection failed.");
currentRemote = [remoteArray objectAtIndex:0];
- return NO;
+ return 0;
} else {
//Do something about the password being invalid
ITDebugLog(@"Connection failed.");
currentRemote = [remoteArray objectAtIndex:0];
- return NO;
+ return -1;
}
}
if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) {
ITDebugLog(@"Remote server found.");
[timer invalidate];
- if (![networkController isConnectedToServer]) {
+ if (![networkController isServerOn] && ![networkController isConnectedToServer]) {
[[StatusWindowController sharedController] showReconnectQueryWindow];
}
} else {
- (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];
refreshTimer = nil;
[self clearHotKeys];
playerRunningState = ITMTRemotePlayerNotRunning;
+
+ if ([df objectForKey:@"ShowPlayer"] != nil) {
+ ITHotKey *hotKey;
+ ITDebugLog(@"Setting up show player hot key.");
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ShowPlayer"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showPlayer)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
+ }
}
NS_HANDLER
[self networkError:localException];