]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/eyetv.m
macosx/CAS: implement basic error checking for the stream-out settings
[vlc] / modules / gui / macosx / eyetv.m
index b176b36bfbfdfbe7eb486d28057b536dd6013888..f36a288d4a8d3749b44a72ca234255121626f15b 100644 (file)
@@ -1,10 +1,11 @@
 /*****************************************************************************
 * eyetv.m: small class to control the notification parts of the EyeTV plugin
 *****************************************************************************
-* Copyright (C) 2006-2007 the VideoLAN team
+* Copyright (C) 2006-2011 VLC authors and VideoLAN
 * $Id$
 *
 * Authors: Felix Kühne <fkuehne at videolan dot org>
+*          Damien Fouilleul <damienf at videolan dot org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
@@ -29,6 +30,8 @@
 
 @implementation VLCEyeTVController
 
+@synthesize eyeTVRunning = b_eyeTVactive, deviceConnected = b_deviceConnected;
+
 static VLCEyeTVController *_o_sharedInstance = nil;
 
 + (VLCEyeTVController *)sharedInstance
@@ -36,11 +39,11 @@ static VLCEyeTVController *_o_sharedInstance = nil;
     return _o_sharedInstance ? _o_sharedInstance : [[self alloc] init];
 }
 
-- (id)init 
+- (id)init
 {
-    if (_o_sharedInstance) {
+    if (_o_sharedInstance)
         [self dealloc];
-    else {
+    else {
         _o_sharedInstance = [super init];
 
         [[NSDistributedNotificationCenter defaultCenter]
@@ -50,102 +53,121 @@ static VLCEyeTVController *_o_sharedInstance = nil;
                          object: @"VLCEyeTVSupport"
              suspensionBehavior: NSNotificationSuspensionBehaviorDeliverImmediately];
     }
-    
+
     return _o_sharedInstance;
 }
 
 - (void)globalNotificationReceived: (NSNotification *)theNotification
 {
-    msg_Dbg( VLCIntf, "notification received in VLC with name %s and object %s",
-             [[theNotification name] UTF8String], [[theNotification object] UTF8String] );
-
     /* update our info on the used device */
-    if( [[theNotification name] isEqualToString: @"DeviceAdded"] )
+    if ([[theNotification name] isEqualToString: @"DeviceAdded"])
         b_deviceConnected = YES;
-    if( [[theNotification name] isEqualToString: @"DeviceRemoved"] )
+    if ([[theNotification name] isEqualToString: @"DeviceRemoved"])
         b_deviceConnected = NO;
 
     /* is eyetv running? */
-    if( [[theNotification name] isEqualToString: @"PluginInit"] )
+    if ([[theNotification name] isEqualToString: @"PluginInit"])
         b_eyeTVactive = YES;
-    if( [[theNotification name] isEqualToString: @"PluginQuit"] )
+    if ([[theNotification name] isEqualToString: @"PluginQuit"])
         b_eyeTVactive = NO;
 }
 
-- (BOOL)isEyeTVrunning
-{
-    return b_eyeTVactive;
-}
-
-- (BOOL)isDeviceConnected
+- (void)launchEyeTV
 {
-    return b_deviceConnected;
+    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:
+                @"tell application \"EyeTV\"\n"
+                   "launch with server mode\n"
+                 "end tell"];
+    NSDictionary *errorDict;
+    NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&errorDict];
+    if (nil == descriptor) {
+        NSString *errorString = [errorDict objectForKey:NSAppleScriptErrorMessage];
+        NSLog(@"opening EyeTV failed with error status '%@'", errorString);
+    }
+    [script release];
 }
 
-
-- (void)launchEyeTV
+- (int)channel
 {
+    int currentChannel = 0;
     NSAppleScript *script = [[NSAppleScript alloc] initWithSource:
-                @"tell application \"EyeTV\" to launch with server mode"];
+            @"tell application \"EyeTV\" to get current channel"];
     NSDictionary *errorDict;
     NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&errorDict];
-    if( nil == descriptor ) 
-    {
+    if (nil == descriptor) {
         NSString *errorString = [errorDict objectForKey:NSAppleScriptErrorMessage];
-        msg_Err( VLCIntf, "opening EyeTV failed with error code %s", [errorString UTF8String] );
-    }
+        NSLog(@"EyeTV channel inventory failed with error status '%@'", errorString);
+    } else
+        currentChannel = (int)[descriptor int32Value];
     [script release];
+    return currentChannel;
 }
 
