#import "StatusWindowController.h"
#import "StatusItemHack.h"
-@interface NSImage (WeeAdditions)
-- (NSImage *)imageScaledSmoothlyToSize:(NSSize)scaledSize;
-@end
-
-@implementation NSImage (WeeAdditions)
+@implementation NSImage (SmoothAdditions)
- (NSImage *)imageScaledSmoothlyToSize:(NSSize)scaledSize
{
[self setupHotKeys];
if (![refreshTimer isValid]) {
[refreshTimer release];
- refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5
+ refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
target:self
selector:@selector(timerUpdate)
userInfo:nil
- (void)setLatestSongIdentifier:(NSString *)newIdentifier
{
- ITDebugLog(@"Setting latest song identifier to %@", newIdentifier);
+ ITDebugLog(@"Setting latest song identifier:");
+ ITDebugLog(@" - Identifier: %@", newIdentifier);
[_latestSongIdentifier autorelease];
- _latestSongIdentifier = [newIdentifier copy];
+ _latestSongIdentifier = [newIdentifier retain];
}
- (void)timerUpdate
{
- if ([networkController isConnectedToServer]) {
- [statusItem setMenu:[menuController menu]];
- }
-
if ( [self songChanged] && (timerUpdating != YES) && (playerRunningState == ITMTRemotePlayerRunning) ) {
ITDebugLog(@"The song changed.");
NSArray *scripts = [[NSFileManager defaultManager] directoryContentsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"]];
NSEnumerator *scriptsEnum = [scripts objectEnumerator];
NSString *nextScript;
+ ITDebugLog(@"Running AppleScripts for song change.");
while ( (nextScript = [scriptsEnum nextObject]) ) {
NSDictionary *error;
NSAppleScript *currentScript = [[NSAppleScript alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"] stringByAppendingPathComponent:nextScript]] error:&error];
+ ITDebugLog(@"Running script: %@", nextScript);
if (!currentScript || ![currentScript executeAndReturnError:nil]) {
ITDebugLog(@"Error running script %@.", nextScript);
}
}
timerUpdating = YES;
+ [statusItem setEnabled:NO];
NS_DURING
latestPlaylistClass = [[self currentRemote] currentPlaylistClass];
[self setLatestSongIdentifier:[[self currentRemote] playerStateUniqueIdentifier]];
- NSString *artist = [[self currentRemote] currentSongArtist];
- NSString *title = [[self currentRemote] currentSongTitle];
- NSString *toolTip;
- if (artist) {
- toolTip = [NSString stringWithFormat:@"%@ - %@", artist, title];
- } else if (title) {
- toolTip = title;
+ //Create the tooltip for the status item
+ if ( [df boolForKey:@"showToolTip"] ) {
+ NSString *artist = [[self currentRemote] currentSongArtist];
+ NSString *title = [[self currentRemote] currentSongTitle];
+ NSString *toolTip;
+ ITDebugLog(@"Creating status item tooltip.");
+ if (artist) {
+ toolTip = [NSString stringWithFormat:@"%@ - %@", artist, title];
+ } else if (title) {
+ toolTip = title;
+ } else {
+ toolTip = @"No Song Playing";
+ }
+ [statusItem setToolTip:toolTip];
} else {
- toolTip = @"No Song Playing";
+ [statusItem setToolTip:nil];
}
- [statusItem setToolTip:toolTip];
NS_HANDLER
[self networkError:localException];
NS_ENDHANDLER
timerUpdating = NO;
+ [statusItem setEnabled:YES];
+ }
+
+ if ([networkController isConnectedToServer]) {
+ [statusItem setMenu:([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) ? [menuController menu] : [menuController menuForNoPlayer]];
}
}
- (void)showPlayer
{
ITDebugLog(@"Beginning show player.");
- if ( ( playerRunningState == ITMTRemotePlayerRunning) ) {
+ //if ( ( playerRunningState == ITMTRemotePlayerRunning) ) {
ITDebugLog(@"Showing player interface.");
NS_DURING
[[self currentRemote] showPrimaryInterface];
NS_HANDLER
[self networkError:localException];
NS_ENDHANDLER
- } else {
+ /*} else {
ITDebugLog(@"Launching player.");
NS_DURING
NSString *path;
NS_HANDLER
[self networkError:localException];
NS_ENDHANDLER
- }
+ }*/
ITDebugLog(@"Finished show player.");
}
//
//
+- (MenuController *)menuController
+{
+ return menuController;
+}
+
- (void)closePreferences
{
ITDebugLog(@"Preferences closed.");
ITHotKey *hotKey;
ITDebugLog(@"Setting up hot keys.");
- if (playerRunningState == ITMTRemotePlayerNotRunning) {
+ if (playerRunningState == ITMTRemotePlayerNotRunning && ![[NetworkController sharedController] isConnectedToServer]) {
return;
}
NSString *title = nil;
NSString *album = nil;
NSString *artist = nil;
+ NSString *composer = nil;
NSString *time = nil;
NSString *track = nil;
NSImage *art = nil;
int rating = -1;
+ ITDebugLog(@"Showing track info status window.");
+
NS_DURING
source = [[self currentRemote] currentSource];
title = [[self currentRemote] currentSongTitle];
[self networkError:localException];
NS_ENDHANDLER
- ITDebugLog(@"Showing track info status window.");
-
if ( title ) {
if ( [df boolForKey:@"showAlbum"] ) {
NS_ENDHANDLER
}
+ if ( [df boolForKey:@"showComposer"] ) {
+ NS_DURING
+ composer = [[self currentRemote] currentSongComposer];
+ NS_HANDLER
+ [self networkError:localException];
+ NS_ENDHANDLER
+ }
+
if ( [df boolForKey:@"showTime"] ) {
NS_DURING
time = [NSString stringWithFormat:@"%@: %@ / %@",
} else {
title = NSLocalizedString(@"noSongPlaying", @"No song is playing.");
}
+ ITDebugLog(@"Showing current track info status window.");
[statusWindowController showSongInfoWindowWithSource:source
title:title
album:album
artist:artist
+ composer:composer
time:time
track:track
rating:rating
if (result == 1) {
[[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
currentRemote = [[[networkController networkObject] remote] retain];
+
+ [self setupHotKeys];
+ //playerRunningState = ITMTRemotePlayerRunning;
+ playerRunningState = [[self currentRemote] playerRunningState];
+
[refreshTimer invalidate];
refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
target:self
[currentRemote release];
currentRemote = [remoteArray objectAtIndex:0];
[networkController disconnect];
+
+ if ([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) {
+ [self applicationLaunched:nil];
+ } else {
+ [self applicationTerminated:nil];
+ }
[self timerUpdate];
return YES;
}
- (void)applicationLaunched:(NSNotification *)note
{
NS_DURING
- if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) {
+ if (!note || ([[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]] && ![[NetworkController sharedController] isConnectedToServer])) {
ITDebugLog(@"Remote application launched.");
playerRunningState = ITMTRemotePlayerRunning;
[[self currentRemote] begin];
- (void)applicationTerminated:(NSNotification *)note
{
NS_DURING
- if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) {
+ if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]] && ![[NetworkController sharedController] isConnectedToServer]) {
ITDebugLog(@"Remote application terminated.");
playerRunningState = ITMTRemotePlayerNotRunning;
[[self currentRemote] halt];
[super dealloc];
}
-@end
\ No newline at end of file
+@end