Finish implementing Db::update_project
This commit is contained in:
parent
42bb5f0e9f
commit
3e8fcb04f7
6 changed files with 22 additions and 68 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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<()> {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue