Detailed changes
@@ -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
}
@@ -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(),
)
},
);
@@ -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,
@@ -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<Self>,
- envelope: TypedEnvelope<proto::ProjectUpdated>,
+ envelope: TypedEnvelope<proto::UpdateProject>,
client: Arc<Client>,
mut cx: AsyncAppContext,
) -> Result<()> {
@@ -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;
}
@@ -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,