diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index b1f221464b..14c3b71e13 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -347,6 +347,19 @@ impl Server { self.peer .send(conn_id, proto::UnregisterProject { project_id }) }); + + for (_, receipts) in project.join_requests { + for receipt in receipts { + self.peer.respond( + receipt, + proto::JoinProjectResponse { + variant: Some(proto::join_project_response::Variant::Decline( + proto::join_project_response::Decline {}, + )), + }, + )?; + } + } } for project_id in removed_connection.guest_project_ids { @@ -409,11 +422,24 @@ impl Server { self: Arc, request: TypedEnvelope, ) -> Result<()> { - let user_id = { + let (user_id, project) = { let mut state = self.store_mut().await; - state.unregister_project(request.payload.project_id, request.sender_id)?; - state.user_id_for_connection(request.sender_id)? + let project = + state.unregister_project(request.payload.project_id, request.sender_id)?; + (state.user_id_for_connection(request.sender_id)?, project) }; + for (_, receipts) in project.join_requests { + for receipt in receipts { + self.peer.respond( + receipt, + proto::JoinProjectResponse { + variant: Some(proto::join_project_response::Variant::Decline( + proto::join_project_response::Decline {}, + )), + }, + )?; + } + } self.update_user_contacts(user_id).await?; Ok(()) diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index 81e4c9633b..9af324e5d8 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -338,6 +338,20 @@ impl Store { } } + for requester_user_id in project.join_requests.keys() { + if let Some(requester_connection_ids) = + self.connections_by_user_id.get_mut(&requester_user_id) + { + for requester_connection_id in requester_connection_ids.iter() { + if let Some(requester_connection) = + self.connections.get_mut(requester_connection_id) + { + requester_connection.requested_projects.remove(&project_id); + } + } + } + } + Ok(project) } else { Err(anyhow!("no such project"))?