[vlc-commits] macosx: improve AppleScript API (closes #22213)

Felix Paul Kühne git at videolan.org
Mon Apr 29 19:26:43 CEST 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Sun Apr 21 18:08:11 2019 +0200| [02f0392f56cb8cfe2fa2b4722337e105f8061ca6] | committer: Felix Paul Kühne

macosx: improve AppleScript API (closes #22213)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=02f0392f56cb8cfe2fa2b4722337e105f8061ca6
---

 NEWS                                               |   1 +
 modules/gui/macosx/Resources/vlc.scriptSuite       | Bin 2424 -> 2987 bytes
 modules/gui/macosx/Resources/vlc.scriptTerminology | Bin 2796 -> 4063 bytes
 modules/gui/macosx/os-integration/applescript.h    |   6 ++
 modules/gui/macosx/os-integration/applescript.m    |  75 ++++++++++++++++++++-
 5 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 6801d24de5..df6d552ce4 100644
--- a/NEWS
+++ b/NEWS
@@ -64,6 +64,7 @@ Service discovery:
 
 macOS:
  * Remove Growl notification support
+ * Improved AppleScript API with support for playback modes, recording, rate
 
 appleOS:
  * Improved proxy configuration handling
diff --git a/modules/gui/macosx/Resources/vlc.scriptSuite b/modules/gui/macosx/Resources/vlc.scriptSuite
index c9e59a6bc0..539da9df53 100644
Binary files a/modules/gui/macosx/Resources/vlc.scriptSuite and b/modules/gui/macosx/Resources/vlc.scriptSuite differ
diff --git a/modules/gui/macosx/Resources/vlc.scriptTerminology b/modules/gui/macosx/Resources/vlc.scriptTerminology
index a846462ce8..b744aa5a9d 100644
Binary files a/modules/gui/macosx/Resources/vlc.scriptTerminology and b/modules/gui/macosx/Resources/vlc.scriptTerminology differ
diff --git a/modules/gui/macosx/os-integration/applescript.h b/modules/gui/macosx/os-integration/applescript.h
index 2f83864e53..46c0421205 100644
--- a/modules/gui/macosx/os-integration/applescript.h
+++ b/modules/gui/macosx/os-integration/applescript.h
@@ -43,9 +43,15 @@
 @property (readwrite) float audioVolume;
 @property (readwrite) long long audioDesync;
 @property (readwrite) int currentTime;
+ at property (readwrite) float playbackRate;
 @property (readonly) NSInteger durationOfCurrentItem;
 @property (readonly) NSString *pathOfCurrentItem;
 @property (readonly) NSString *nameOfCurrentItem;
 @property (readonly) BOOL playbackShowsMenu;
+ at property (readonly) BOOL recordable;
+ at property (readwrite) BOOL recordingEnabled;
+ at property (readwrite) BOOL shuffledPlayback;
+ at property (readwrite) BOOL repeatOne;
+ at property (readwrite) BOOL repeatAll;
 
 @end
diff --git a/modules/gui/macosx/os-integration/applescript.m b/modules/gui/macosx/os-integration/applescript.m
index 7260ab6308..7babde2250 100644
--- a/modules/gui/macosx/os-integration/applescript.m
+++ b/modules/gui/macosx/os-integration/applescript.m
@@ -76,6 +76,10 @@
     NSString *commandString = [[self commandDescription] commandName];
     NSString *parameterString = [self directParameter];
 
+    if (commandString == nil || commandString.length == 0) {
+        return nil;
+    }
+
     if ([commandString isEqualToString:@"play"]) {
         [playerController togglePlayPause];
     } else if ([commandString isEqualToString:@"stop"]) {
@@ -102,6 +106,10 @@
         [playerController navigateInInteractiveContent:VLC_PLAYER_NAV_RIGHT];
     } else if ([commandString isEqualToString:@"menuFocusActivate"]) {
         [playerController navigateInInteractiveContent:VLC_PLAYER_NAV_ACTIVATE];
+    } else if ([commandString isEqualToString:@"menuActivatePopupMenu"]) {
+        [playerController navigateInInteractiveContent:VLC_PLAYER_NAV_POPUP];
+    } else if ([commandString isEqualToString:@"menuActivateDiscRootMenu"]) {
+        [playerController navigateInInteractiveContent:VLC_PLAYER_NAV_MENU];
     } else if ([commandString isEqualToString:@"stepForward"]) {
         if (parameterString) {
             int parameterInt = [parameterString intValue];
@@ -143,8 +151,15 @@
             }
         } else
             [playerController jumpBackwardShort];
+    } else if ([commandString isEqualToString:@"incrementPlaybackRate"]) {
+        [[[[VLCMain sharedInstance] playlistController] playerController] incrementPlaybackRate];
+    } else if ([commandString isEqualToString:@"decrementPlaybackRate"]) {
+        [[[[VLCMain sharedInstance] playlistController] playerController] decrementPlaybackRate];
+    } else {
+        msg_Err(getIntf(), "Unhandled AppleScript command '%s'", [commandString UTF8String]);
     }
-   return nil;
+
+    return nil;
 }
 
 @end
