Commit ff8183c0 authored by Jan Winter's avatar Jan Winter Committed by Felix Paul Kühne

OS X AppleScript: added new features

Signed-off-by: default avatarFelix Paul Kühne <fkuehne@videolan.org>
parent 0333f05e
......@@ -41,8 +41,22 @@
- (int)playbackRate;
- (void)next;
- (void)previous;
- (void)forward;
- (void)backward;
- (BOOL)isPlaying;
- (int)currentTime;
- (void)setCurrentTime:(int)i_value;
- (int)durationOfCurrentPlaylistItem;
- (NSURL*)URLOfCurrentPlaylistItem;
- (NSString*)nameOfCurrentPlaylistItem;
- (void)forward; //LEGACY SUPPORT
- (void)backward; //LEGACY SUPPORT
- (void)forwardExtraShort;
- (void)backwardExtraShort;
- (void)forwardShort;
- (void)backwardShort;
- (void)forwardMedium;
- (void)backwardMedium;
- (void)forwardLong;
- (void)backwardLong;
- (void)repeatOne;
- (void)repeatAll;
......@@ -52,7 +66,9 @@
- (void)volumeUp;
- (void)volumeDown;
- (void)mute;
- (void)setVolume: (int)i_value;
- (BOOL)isMuted;
- (int)volume;
- (void)setVolume:(int)i_value;
- (void)setAspectRatioLocked:(BOOL)b_value;
- (BOOL)aspectRatioIsLocked;
......
......@@ -29,6 +29,8 @@
#import <vlc_keys.h>
#import <vlc_osd.h>
#import <vlc_aout_intf.h>
#import <vlc/vlc.h>
#import <vlc_strings.h>
@implementation VLCCoreInteraction
static VLCCoreInteraction *_o_sharedInstance = nil;
......@@ -158,16 +160,156 @@ static VLCCoreInteraction *_o_sharedInstance = nil;
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_NEXT );
}
- (BOOL)isPlaying
{
input_thread_t * p_input = pl_CurrentInput( VLCIntf );
if (!p_input) return NO;
input_state_e i_state = ERROR_S;
input_Control( p_input, INPUT_GET_STATE, &i_state);
vlc_object_release( p_input );
return ((i_state == OPENING_S) || (i_state == PLAYING_S));
}
- (int)currentTime
{
input_thread_t * p_input = pl_CurrentInput( VLCIntf );
int64_t i_currentTime = -1;
if (!p_input) return i_currentTime;
input_Control( p_input, INPUT_GET_TIME, &i_currentTime);
vlc_object_release( p_input );
return (int)( i_currentTime / 1000000 );
}
- (void)setCurrentTime:(int)i_value
{
int64_t i64_value = (int64_t)i_value;
input_thread_t * p_input = pl_CurrentInput( VLCIntf );
if (!p_input) return;
input_Control( p_input, INPUT_SET_TIME, (int64_t)(i64_value * 1000000));
vlc_object_release( p_input );
}
- (int)durationOfCurrentPlaylistItem
{
input_thread_t * p_input = pl_CurrentInput( VLCIntf );
int64_t i_duration = -1;
if (!p_input) return i_duration;
input_Control( p_input, INPUT_GET_LENGTH, &i_duration);
vlc_object_release( p_input );
return (int)(i_duration / 1000000);
}
- (NSURL*)URLOfCurrentPlaylistItem
{
input_thread_t *p_input = pl_CurrentInput( VLCIntf );
if (!p_input) return nil;
input_item_t *p_item = input_GetItem( p_input );
if (!p_item) return nil;
char *psz_uri = input_item_GetURI( p_item );
if (!psz_uri) return nil;
NSURL *o_url;
o_url = [NSURL URLWithString:[NSString stringWithUTF8String:psz_uri]];
return o_url;
}
- (NSString*)nameOfCurrentPlaylistItem
{
input_thread_t *p_input = pl_CurrentInput( VLCIntf );
if (!p_input) return nil;
input_item_t *p_item = input_GetItem( p_input );
if (!p_item) return nil;
char *psz_uri = input_item_GetURI( p_item );
if (!psz_uri) return nil;
NSString *o_name;
char *format = var_InheritString( VLCIntf, "input-title-format" );
char *formated = str_format_meta( p_input, format );
free( format );
o_name = [NSString stringWithUTF8String:formated];
free( formated );
NSURL * o_url = [NSURL URLWithString: [NSString stringWithUTF8String: psz_uri]];
free( psz_uri );
if ([o_name isEqualToString:@""])
{
if ([o_url isFileURL])
o_name = [[NSFileManager defaultManager] displayNameAtPath: [o_url path]];
else
o_name = [o_url absoluteString];
}
return o_name;
}
- (void)forward
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_SHORT );
//LEGACY SUPPORT
[self forwardShort];
}
- (void)backward
{
//LEGACY SUPPORT
[self backwardShort];
}
- (void)forwardExtraShort
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_EXTRASHORT );
}
- (void)backwardExtraShort
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_EXTRASHORT );
}
- (void)forwardShort
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_SHORT );
}
- (void)backwardShort
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_SHORT );
}
- (void)forwardMedium
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_MEDIUM );
}
- (void)backwardMedium
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_MEDIUM );
}
- (void)forwardLong
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_LONG );
}
- (void)backwardLong
{
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_LONG );
}
- (void)shuffle
{
vlc_value_t val;
......@@ -263,13 +405,30 @@ static VLCCoreInteraction *_o_sharedInstance = nil;
var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_VOL_MUTE );
}
- (BOOL)isMuted
{
playlist_t * p_playlist = pl_Get( VLCIntf );
BOOL b_is_muted = NO;
b_is_muted = aout_IsMuted( VLC_OBJECT(p_playlist) );
return b_is_muted;
}
- (int)volume
{
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = pl_Get( VLCIntf );
audio_volume_t i_volume = aout_VolumeGet( p_playlist );
return (int)i_volume;
}
- (void)setVolume: (int)i_value
{
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = pl_Get( VLCIntf );
audio_volume_t i_volume = (audio_volume_t)i_value;
int i_volume_step;
i_volume_step = config_GetInt( VLCIntf->p_libvlc, "volume-step" );
aout_VolumeSet( p_playlist, i_volume * i_volume_step );
}
......@@ -292,4 +451,5 @@ static VLCCoreInteraction *_o_sharedInstance = nil;
playlist_t * p_playlist = pl_Get( VLCIntf );
var_ToggleBool( p_playlist, "fullscreen" );
}
@end
......@@ -21,6 +21,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
/*****************************************************************************
* VLGetURLScriptCommand interface
*****************************************************************************/
......@@ -40,4 +42,15 @@
- (BOOL)scriptFullscreenMode;
- (void)setScriptFullscreenMode: (BOOL)mode;
- (double)audioVolume;
- (void)setAudioVolume: (double)mode;
- (int)currentTime;
- (void)setCurrentTime: (int)mode;
- (int) durationOfCurrentItem;
- (NSString*) pathOfCurrentItem;
- (NSString*) nameOfCurrentItem;
@end
......@@ -27,6 +27,7 @@
#include "intf.h"
#include "applescript.h"
#include "CoreInteraction.h"
#include "vlc_aout_intf.h"
/*****************************************************************************
* VLGetURLScriptCommand implementation
......@@ -85,6 +86,7 @@
- (id)performDefaultImplementation {
NSString *o_command = [[self commandDescription] commandName];
NSString *o_parameter = [self directParameter];
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = pl_Get( p_intf );
......@@ -124,6 +126,66 @@
else if ( [o_command isEqualToString:@"volumeDown"] )
{
[[VLCCoreInteraction sharedInstance] volumeDown];
}
else if ( [o_command isEqualToString:@"stepForward"] )
{
//default: forwardShort
if (o_parameter)
{
int i_parameter = [o_parameter intValue];
switch (i_parameter)
{
case 1:
[[VLCCoreInteraction sharedInstance] forwardExtraShort];
break;
case 2:
[[VLCCoreInteraction sharedInstance] forwardShort];
break;
case 3:
[[VLCCoreInteraction sharedInstance] forwardMedium];
break;
case 4:
[[VLCCoreInteraction sharedInstance] forwardLong];
break;
default:
[[VLCCoreInteraction sharedInstance] forwardShort];
break;
}
}
else
{
[[VLCCoreInteraction sharedInstance] forwardShort];
}
}
else if ( [o_command isEqualToString:@"stepBackward"] )
{
//default: backwardShort
if (o_parameter)
{
int i_parameter = [o_parameter intValue];
switch (i_parameter)
{
case 1:
[[VLCCoreInteraction sharedInstance] backwardExtraShort];
break;
case 2:
[[VLCCoreInteraction sharedInstance] backwardShort];
break;
case 3:
[[VLCCoreInteraction sharedInstance] backwardMedium];
break;
case 4:
[[VLCCoreInteraction sharedInstance] backwardLong];
break;
default:
[[VLCCoreInteraction sharedInstance] backwardShort];
break;
}
}
else
{
[[VLCCoreInteraction sharedInstance] backwardShort];
}
}
return nil;
}
......@@ -156,4 +218,59 @@
[[VLCCoreInteraction sharedInstance] toggleFullscreen];
}
- (BOOL) muted {
return [[VLCCoreInteraction sharedInstance] isMuted];
}
- (BOOL) playing {
return [[VLCCoreInteraction sharedInstance] isPlaying];
}
- (double) audioVolume {
return ( (double)[[VLCCoreInteraction sharedInstance] volume] / (double)AOUT_VOLUME_DEFAULT );
}
- (void) setAudioVolume: (double) d_audioVolume {
//1 = 100%, 4 = 400%; 0 <= d_audioVolume <= 4
//0-1024 (but AOUT_VOLUME_MAX == 512)???
//AOUT_VOLUME_DEFAULT = 256 = 100%
//somehow [[VLCCoreInteraction sharedInstance] setVolume:i_parameter] has 0-32 steps with 32 as stepWidth (0 - 1024)
if (d_audioVolume < 0)
d_audioVolume = 0;
if (d_audioVolume > 4)
d_audioVolume = 4;
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = pl_Get( VLCIntf );
int i_volume_step = config_GetInt( VLCIntf->p_libvlc, "volume-step" );
int i_parameter = (int) ( d_audioVolume * i_volume_step / 4 );
[[VLCCoreInteraction sharedInstance] setVolume:i_parameter];
}
- (int) currentTime {
return [[VLCCoreInteraction sharedInstance] currentTime];
}
- (void) setCurrentTime: (int) i_currentTime {
if (i_currentTime) {
[[VLCCoreInteraction sharedInstance] setCurrentTime:i_currentTime];
}
}
#pragma mark -
//TODO:whenever VLC should implement NSDocument, the methods below should move or be additionaly implemented in the NSDocument category
- (int) durationOfCurrentItem {
return [[VLCCoreInteraction sharedInstance] durationOfCurrentPlaylistItem];
}
- (NSString*) pathOfCurrentItem {
return [[[VLCCoreInteraction sharedInstance] URLOfCurrentPlaylistItem] path];
}
- (NSString*) nameOfCurrentItem {
return [[VLCCoreInteraction sharedInstance] nameOfCurrentPlaylistItem];
}
@end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment