Checks iTunes version at startup to avoid starting the polling timer if it isn't needed.
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>IBDocumentLocation</key>
+ <string>69 53 356 240 0 0 1152 746 </string>
+ <key>IBEditorPositions</key>
+ <dict>
+ <key>200</key>
+ <string>69 298 222 44 0 0 1152 746 </string>
+ </dict>
<key>IBFramework Version</key>
<key>IBFramework Version</key>
+ <string>437.0</string>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>200</integer>
+ </array>
<key>IBSystem Version</key>
<key>IBSystem Version</key>
MTBlingController *bling;
NSTimer *registerTimer;
MTBlingController *bling;
NSTimer *registerTimer;
- BOOL timerUpdating, _checkingForServer, _popped, _open;
+ BOOL timerUpdating, _checkingForServer, _popped, _open, _needsPolling;
BOOL blinged;
NSLock *_serverCheckLock;
}
BOOL blinged;
NSLock *_serverCheckLock;
}
- (void)applicationDidFinishLaunching:(NSNotification *)note
{
- (void)applicationDidFinishLaunching:(NSNotification *)note
{
+ NSString *iTunesPath = [df stringForKey:@"CustomPlayerPath"];
+ NSDictionary *iTunesInfoPlist;
+ float iTunesVersion;
+
//Turn on debug mode if needed
if ([df boolForKey:@"ITDebugMode"]) {
SetITDebugMode(YES);
}
//Turn on debug mode if needed
if ([df boolForKey:@"ITDebugMode"]) {
SetITDebugMode(YES);
}
+
+ //Check if iTunes 4.7 or later is installed
+ if (!iTunesPath) {
+ iTunesPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"iTunes.app"];
+ }
+ iTunesInfoPlist = [[NSBundle bundleWithPath:iTunesPath] infoDictionary];
+ iTunesVersion = [[iTunesInfoPlist objectForKey:@"CFBundleVersion"] floatValue];
+ ITDebugLog(@"iTunes version found: %f.", iTunesVersion);
+ if (iTunesVersion >= 4.7) {
+ _needsPolling = NO;
+ } else {
+ _needsPolling = YES;
+ }
+
if (([df integerForKey:@"appVersion"] < 1200) && ([df integerForKey:@"SongsInAdvance"] > 0)) {
[df removePersistentDomainForName:@"com.ithinksw.menutunes"];
[df synchronize];
if (([df integerForKey:@"appVersion"] < 1200) && ([df integerForKey:@"SongsInAdvance"] > 0)) {
[df removePersistentDomainForName:@"com.ithinksw.menutunes"];
[df synchronize];
if (blinged) {
[statusItem setEnabled:YES];
[[ITHotKeyCenter sharedCenter] setEnabled:YES];
if (blinged) {
[statusItem setEnabled:YES];
[[ITHotKeyCenter sharedCenter] setEnabled:YES];
- if (![refreshTimer isValid]) {
+ if (_needsPolling && ![refreshTimer isValid]) {
[refreshTimer release];
refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
target:self
[refreshTimer release];
refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
target:self
- (void)trackChanged:(NSNotification *)note
{
//If we're running the timer, shut it off since we don't need it!
- (void)trackChanged:(NSNotification *)note
{
//If we're running the timer, shut it off since we don't need it!
- if (refreshTimer && [refreshTimer isValid]) {
+ /*if (refreshTimer && [refreshTimer isValid]) {
ITDebugLog(@"Invalidating refresh timer.");
[refreshTimer invalidate];
[refreshTimer release];
refreshTimer = nil;
ITDebugLog(@"Invalidating refresh timer.");
[refreshTimer invalidate];
[refreshTimer release];
refreshTimer = nil;
if (![self songChanged]) {
return;
if (![self songChanged]) {
return;
NSImage *art = nil;
int rating = -1;
int playCount = -1;
NSImage *art = nil;
int rating = -1;
int playCount = -1;
ITDebugLog(@"Showing track info status window.");
NS_DURING
ITDebugLog(@"Showing track info status window.");
NS_DURING
[self setupHotKeys];
//playerRunningState = ITMTRemotePlayerRunning;
playerRunningState = [[self currentRemote] playerRunningState];
[self setupHotKeys];
//playerRunningState = ITMTRemotePlayerRunning;
playerRunningState = [[self currentRemote] playerRunningState];
- if (refreshTimer) {
- [refreshTimer invalidate];
+ if (_needsPolling) {
+ if (refreshTimer) {
+ [refreshTimer invalidate];
+ }
+ refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+ target:self
+ selector:@selector(timerUpdate)
+ userInfo:nil
+ repeats:YES] retain];
- 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 1;
[self timerUpdate];
ITDebugLog(@"Connection successful.");
return 1;
[[self currentRemote] begin];
[self setLatestSongIdentifier:@""];
[self timerUpdate];
[[self currentRemote] begin];
[self setLatestSongIdentifier:@""];
[self timerUpdate];
- refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
- target:self
- selector:@selector(timerUpdate)
- userInfo:nil
- repeats:YES] retain];
+ if (_needsPolling) {
+ refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+ target:self
+ selector:@selector(timerUpdate)
+ userInfo:nil
+ repeats:YES] retain];
+ }
//[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil];
if (![df boolForKey:@"UsePollingOnly"]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(trackChanged:) name:@"ITMTTrackChanged" object:nil];
//[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil];
if (![df boolForKey:@"UsePollingOnly"]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(trackChanged:) name:@"ITMTTrackChanged" object:nil];