WIP

Antonio Scandurra created

Change summary

crates/call/src/call.rs                                                        |  1 
crates/live_kit_client/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift | 17 
crates/live_kit_client/build.rs                                                |  1 
crates/live_kit_client/src/prod.rs                                             |  7 
crates/live_kit_client/src/test.rs                                             |  4 
5 files changed, 30 insertions(+)

Detailed changes

crates/call/src/call.rs 🔗

@@ -14,6 +14,7 @@ pub use room::Room;
 use std::sync::Arc;
 
 pub fn init(client: Arc<Client>, user_store: ModelHandle<UserStore>, cx: &mut MutableAppContext) {
+    live_kit_client::displays();
     let active_call = cx.add_model(|cx| ActiveCall::new(client, user_store, cx));
     cx.set_global(active_call);
 }

crates/live_kit_client/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift 🔗

@@ -1,6 +1,7 @@
 import Foundation
 import LiveKit
 import WebRTC
+import ScreenCaptureKit
 
 class LKRoomDelegate: RoomDelegate {
     var data: UnsafeRawPointer
@@ -154,3 +155,19 @@ public func LKDisplaySources(data: UnsafeRawPointer, callback: @escaping @conven
         callback(data, nil, error.localizedDescription as CFString)
     }
 }
+
+@_cdecl("LKDisplays")
+public func LKDisplays() {
+    if #available(macOS 12.3, *) {
+        Task.init {
+            let content = try await SCShareableContent.current
+            print(content.displays.count)
+        }
+        
+//        SCShareableContent.getWithCompletionHandler { content, error in
+//            print(content!.displays.count)
+//        }
+    } else {
+        print("OOOPS")
+    }
+}

crates/live_kit_client/build.rs 🔗

@@ -81,6 +81,7 @@ fn build_bridge(swift_target: &SwiftTarget) {
 }
 
 fn link_swift_stdlib(swift_target: &SwiftTarget) {
+    panic!("{:?}", swift_target.paths.runtime_library_paths);
     for path in &swift_target.paths.runtime_library_paths {
         println!("cargo:rustc-link-search=native={}", path);
     }

crates/live_kit_client/src/prod.rs 🔗

@@ -62,6 +62,7 @@ extern "C" {
     fn LKVideoTrackAddRenderer(track: *const c_void, renderer: *const c_void);
     fn LKRemoteVideoTrackGetSid(track: *const c_void) -> CFStringRef;
 
+    fn LKDisplays();
     fn LKDisplaySources(
         callback_data: *mut c_void,
         callback: extern "C" fn(
@@ -73,6 +74,12 @@ extern "C" {
     fn LKCreateScreenShareTrackForDisplay(display: *const c_void) -> *const c_void;
 }
 
+pub fn displays() {
+    unsafe {
+        LKDisplays();
+    }
+}
+
 pub type Sid = String;
 
 pub struct Room {

crates/live_kit_client/src/test.rs 🔗

@@ -9,6 +9,10 @@ use media::core_video::CVImageBuffer;
 use parking_lot::Mutex;
 use std::{future::Future, sync::Arc};
 
+pub fn displays() {
+    panic!()
+}
+
 lazy_static! {
     static ref SERVERS: Mutex<HashMap<String, Arc<TestServer>>> = Default::default();
 }