Reverted back to the lame single source style playlist menu because I
authorKent Sutherland <ksuther@ithinksw.com>
Tue, 16 Dec 2003 00:40:02 +0000 (00:40 +0000)
committerKent Sutherland <ksuther@ithinksw.com>
Tue, 16 Dec 2003 00:40:02 +0000 (00:40 +0000)
suck at coding.

ITMTRemote.h
ITMTRemote.m
MainController.m
MenuController.m
iTunesRemote.m
libValidate.a

index 0d2c21a..b77fc22 100755 (executable)
@@ -382,7 +382,7 @@ er's process managment.
 /*!
  * @method switchToPlaylistAtIndex:
  */
-- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2;
+//- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2;
 
 /*!
  * @method switchToSongAtIndex:
index 55e599b..b88b086 100755 (executable)
     return NO;
 }
 
-- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2
+/*- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2
 {
     return NO;
-}
+}*/
 
 - (BOOL)switchToSongAtIndex:(int)index
 {
index 2b3a7fb..9313f11 100755 (executable)
@@ -292,7 +292,7 @@ static MainController *sharedController;
         [statusItem setMenu:[menuController menu]];
     }
     
-    if ( [self songChanged] && (timerUpdating != YES) ) {
+    if ( [self songChanged] && (timerUpdating != YES) && (playerRunningState == ITMTRemotePlayerRunning) ) {
         ITDebugLog(@"The song changed.");
         timerUpdating = YES;
         
@@ -406,7 +406,8 @@ static MainController *sharedController;
 {
     ITDebugLog(@"Selecting playlist %i", index);
     NS_DURING
-        [[self currentRemote] switchToPlaylistAtIndex:(index % 1000) ofSourceAtIndex:(index / 1000)];
+        //[[self currentRemote] switchToPlaylistAtIndex:(index % 1000) ofSourceAtIndex:(index / 1000)];
+        [[self currentRemote] switchToPlaylistAtIndex:index];
     NS_HANDLER
         [self networkError:localException];
     NS_ENDHANDLER
@@ -1072,12 +1073,12 @@ static MainController *sharedController;
     NS_DURING
         if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) {
             ITDebugLog(@"Remote application terminated.");
+            playerRunningState = ITMTRemotePlayerNotRunning;
             [[self currentRemote] halt];
             [refreshTimer invalidate];
             [refreshTimer release];
             refreshTimer = nil;
             [self clearHotKeys];
-            playerRunningState = ITMTRemotePlayerNotRunning;
             
             if ([df objectForKey:@"ShowPlayer"] != nil) {
                 ITHotKey *hotKey;
index 9c7f9b5..668f961 100755 (executable)
@@ -22,6 +22,7 @@
 - (NSMenu *)eqMenu;
 - (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers
         onItem:(NSMenuItem *)item;
+- (BOOL)iPodAtPathAutomaticallyUpdates:(NSString *)name;
 @end
 
 @implementation MenuController
 - (void)rebuildSubmenus
 {
     ITDebugLog(@"Rebuilding all of the submenus.");
-    
     NS_DURING
         _currentPlaylist = [[[MainController sharedController] currentRemote] currentPlaylistIndex];
         _currentTrack = [[[MainController sharedController] currentRemote] currentSongIndex];
     return upcomingSongsMenu;
 }
 
-/*- (NSMenu *)playlistsMenu
+- (NSMenu *)playlistsMenu
 {
     NSMenu *playlistsMenu = [[NSMenu alloc] initWithTitle:@""];
     NSArray *playlists;
     }
     ITDebugLog(@"Done Building \"Playlists\" menu");
     return playlistsMenu;
-}*/
+}
 
 
-- (NSMenu *)playlistsMenu
+/*- (NSMenu *)playlistsMenu
 {
     NSMenu *playlistsMenu = [[NSMenu alloc] initWithTitle:@""];
     NSArray *playlists;
         NSString *name = [curPlaylist objectAtIndex:0];
         NSMenu *submenu = [[NSMenu alloc] init];
         ITDebugLog(@"Adding source: %@", name);
-        for (j = 2; j < [curPlaylist count]; j++) {
-            ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:j]);
-            tempItem = [submenu addItemWithTitle:[curPlaylist objectAtIndex:j] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""];
-            [tempItem setTag:(i * 1000) + j];
-            [tempItem setTarget:self];
-            if ([[curPlaylist objectAtIndex:i] intValue] == ITMTRemoteiPodSource) {
-                [tempItem setEnabled:NO];
+        
+        if ( ([[curPlaylist objectAtIndex:i] intValue] == ITMTRemoteiPodSource) && (![self iPodAtPathAutomaticallyUpdates:[curPlaylist objectAtIndex:j]]) ) {
+            ITDebugLog(@"Invalid iPod source.");
+        } else {
+            for (j = 2; j < [curPlaylist count]; j++) {
+                ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:j]);
+                tempItem = [submenu addItemWithTitle:[curPlaylist objectAtIndex:j] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""];
+                [tempItem setTag:(i * 1000) + j];
+                [tempItem setTarget:self];
             }
+            [[playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""] setSubmenu:[submenu autorelease]];
         }
-        [[playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""] setSubmenu:[submenu autorelease]];
     }
     
     if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ){
     }
     ITDebugLog(@"Done Building \"Playlists\" menu");
     return playlistsMenu;
-}
+}*/
 
 - (NSMenu *)eqMenu
 {
     ITDebugLog(@"Done setting key equivalent on menu item: %@", [item title]);
 }
 
+- (BOOL)iPodAtPathAutomaticallyUpdates:(NSString *)name
+{
+    NSArray *volumes = [[NSWorkspace sharedWorkspace] mountedLocalVolumePaths];
+    NSEnumerator *volEnum = [volumes objectEnumerator];
+    NSString *nextVolume;
+    
+    while ( (nextVolume = [volEnum nextObject]) ) {
+        if ([nextVolume rangeOfString:name options:nil range:NSMakeRange(0, [name length] - 1)].location != NSNotFound) {
+            NSFileHandle *handle;
+            NSData *data;
+            NSString *path = [nextVolume stringByAppendingPathComponent:@"/iPod_Control/iTunes/iTunesPrefs"];
+            if ( ![[NSFileManager defaultManager] fileExistsAtPath:path] ) {
+                ITDebugLog(@"Error, path isn't an iPod! %@", path);
+                return NO;
+            }
+            handle = [NSFileHandle fileHandleForReadingAtPath:name];
+            [handle seekToFileOffset:10];
+            data = [handle readDataOfLength:1];
+            if ( (*((unsigned char*)[data bytes]) == 0x00) ) {
+                ITDebugLog(@"iPod is manually updated. %@", path);
+                return NO;
+            } else if ( ( *((unsigned char*)[data bytes]) == 0x01 ) ) {
+                ITDebugLog(@"iPod is automatically updated. %@", path);
+                return YES;
+            } else {
+                ITDebugLog(@"Error! Value: %h  Desc: %@ Path: %@", *((unsigned char*)[data bytes]), [data description], path);
+                return NO;
+            }
+        }
+    }
+}
+
 @end
\ No newline at end of file
index c7d17a8..d41f3bd 100755 (executable)
     return ITMTRemotePlayerStopped;
 }
 
-/*- (NSArray *)playlists
+- (NSArray *)playlists
 {
     long i = 0;
     const signed long numPlaylists = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"kocl:type('cPly'), '----':()" eventClass:@"core" eventID:@"cnte" appPSN:savedPSN];
         [playlists addObject:theObj];
     }
     return [playlists autorelease];
-}*/
+}
 
 //Full source awareness
-- (NSArray *)playlists
+/*- (NSArray *)playlists
 {   unsigned long i,k;
     const signed long numSources = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"kocl:type('cSrc'), '----':()" eventClass:@"core" eventID:@"cnte" appPSN:savedPSN];
     NSMutableArray *allSources = [[NSMutableArray alloc] init];
     }
     ITDebugLog(@"Finished getting playlists.");
     return [NSArray arrayWithArray:[allSources autorelease]];
-}
+}*/
 
 - (int)numberOfSongsInPlaylistAtIndex:(int)index
 {
     return YES;
 }
 
-- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2
+/*- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2
 {
     ITDebugLog(@"Switching to playlist at index %i of source %i", index, index2);
     [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'indx', want:type('cPly'), seld:long(%lu), from: obj { form:'indx', want:type('cSrc'), seld:long(%lu), from:'null'() } }", index - 1, index2 + 1] eventClass:@"hook" eventID:@"Play" appPSN:savedPSN];
     //{ form:'indx', want:type('cPly'), seld:long(%lu), from:obj { form:'indx', want:type('cSrc'), seld:long('%lu'), from:'null'() } } -- obj { form:'indx', want:type('cSrc'), seld:long(1), from:'null'() }
     ITDebugLog(@"Done switching to playlist at index %i of source %i", index, index2);
     return YES;
-}
+}*/
 
 - (BOOL)switchToSongAtIndex:(int)index
 {
index 34e2f0d..4fb4485 100755 (executable)
Binary files a/libValidate.a and b/libValidate.a differ