-- (void)switchChannelUp:(BOOL)b_yesOrNo
+- (int)switchChannelUp:(BOOL)b_yesOrNo
 {
+    int currentChannel = 0;
     NSAppleScript *script;
     NSDictionary *errorDict;
     NSAppleEventDescriptor *descriptor;
 
-    if( b_yesOrNo == YES )
-    {
+    if (b_yesOrNo == YES) {
         script = [[NSAppleScript alloc] initWithSource:
-                    @"tell application \"EyeTV\" to channel_up"];
-        msg_Dbg( VLCIntf, "telling eyetv to switch 1 channel up" );
-    }
-    else
-    {
-        script = [[NSAppleScript alloc] initWithSource:@"tell application \"EyeTV\" to channel_down"];
-        msg_Dbg( VLCIntf, "telling eyetv to switch 1 channel down" );
+                    @"tell application \"EyeTV\"\n"
+                       "channel_up\n"
+                       "get current channel\n"
+                     "end tell"];
+        NSLog(@"telling eyetv to switch 1 channel up");
+    } else {
+        script = [[NSAppleScript alloc] initWithSource:
+                    @"tell application \"EyeTV\"\n"
+                       "channel_down\n"
+                       "get current channel\n"
+                     "end tell"];
+        NSLog(@"telling eyetv to switch 1 channel down");
     }
-    
+
     descriptor = [script executeAndReturnError:&errorDict];
-    if( nil == descriptor ) 
-    {
+    if (nil == descriptor) {
         NSString *errorString = [errorDict objectForKey:NSAppleScriptErrorMessage];
-        msg_Err( VLCIntf, "EyeTV channel change failed with error code %s", [errorString UTF8String] );
-    }
+        NSLog(@"EyeTV channel change failed with error status '%@'", errorString);
+    } else
+        currentChannel = (int)[descriptor int32Value];
+
     [script release];
+    return currentChannel;
 }
 
-- (void)selectChannel: (int)theChannelNum
+- (void)setChannel: (int)theChannelNum
 {
     NSAppleScript *script;
-    switch( theChannelNum )
-    {
+    switch(theChannelNum) {
         case -2: // Composite
             script = [[NSAppleScript alloc] initWithSource:
-                        @"tell application \"EyeTV\" to input_change input source composite video input"];
+                        @"tell application \"EyeTV\"\n"
+                         "  input_change input source composite video input\n"
+                         "  show player_window\n"
+                         "end tell"];
             break;
         case -1: // S-Video
             script = [[NSAppleScript alloc] initWithSource:
-                        @"tell application \"EyeTV\" to input_change input source S video input"];
+                        @"tell application \"EyeTV\"\n"
+                         "  input_change input source S video input\n"
+                         "  show player_window\n"
+                         "end tell"];
             break;
-        case 0: // Tuner
+        case 0: // Last
             script = [[NSAppleScript alloc] initWithSource:
-                        @"tell application \"EyeTV\" to input_change input source tuner input"];
+                        @"tell application \"EyeTV\"\n"
+                         "  show player_window\n"
+                         "end tell"];
             break;
         default:
-            if( theChannelNum > 0 )
-            {
+            if (theChannelNum > 0) {
                 NSString *channel_change = [NSString stringWithFormat:
-                    @"tell application \"EyeTV\" to channel_change channel number %d", theChannelNum];
+                    @"tell application \"EyeTV\"\n"
+                     "  channel_change channel number %d\n"
+                     "  show player_window\n"
+                     "end tell", theChannelNum];
                 script = [[NSAppleScript alloc] initWithSource:channel_change];
             }
             else
@@ -153,34 +175,30 @@ static VLCEyeTVController *_o_sharedInstance = nil;
     }
     NSDictionary *errorDict;
     NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&errorDict];
-    if( nil == descriptor ) 
-    {
+    if (nil == descriptor) {
         NSString *errorString = [errorDict objectForKey:NSAppleScriptErrorMessage];
-        msg_Err( VLCIntf, "EyeTV source change failed with error code %s", [errorString UTF8String] );
+        NSLog(@"EyeTV source change failed with error status '%@'", errorString);
     }
     [script release];
 }
 
-- (NSEnumerator *)getChannels
+- (NSEnumerator *)allChannels
 {
     NSEnumerator *channels = nil;
     NSAppleScript *script = [[NSAppleScript alloc] initWithSource:
             @"tell application \"EyeTV\" to get name of every channel"];
     NSDictionary *errorDict;
     NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&errorDict];
-    if( nil == descriptor ) 
-    {
+    if (nil == descriptor) {
         NSString *errorString = [errorDict objectForKey:NSAppleScriptErrorMessage];
-        msg_Err( VLCIntf, "EyeTV channel inventory failed with error code %s", [errorString UTF8String] );
-    }
-    else
-    {
+        NSLog(@"EyeTV channel inventory failed with error status '%@'", errorString);
+    } else {
         int count = [descriptor numberOfItems];
-        int x=0; 
+        int x=0;
         NSMutableArray *channelArray = [NSMutableArray arrayWithCapacity:count];
-        while( x++ < count ) {
+        while(x++ < count)
             [channelArray addObject:[[descriptor descriptorAtIndex:x] stringValue]];
-        }
+
         channels = [channelArray objectEnumerator];
     }
     [script release];