#import "StatusWindowController.h"
#import "StatusItemHack.h"
+@implementation NSImage (SmoothAdditions)
+
+- (NSImage *)imageScaledSmoothlyToSize:(NSSize)scaledSize
+{
+ NSImage *newImage;
+ NSImageRep *rep = [self bestRepresentationForDevice:nil];
+
+ newImage = [[NSImage alloc] initWithSize:scaledSize];
+ [newImage lockFocus];
+ {
+ [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
+ [[NSGraphicsContext currentContext] setShouldAntialias:YES];
+ [rep drawInRect:NSMakeRect(3, 3, scaledSize.width - 6, scaledSize.height - 6)];
+ }
+ [newImage unlockFocus];
+ return [newImage autorelease];
+}
+
+@end
+
@interface MainController(Private)
- (ITMTRemote *)loadRemote;
-- (void)timerUpdate;
- (void)setLatestSongIdentifier:(NSString *)newIdentifier;
- (void)applicationLaunched:(NSNotification *)note;
- (void)applicationTerminated:(NSNotification *)note;
globalPrefs = [[df persistentDomainForName:@".GlobalPreferences"] mutableCopy];
if (date) {
[globalPrefs setObject:date forKey:@"ITMTTrialStart"];
+ [globalPrefs setObject:[NSNumber numberWithInt:MT_CURRENT_VERSION] forKey:@"ITMTTrialVers"];
} else {
[globalPrefs removeObjectForKey:@"ITMTTrialStart"];
+ [globalPrefs removeObjectForKey:@"ITMTTrialVers"];
}
[df setPersistentDomain:globalPrefs forName:@".GlobalPreferences"];
[df synchronize];
if (![self blingBling]) {
if ( (! [self getBlingTime] ) || ([now timeIntervalSinceDate:[self getBlingTime]] < 0) ) {
[self setBlingTime:now];
+ } else if ([[[df persistentDomainForName:@".GlobalPreferences"] objectForKey:@"ITMTTrialVers"] intValue] < MT_CURRENT_VERSION) {
+ if ([now timeIntervalSinceDate:[self getBlingTime]] >= 345600) {
+ [self setBlingTime:[now addTimeInterval:-259200]];
+ } else {
+ NSMutableDictionary *globalPrefs;
+ [df synchronize];
+ globalPrefs = [[df persistentDomainForName:@".GlobalPreferences"] mutableCopy];
+ [globalPrefs setObject:[NSNumber numberWithInt:MT_CURRENT_VERSION] forKey:@"ITMTTrialVers"];
+ [df setPersistentDomain:globalPrefs forName:@".GlobalPreferences"];
+ [df synchronize];
+ [globalPrefs release];
+ }
}
+
if ( ([now timeIntervalSinceDate:[self getBlingTime]] >= 604800) && (blinged != YES) ) {
blinged = YES;
[statusItem setEnabled:NO];
[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
if ( [self songChanged] && (timerUpdating != YES) && (playerRunningState == ITMTRemotePlayerRunning) ) {
ITDebugLog(@"The song changed.");
- if ([df boolForKey:@"runScripts"] && [[self currentRemote] currentSongTitle]) {
+ if ([df boolForKey:@"runScripts"]) {
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);
}
[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
{
ITDebugLog(@"Selecting playlist %i", index);
NS_DURING
- //[[self currentRemote] switchToPlaylistAtIndex:(index % 1000) ofSourceAtIndex:(index / 1000)];
- [[self currentRemote] switchToPlaylistAtIndex:index];
+ [[self currentRemote] switchToPlaylistAtIndex:(index % 1000) ofSourceAtIndex:(index / 1000)];
+ //[[self currentRemote] switchToPlaylistAtIndex:index];
NS_HANDLER
[self networkError:localException];
NS_ENDHANDLER
} else {
ITDebugLog(@"Launching player.");
NS_DURING
- if (![[NSWorkspace sharedWorkspace] launchApplication:[[self currentRemote] playerFullName]]) {
+ NSString *path;
+ if ( (path = [df stringForKey:@"CustomPlayerPath"]) ) {
+ } else {
+ path = [[self currentRemote] playerFullName];
+ }
+ if (![[NSWorkspace sharedWorkspace] launchApplication:path]) {
ITDebugLog(@"Error Launching Player");
}
NS_HANDLER
//
//
+- (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;
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:@"%@: %@ / %@",
}
if ( [df boolForKey:@"showAlbumArtwork"] ) {
+ NSSize oldSize, newSize;
NS_DURING
- art = [[self currentRemote] currentSongAlbumArt];
+ art = [[self currentRemote] currentSongAlbumArt];
+ oldSize = [art size];
+ if (oldSize.width > oldSize.height) newSize = NSMakeSize(110,oldSize.height * (110.0f / oldSize.width));
+ else newSize = NSMakeSize(oldSize.width * (110.0f / oldSize.height),110);
+ art = [[[[NSImage alloc] initWithData:[art TIFFRepresentation]] autorelease] imageScaledSmoothlyToSize:newSize];
NS_HANDLER
[self networkError:localException];
NS_ENDHANDLER
} else {
title = NSLocalizedString(@"noSongPlaying", @"No song is playing.");
}
-
[statusWindowController showSongInfoWindowWithSource:source
title:title
album:album
artist:artist
+ composer:composer
time:time
track:track
rating:rating
[super dealloc];
}
-@end
\ No newline at end of file
+@end