Change summary
crates/call/src/call.rs | 18 ++++++++++++++++++
crates/collab/src/tests/integration_tests.rs | 14 ++------------
2 files changed, 20 insertions(+), 12 deletions(-)
Detailed changes
@@ -60,6 +60,12 @@ impl OneAtATime {
}
})
}
+
+ fn running(&self) -> bool {
+ self.cancel
+ .as_ref()
+ .is_some_and(|cancel| !cancel.is_canceled())
+ }
}
/// Singleton global maintaining the user's participation in a room across workspaces.
@@ -170,6 +176,10 @@ impl ActiveCall {
}
cx.notify();
+ if self._join_debouncer.running() {
+ return Task::ready(Ok(()));
+ }
+
let room = if let Some(room) = self.room().cloned() {
Some(Task::ready(Ok(room)).shared())
} else {
@@ -286,6 +296,10 @@ impl ActiveCall {
return Task::ready(Err(anyhow!("no incoming call")));
};
+ if self.pending_room_creation.is_some() {
+ return Task::ready(Ok(()));
+ }
+
let room_id = call.room_id.clone();
let client = self.client.clone();
let user_store = self.user_store.clone();
@@ -331,6 +345,10 @@ impl ActiveCall {
}
}
+ if self.pending_room_creation.is_some() {
+ return Task::ready(Ok(None));
+ }
+
let client = self.client.clone();
let user_store = self.user_store.clone();
let join = self._join_debouncer.spawn(cx, move |cx| async move {
@@ -540,7 +540,7 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
b_invite.await.unwrap();
c_invite.await.unwrap();
- assert!(join_channel.await.is_err());
+ join_channel.await.unwrap();
let room_a = active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
deterministic.run_until_parked();
@@ -578,18 +578,8 @@ async fn test_joining_channels_and_calling_multiple_users_simultaneously(
b_invite.await.unwrap();
c_invite.await.unwrap();
- let room_a = active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
+ active_call_a.read_with(cx_a, |call, _| call.room().unwrap().clone());
deterministic.run_until_parked();
-
- assert_eq!(
- room_participants(&room_a, cx_a),
- RoomParticipants {
- remote: Default::default(),
- pending: vec!["user_b".to_string(), "user_c".to_string()]
- }
- );
-
- assert_eq!(channel_id(&room_a, cx_a), Some(channel_1));
}
#[gpui::test(iterations = 10)]