]> git.r.bdr.sh - rbdr/captura/commitdiff
Attempt more AppleScript support
authorRuben Beltran del Rio <redacted>
Wed, 2 Aug 2023 16:01:42 +0000 (18:01 +0200)
committerRuben Beltran del Rio <redacted>
Wed, 2 Aug 2023 16:01:42 +0000 (18:01 +0200)
Captura/CapturaApp.swift
Captura/Scripting/Captura.sdef
Captura/Scripting/RecordCommand.swift
Captura/Scripting/ScriptedPreferences.swift

index c6ec9f05c6316a5074a02aa20a1a85a899a3c1f4..d954b9f800e969554ae4bcc478e270f11759c4fb 100644 (file)
@@ -6,7 +6,7 @@ import AVFoundation
 
 @main
 struct CapturaApp: App {
-  
+
     @NSApplicationDelegateAdaptor(CapturaAppDelegate.self) var appDelegate
 
     var body: some Scene {
@@ -20,7 +20,7 @@ struct CapturaApp: App {
       }
 }
 
-class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
+@objc(CapturaAppDelegate) class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
     
   @Environment(\.openURL) var openURL
   var statusItem: NSStatusItem!
@@ -39,7 +39,7 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
   var remoteFiles: [CapturaRemoteFile] = []
   var captureSessionConfiguration: CaptureSessionConfiguration = CaptureSessionConfiguration()
   
-  @objc var scriptedPreferences: ScriptedPreferences?
+  @objc dynamic var scriptedPreferences: ScriptedPreferences = ScriptedPreferences()
   
   func applicationDidFinishLaunching(_ notification: Notification) {
     setupStatusBar()
@@ -50,8 +50,6 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
       object: nil)
     closeWindow()
     fetchRemoteItems()
-    
-    scriptedPreferences = ScriptedPreferences()
   }
   
   // MARK: - Setup Functions
@@ -101,7 +99,7 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
       window.close()
     }
   }
-  
+
   // MARK: - URL Event Handler
   
   func application(_ application: NSApplication, open urls: [URL]) {
@@ -112,11 +110,10 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
             case let .configure(config):
               CapturaSettings.apply(config)
             case let .record(config):
-              let config = CaptureSessionConfiguration(from: config)
-            NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: [
+            NotificationCenter.default.post(name: .setCaptureSessionConfiguration, object: nil, userInfo: [
               "config": config
             ])
-              NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: nil)
+            NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: nil)
           }
         }
       }
index 82cf06f28ca5b8d5a0daa3f13d3060a668aba95e..ca49d17015d1b4d3f0a79b8865be8fa3b7c0a252 100644 (file)
@@ -1,19 +1,24 @@
 <!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
-<dictionary title="CapturaScripting">
+<dictionary title="Captura Terminology">
+    <suite name="Standard Suite" code="CStd" description="Common classes and commands for all applications.">
+          <command name="quit" code="aevtquit" description="Quit the application.">
+              <cocoa class="NSQuitCommand"/>
+          </command>
+    </suite>
     <suite name="Captura Suite" code="CAPT" description="Controls Captura">
-      <class name="application" code="Capp" description="The application's top-level scripting object.">
-        <cocoa class="NSApplication"/>
-        <property name="preferences" code="Cprp" type="preferences" access="r">
+      <class name="application" code="capp" description="The application's top-level scripting object.">
+        <cocoa class="CapturaApp"/>
+        <property name="preferences" code="pPrp" type="preferences" access="r">
           <cocoa key="scriptedPreferences"/>
         </property>
       </class>
       <class name="preferences" code="Cprf" description="The application preferences">
         <cocoa class="ScriptedPreferences"/>
-        <property name="fps" code="Cpfp" type="integer" description="Sets the FPS of the recording" access="rw" />
-        <property name="outputs" code="Cpou" type="text" description="Which outputs get generated locally" access="rw" />
-        <property name="backend" code="Cpbk" type="file url" description="Updates the backend URL that will be used" access="rw" />
-        <property name="backend_output" code="Cpbo" type="text" description="Which output should be sent to the backend" access="rw" />
-        <property name="keep_local_files" code="Cplf" type="boolean" description="Whether to keep local files after a successful backend upload." access="rw"/>
+        <property name="fps" code="pPfp" type="integer" description="Sets the FPS of the recording" access="rw" />
+        <property name="outputs" code="pPou" type="text" description="Which outputs get generated locally" access="rw" />
+        <property name="backend" code="pPbk" type="text" description="Updates the backend URL that will be used" access="rw" />
+        <property name="backend_output" code="pPbo" type="text" description="Which output should be sent to the backend" access="rw" />
+        <property name="keep_local_files" code="pPlf" type="boolean" description="Whether to keep local files after a successful backend upload." access="rw"/>
       </class>
       <record-type code="CCRr" name="recording_configuration">
           <property name="x" code="CCrx" type="integer" description="Sets the starting horizontal position of the recording frame from the left of the screen. Defaults to the center of the screen." />
@@ -24,7 +29,7 @@
           <property name="prevent_move" code="CCRm" type="boolean" description="Prevents the recording frame from being moved. Defaults to false." />
           <property name="fps" code="CCrf" type="integer" description="Sets the FPS of the recording" />
           <property name="outputs" code="CCRo" type="text" description="Which outputs get generated locally" />
-          <property name="backend" code="CCRb" type="file url" description="Updates the backend URL that will be used" />
+          <property name="backend" code="CCRb" type="text" description="Updates the backend URL that will be used" />
           <property name="backend_output" code="CCRp" type="text" description="Which output should be sent to the backend" />
           <property name="keep_local_files" code="CCRk" type="boolean" description="Whether to keep local files after a successful backend upload." />
           <property name="auto_start" code="CCRa" type="boolean" description="Whether the recording session should start automatically or not. It takes 3 seconds to start." />
index 8db2656150082db7e71f0d3f0cf685d7979efe30..9d25b59f28480b6ec5d9c99cff40dc089f8b0bef 100644 (file)
@@ -3,13 +3,8 @@ import Foundation
 @objc(RecordCommand)
 class RecordCommand: NSScriptCommand {
     override func performDefaultImplementation() -> Any? {
-      print("AAAH \(self.directParameter)")
       
-      guard let args = self.directParameter as? [String: Any] else {
-          return nil
-      }
-      
-      print("AAH COMMANDS \(args)")
+      let args = self.directParameter as? [String: Any] ?? [:]
       
       // Here you can extract the parameters from the args dictionary and configure your settings
       let x = args["x"] as? Int
@@ -26,8 +21,6 @@ class RecordCommand: NSScriptCommand {
       let autoStart = args["auto_start"] as? Bool
       let maxLength = args["max_length"] as? Int
       
-      print("AAH WIDTH \(width)")
-      
       var skipBackend = false
       if let backendString = args["backend"] as? String {
         if backendString == "" {
index b6aa7198fd2caf8d6db3a67383ebf24e150ecc2d..2606ff7c8dda887385e39c4bc0ad63e609fa72db 100644 (file)
@@ -1,5 +1,6 @@
 import Foundation
 
+@objc(ScriptedPreferences)
 class ScriptedPreferences: NSObject {
   @objc dynamic var fps: Int {
     get {