Now I only OpenComponent and CloseComponent once, making me much faster!
[MenuTunes.git] / MenuTunes.m
index bcc5590..81055ed 100755 (executable)
@@ -13,11 +13,9 @@ Things to do:
     - hot keys can't be set when NSBGOnly is on. The window is not key,
       so the KeyBroadcaster does not pick up key combos
     - going to need a different way of defining key combos
     - hot keys can't be set when NSBGOnly is on. The window is not key,
       so the KeyBroadcaster does not pick up key combos
     - going to need a different way of defining key combos
-¥ Optimize, this thing is big and slow :(
+¥ Optimize
 ¥ Apple Events! Apple Events! Apple Events!
 ¥ Apple Events! Apple Events! Apple Events!
-
-¥ I think I found a slight memory leak:
-    425 MenuTunes    7.8%  8:29.87   1    56  4827   215M+ 3.14M   135M-  599M+
+¥ Upcoming songs menu items are disabled after launching iTunes and playing
 */
 
 #import "MenuTunes.h"
 */
 
 #import "MenuTunes.h"
@@ -30,6 +28,7 @@ Things to do:
 
 - (void)applicationDidFinishLaunching:(NSNotification *)note
 {
 
 - (void)applicationDidFinishLaunching:(NSNotification *)note
 {
+    asComponent = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype);
     if (![[NSUserDefaults standardUserDefaults] objectForKey:@"menu"])
     {
         [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"<separator>", @"Upcoming Songs", @"Playlists", @"<separator>", @"PreferencesÉ", @"Quit", @"<separator>", @"Current Track Info", nil] forKey:@"menu"];
     if (![[NSUserDefaults standardUserDefaults] objectForKey:@"menu"])
     {
         [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"<separator>", @"Upcoming Songs", @"Playlists", @"<separator>", @"PreferencesÉ", @"Quit", @"<separator>", @"Current Track Info", nil] forKey:@"menu"];
@@ -75,6 +74,7 @@ target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES];
     {
         [refreshTimer invalidate];
     }
     {
         [refreshTimer invalidate];
     }
+    CloseComponent(asComponent);
     [statusItem release];
     [menu release];
     [view release];
     [statusItem release];
     [menu release];
     [view release];
@@ -264,7 +264,6 @@ target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES];
                 NSMenuItem *songItem;
                 songItem = [[NSMenuItem alloc] initWithTitle:curSong action:@selector(playTrack:) keyEquivalent:@""];
                 [songItem setTarget:self];
                 NSMenuItem *songItem;
                 songItem = [[NSMenuItem alloc] initWithTitle:curSong action:@selector(playTrack:) keyEquivalent:@""];
                 [songItem setTarget:self];
-                [songItem setEnabled:YES];
                 [songItem setRepresentedObject:[NSNumber numberWithInt:i]];
                 [upcomingSongsMenu addItem:songItem];
                 [songItem release];
                 [songItem setRepresentedObject:[NSNumber numberWithInt:i]];
                 [upcomingSongsMenu addItem:songItem];
                 [songItem release];
@@ -398,7 +397,7 @@ target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES];
     AECreateDesc(typeChar, [script cString], [script cStringLength], 
 &scriptDesc);
     
     AECreateDesc(typeChar, [script cString], [script cStringLength], 
 &scriptDesc);
     
-    OSADoScript(OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype), &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc);
+    OSADoScript(asComponent, &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc);
     
     length = AEGetDescDataSize(&resultDesc);
     buffer = malloc(length);
     
     length = AEGetDescDataSize(&resultDesc);
     buffer = malloc(length);