diff --git a/Cargo.lock b/Cargo.lock index 8a66630351f9aa..7e6099cd6e07f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2061,6 +2061,7 @@ dependencies = [ "http_client", "language", "livekit_client", + "livekit_client_macos", "log", "postage", "project", @@ -7203,6 +7204,29 @@ dependencies = [ "util", ] +[[package]] +name = "livekit_client_macos" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-broadcast", + "async-trait", + "collections", + "core-foundation 0.9.4", + "futures 0.3.31", + "gpui", + "livekit_server", + "log", + "media", + "nanoid", + "parking_lot", + "postage", + "serde", + "serde_json", + "sha2", + "simplelog", +] + [[package]] name = "livekit_server" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 23b9b16b202b83..83fe95e5d2165b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,6 +66,7 @@ members = [ "crates/language_tools", "crates/languages", "crates/livekit_client", + "crates/livekit_client_macos", "crates/livekit_server", "crates/lsp", "crates/markdown", @@ -249,6 +250,7 @@ language_selector = { path = "crates/language_selector" } language_tools = { path = "crates/language_tools" } languages = { path = "crates/languages" } livekit_client = { path = "crates/livekit_client" } +livekit_client_macos = { path = "crates/livekit_client_macos" } livekit_server = { path = "crates/livekit_server" } lsp = { path = "crates/lsp" } markdown = { path = "crates/markdown" } diff --git a/crates/call/Cargo.toml b/crates/call/Cargo.toml index f93f0819c679c9..9fc46c66ed2a70 100644 --- a/crates/call/Cargo.toml +++ b/crates/call/Cargo.toml @@ -32,8 +32,9 @@ fs.workspace = true futures.workspace = true gpui.workspace = true language.workspace = true -livekit_client.workspace = true log.workspace = true +livekit_client.workspace = true +livekit_client_macos.workspace = true postage.workspace = true project.workspace = true schemars.workspace = true @@ -48,7 +49,8 @@ collections = { workspace = true, features = ["test-support"] } fs = { workspace = true, features = ["test-support"] } gpui = { workspace = true, features = ["test-support"] } language = { workspace = true, features = ["test-support"] } -livekit_client = { workspace = true, features = ["test-support"] } project = { workspace = true, features = ["test-support"] } util = { workspace = true, features = ["test-support"] } http_client = { workspace = true, features = ["test-support"] } +livekit_client = { workspace = true, features = ["test-support"] } +livekit_client_macos = { workspace = true, features = ["test-support"] } diff --git a/crates/call/src/call.rs b/crates/call/src/call.rs index 608fbae4e90313..28af8ae3893c8b 100644 --- a/crates/call/src/call.rs +++ b/crates/call/src/call.rs @@ -18,8 +18,12 @@ use room::Event; use settings::Settings; use std::sync::Arc; -#[cfg(not(target_os = "windows"))] -pub use livekit_client::play_remote_video_track; +#[cfg(target_os = "macos")] +pub use livekit_client_macos::{ + track::RemoteVideoTrack, RemoteVideoTrackView, RemoteVideoTrackViewEvent, +}; + +#[cfg(not(target_os = "macos"))] pub use livekit_client::{ track::RemoteVideoTrack, RemoteVideoTrackView, RemoteVideoTrackViewEvent, }; diff --git a/crates/livekit_client_macos/Cargo.toml b/crates/livekit_client_macos/Cargo.toml index ac0c3b5740418e..6a5a8d0ea272f9 100644 --- a/crates/livekit_client_macos/Cargo.toml +++ b/crates/livekit_client_macos/Cargo.toml @@ -1,8 +1,8 @@ [package] -name = "livekit_client" +name = "livekit_client_macos" version = "0.1.0" edition = "2021" -description = "Logic for using LiveKit with GPUI" +description = "Bindings to LiveKit Swift client SDK" publish = false license = "GPL-3.0-or-later" @@ -19,40 +19,42 @@ name = "test_app" [features] no-webrtc = [] test-support = [ + "async-trait", "collections/test-support", "gpui/test-support", + "livekit_server", "nanoid", ] [dependencies] anyhow.workspace = true -async-trait.workspace = true -collections.workspace = true -cpal = "0.15" +async-broadcast = "0.7" +async-trait = { workspace = true, optional = true } +collections = { workspace = true, optional = true } futures.workspace = true -gpui.workspace = true -http_2 = { package = "http", version = "0.2.1" } -livekit_server.workspace = true +gpui = { workspace = true, optional = true } +livekit_server = { workspace = true, optional = true } log.workspace = true media.workspace = true nanoid = { workspace = true, optional = true} parking_lot.workspace = true postage.workspace = true -util.workspace = true -http_client.workspace = true -smallvec.workspace = true -image.workspace = true - -[target.'cfg(not(target_os = "windows"))'.dependencies] -livekit.workspace = true [target.'cfg(target_os = "macos")'.dependencies] core-foundation.workspace = true -coreaudio-rs = "0.12.1" + +[target.'cfg(all(not(target_os = "macos")))'.dependencies] +async-trait = { workspace = true } +collections = { workspace = true } +gpui = { workspace = true } +livekit_server.workspace = true +nanoid.workspace = true [dev-dependencies] +async-trait.workspace = true collections = { workspace = true, features = ["test-support"] } gpui = { workspace = true, features = ["test-support"] } +livekit_server.workspace = true nanoid.workspace = true sha2.workspace = true simplelog.workspace = true diff --git a/crates/livekit_client_macos/examples/test_app.rs b/crates/livekit_client_macos/examples/test_app.rs index de8be97e86c599..c6ae2cc4782942 100644 --- a/crates/livekit_client_macos/examples/test_app.rs +++ b/crates/livekit_client_macos/examples/test_app.rs @@ -2,12 +2,12 @@ use std::time::Duration; use futures::StreamExt; use gpui::{actions, KeyBinding, Menu, MenuItem}; -use live_kit_client::{LocalAudioTrack, LocalVideoTrack, Room, RoomUpdate}; -use live_kit_server::token::{self, VideoGrant}; +use livekit_client_macos::{LocalAudioTrack, LocalVideoTrack, Room, RoomUpdate}; +use livekit_server::token::{self, VideoGrant}; use log::LevelFilter; use simplelog::SimpleLogger; -actions!(live_kit_client, [Quit]); +actions!(livekit_client_macos, [Quit]); fn main() { SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger"); diff --git a/crates/livekit_client_macos/src/live_kit_client.rs b/crates/livekit_client_macos/src/livekit_client.rs similarity index 100% rename from crates/livekit_client_macos/src/live_kit_client.rs rename to crates/livekit_client_macos/src/livekit_client.rs diff --git a/crates/livekit_client_macos/src/test.rs b/crates/livekit_client_macos/src/test.rs index 2c26c88f72346f..6db24174ff384b 100644 --- a/crates/livekit_client_macos/src/test.rs +++ b/crates/livekit_client_macos/src/test.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use collections::{btree_map::Entry as BTreeEntry, hash_map::Entry, BTreeMap, HashMap, HashSet}; use futures::Stream; use gpui::{BackgroundExecutor, SurfaceSource}; -use live_kit_server::{proto, token}; +use livekit_server::{proto, token}; use parking_lot::Mutex; use postage::watch; @@ -102,7 +102,7 @@ impl TestServer { #[cfg(any(test, feature = "test-support"))] self.executor.simulate_random_delay().await; - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let identity = claims.sub.unwrap().to_string(); let room_name = claims.video.room.unwrap(); let mut server_rooms = self.rooms.lock(); @@ -150,7 +150,7 @@ impl TestServer { // todo(linux): Remove this once the cross-platform LiveKit implementation is merged #[cfg(any(test, feature = "test-support"))] self.executor.simulate_random_delay().await; - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let identity = claims.sub.unwrap().to_string(); let room_name = claims.video.room.unwrap(); let mut server_rooms = self.rooms.lock(); @@ -224,7 +224,7 @@ impl TestServer { // todo(linux): Remove this once the cross-platform LiveKit implementation is merged #[cfg(any(test, feature = "test-support"))] self.executor.simulate_random_delay().await; - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let identity = claims.sub.unwrap().to_string(); let room_name = claims.video.room.unwrap(); @@ -280,7 +280,7 @@ impl TestServer { #[cfg(any(test, feature = "test-support"))] self.executor.simulate_random_delay().await; - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let identity = claims.sub.unwrap().to_string(); let room_name = claims.video.room.unwrap(); @@ -332,7 +332,7 @@ impl TestServer { } fn set_track_muted(&self, token: &str, track_sid: &str, muted: bool) -> Result<()> { - let claims = live_kit_server::token::validate(token, &self.secret_key)?; + let claims = livekit_server::token::validate(token, &self.secret_key)?; let room_name = claims.video.room.unwrap(); let identity = claims.sub.unwrap(); let mut server_rooms = self.rooms.lock(); @@ -363,7 +363,7 @@ impl TestServer { } fn is_track_muted(&self, token: &str, track_sid: &str) -> Option { - let claims = live_kit_server::token::validate(token, &self.secret_key).ok()?; + let claims = livekit_server::token::validate(token, &self.secret_key).ok()?; let room_name = claims.video.room.unwrap(); let mut server_rooms = self.rooms.lock(); @@ -378,7 +378,7 @@ impl TestServer { } fn video_tracks(&self, token: String) -> Result>> { - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let room_name = claims.video.room.unwrap(); let identity = claims.sub.unwrap(); @@ -401,7 +401,7 @@ impl TestServer { } fn audio_tracks(&self, token: String) -> Result>> { - let claims = live_kit_server::token::validate(&token, &self.secret_key)?; + let claims = livekit_server::token::validate(&token, &self.secret_key)?; let room_name = claims.video.room.unwrap(); let identity = claims.sub.unwrap(); @@ -455,7 +455,7 @@ pub struct TestApiClient { } #[async_trait] -impl live_kit_server::api::Client for TestApiClient { +impl livekit_server::api::Client for TestApiClient { fn url(&self) -> &str { &self.url } @@ -482,7 +482,7 @@ impl live_kit_server::api::Client for TestApiClient { &self, room: String, identity: String, - permission: live_kit_server::proto::ParticipantPermission, + permission: livekit_server::proto::ParticipantPermission, ) -> Result<()> { let server = TestServer::get(&self.url)?; server