From 3e8fcb04f71f877a641f19f884f1d4f8cc3da188 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 15 Nov 2022 09:00:56 +0100 Subject: [PATCH] Finish implementing `Db::update_project` --- crates/collab/src/db.rs | 17 +++++++++++- crates/collab/src/rpc.rs | 9 +++---- crates/collab/src/rpc/store.rs | 49 ---------------------------------- crates/project/src/project.rs | 6 ++--- crates/rpc/proto/zed.proto | 7 ----- crates/rpc/src/proto.rs | 2 -- 6 files changed, 22 insertions(+), 68 deletions(-) diff --git a/crates/collab/src/db.rs b/crates/collab/src/db.rs index fb91e92808..ba014624af 100644 --- a/crates/collab/src/db.rs +++ b/crates/collab/src/db.rs @@ -1515,8 +1515,23 @@ where } query.execute(&mut tx).await?; + let mut guest_connection_ids = Vec::new(); + { + let mut db_guest_connection_ids = sqlx::query_scalar::<_, i32>( + " + SELECT connection_id + FROM project_collaborators + WHERE project_id = $1 AND is_host = FALSE + ", + ) + .fetch(&mut tx); + while let Some(connection_id) = db_guest_connection_ids.next().await { + guest_connection_ids.push(ConnectionId(connection_id? as u32)); + } + } + let room = self.commit_room_transaction(room_id, tx).await?; - todo!() + Ok((room, guest_connection_ids)) }) .await } diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index d8ca51e6cd..daf898ddf6 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -1100,13 +1100,10 @@ impl Server { request.sender_connection_id, guest_connection_ids, |connection_id| { - self.peer.send( + self.peer.forward_send( + request.sender_connection_id, connection_id, - proto::ProjectUpdated { - project_id: project_id.to_proto(), - worktrees: request.payload.worktrees.clone(), - room_version: room.version, - }, + request.payload.clone(), ) }, ); diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index a9793e9fb6..a9a15e7b2a 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -253,55 +253,6 @@ impl Store { } } - pub fn update_project( - &mut self, - project_id: ProjectId, - worktrees: &[proto::WorktreeMetadata], - connection_id: ConnectionId, - ) -> Result<&proto::Room> { - let project = self - .projects - .get_mut(&project_id) - .ok_or_else(|| anyhow!("no such project"))?; - if project.host_connection_id == connection_id { - let mut old_worktrees = mem::take(&mut project.worktrees); - for worktree in worktrees { - if let Some(old_worktree) = old_worktrees.remove(&worktree.id) { - project.worktrees.insert(worktree.id, old_worktree); - } else { - project.worktrees.insert( - worktree.id, - Worktree { - root_name: worktree.root_name.clone(), - visible: worktree.visible, - ..Default::default() - }, - ); - } - } - - let room = self - .rooms - .get_mut(&project.room_id) - .ok_or_else(|| anyhow!("no such room"))?; - let participant_project = room - .participants - .iter_mut() - .flat_map(|participant| &mut participant.projects) - .find(|project| project.id == project_id.to_proto()) - .ok_or_else(|| anyhow!("no such project"))?; - participant_project.worktree_root_names = worktrees - .iter() - .filter(|worktree| worktree.visible) - .map(|worktree| worktree.root_name.clone()) - .collect(); - - Ok(room) - } else { - Err(anyhow!("no such project"))? - } - } - pub fn update_diagnostic_summary( &mut self, project_id: ProjectId, diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index d01571f44b..c59b19de8f 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -373,7 +373,7 @@ impl Project { client.add_model_message_handler(Self::handle_start_language_server); client.add_model_message_handler(Self::handle_update_language_server); client.add_model_message_handler(Self::handle_remove_collaborator); - client.add_model_message_handler(Self::handle_project_updated); + client.add_model_message_handler(Self::handle_update_project); client.add_model_message_handler(Self::handle_unshare_project); client.add_model_message_handler(Self::handle_create_buffer_for_peer); client.add_model_message_handler(Self::handle_update_buffer_file); @@ -4533,9 +4533,9 @@ impl Project { }) } - async fn handle_project_updated( + async fn handle_update_project( this: ModelHandle, - envelope: TypedEnvelope, + envelope: TypedEnvelope, client: Arc, mut cx: AsyncAppContext, ) -> Result<()> { diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index 94880ce9f5..e688cad1f8 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -48,7 +48,6 @@ message Envelope { OpenBufferForSymbolResponse open_buffer_for_symbol_response = 40; UpdateProject update_project = 41; - ProjectUpdated project_updated = 42; UpdateWorktree update_worktree = 43; CreateProjectEntry create_project_entry = 45; @@ -257,12 +256,6 @@ message UpdateProject { repeated WorktreeMetadata worktrees = 2; } -message ProjectUpdated { - uint64 project_id = 1; - repeated WorktreeMetadata worktrees = 2; - uint64 room_version = 3; -} - message JoinProject { uint64 project_id = 1; } diff --git a/crates/rpc/src/proto.rs b/crates/rpc/src/proto.rs index 31f53564a8..6d9bc9a0aa 100644 --- a/crates/rpc/src/proto.rs +++ b/crates/rpc/src/proto.rs @@ -144,7 +144,6 @@ messages!( (PrepareRename, Background), (PrepareRenameResponse, Background), (ProjectEntryResponse, Foreground), - (ProjectUpdated, Foreground), (RemoveContact, Foreground), (ReloadBuffers, Foreground), (ReloadBuffersResponse, Foreground), @@ -261,7 +260,6 @@ entity_messages!( OpenBufferByPath, OpenBufferForSymbol, PerformRename, - ProjectUpdated, PrepareRename, ReloadBuffers, RemoveProjectCollaborator,