/*****************************************************************************
* 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
@implementation VLCEyeTVController
+@synthesize eyeTVRunning = b_eyeTVactive, deviceConnected = b_deviceConnected;
+
static VLCEyeTVController *_o_sharedInstance = nil;
+ (VLCEyeTVController *)sharedInstance
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]
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
}
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];