Finish implementing Db::update_project

This commit is contained in:
Antonio Scandurra 2022-11-15 09:00:56 +01:00
parent 42bb5f0e9f
commit 3e8fcb04f7
6 changed files with 22 additions and 68 deletions

View file

@ -1515,8 +1515,23 @@ where
} }
query.execute(&mut tx).await?; 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?; let room = self.commit_room_transaction(room_id, tx).await?;
todo!() Ok((room, guest_connection_ids))
}) })
.await .await
} }

View file

@ -1100,13 +1100,10 @@ impl Server {
request.sender_connection_id, request.sender_connection_id,
guest_connection_ids, guest_connection_ids,
|connection_id| { |connection_id| {
self.peer.send( self.peer.forward_send(
request.sender_connection_id,
connection_id, connection_id,
proto::ProjectUpdated { request.payload.clone(),
project_id: project_id.to_proto(),
worktrees: request.payload.worktrees.clone(),
room_version: room.version,
},
) )
}, },
); );

View file

@ -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( pub fn update_diagnostic_summary(
&mut self, &mut self,
project_id: ProjectId, project_id: ProjectId,

View file

@ -373,7 +373,7 @@ impl Project {
client.add_model_message_handler(Self::handle_start_language_server); 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_update_language_server);
client.add_model_message_handler(Self::handle_remove_collaborator); 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_unshare_project);
client.add_model_message_handler(Self::handle_create_buffer_for_peer); client.add_model_message_handler(Self::handle_create_buffer_for_peer);
client.add_model_message_handler(Self::handle_update_buffer_file); 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>, this: ModelHandle<Self>,
envelope: TypedEnvelope<proto::ProjectUpdated>, envelope: TypedEnvelope<proto::UpdateProject>,
client: Arc<Client>, client: Arc<Client>,
mut cx: AsyncAppContext, mut cx: AsyncAppContext,
) -> Result<()> { ) -> Result<()> {

View file

@ -48,7 +48,6 @@ message Envelope {
OpenBufferForSymbolResponse open_buffer_for_symbol_response = 40; OpenBufferForSymbolResponse open_buffer_for_symbol_response = 40;
UpdateProject update_project = 41; UpdateProject update_project = 41;
ProjectUpdated project_updated = 42;
UpdateWorktree update_worktree = 43; UpdateWorktree update_worktree = 43;
CreateProjectEntry create_project_entry = 45; CreateProjectEntry create_project_entry = 45;
@ -257,12 +256,6 @@ message UpdateProject {
repeated WorktreeMetadata worktrees = 2; repeated WorktreeMetadata worktrees = 2;
} }
message ProjectUpdated {
uint64 project_id = 1;
repeated WorktreeMetadata worktrees = 2;
uint64 room_version = 3;
}
message JoinProject { message JoinProject {
uint64 project_id = 1; uint64 project_id = 1;
} }

View file

@ -144,7 +144,6 @@ messages!(
(PrepareRename, Background), (PrepareRename, Background),
(PrepareRenameResponse, Background), (PrepareRenameResponse, Background),
(ProjectEntryResponse, Foreground), (ProjectEntryResponse, Foreground),
(ProjectUpdated, Foreground),
(RemoveContact, Foreground), (RemoveContact, Foreground),
(ReloadBuffers, Foreground), (ReloadBuffers, Foreground),
(ReloadBuffersResponse, Foreground), (ReloadBuffersResponse, Foreground),
@ -261,7 +260,6 @@ entity_messages!(
OpenBufferByPath, OpenBufferByPath,
OpenBufferForSymbol, OpenBufferForSymbol,
PerformRename, PerformRename,
ProjectUpdated,
PrepareRename, PrepareRename,
ReloadBuffers, ReloadBuffers,
RemoveProjectCollaborator, RemoveProjectCollaborator,