@@ -210,6 +225,16 @@
     [[[[VLCMain sharedInstance] playlistController] playerController] setTimeFast: VLC_TICK_FROM_SEC(currentTime)];
 }
 
+- (float)playbackRate
+{
+    return [[[[VLCMain sharedInstance] playlistController] playerController] playbackRate];
+}
+
+- (void)setPlaybackRate:(float)playbackRate
+{
+    [[[[VLCMain sharedInstance] playlistController] playerController] setPlaybackRate:playbackRate];
+}
+
 - (NSInteger)durationOfCurrentItem
 {
     return SEC_FROM_VLC_TICK([[[VLCMain sharedInstance] playlistController] playerController].durationOfCurrentMediaItem);
@@ -239,4 +264,52 @@
     return NO;
 }
 
+- (BOOL)recordable
+{
+    return [[[[VLCMain sharedInstance] playlistController] playerController] recordable];
+}
+
+- (BOOL)recordingEnabled
+{
+    return [[[[VLCMain sharedInstance] playlistController] playerController] enableRecording];
+}
+
+- (void)setRecordingEnabled:(BOOL)recordingEnabled
+{
+    [[[[VLCMain sharedInstance] playlistController] playerController] setEnableRecording:recordingEnabled];
+}
+
+- (BOOL)shuffledPlayback
+{
+    enum vlc_playlist_playback_order playbackOrder = [[[VLCMain sharedInstance] playlistController] playbackOrder];
+    return playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM ? YES : NO;
+}
+
+- (void)setShuffledPlayback:(BOOL)shuffledPlayback
+{
+    [[[VLCMain sharedInstance] playlistController] setPlaybackOrder: shuffledPlayback ? VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM : VLC_PLAYLIST_PLAYBACK_ORDER_NORMAL];
+}
+
+- (BOOL)repeatOne
+{
+    enum vlc_playlist_playback_repeat repeatMode = [[[VLCMain sharedInstance] playlistController] playbackRepeat];
+    return repeatMode == VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT ? YES : NO;
+}
+
+- (void)setRepeatOne:(BOOL)repeatOne
+{
+    [[[VLCMain sharedInstance] playlistController] setPlaybackRepeat: repeatOne == YES ? VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT : VLC_PLAYLIST_PLAYBACK_REPEAT_NONE];
+}
+
+- (BOOL)repeatAll
+{
+    enum vlc_playlist_playback_repeat repeatMode = [[[VLCMain sharedInstance] playlistController] playbackRepeat];
+    return repeatMode == VLC_PLAYLIST_PLAYBACK_REPEAT_ALL ? YES : NO;
+}
+
+- (void)setRepeatAll:(BOOL)repeatAll
+{
+    [[[VLCMain sharedInstance] playlistController] setPlaybackRepeat: repeatAll == YES ? VLC_PLAYLIST_PLAYBACK_REPEAT_ALL : VLC_PLAYLIST_PLAYBACK_REPEAT_NONE];
+}
+
 @end



More information about the vlc-commits mailing list