Wait for incomplete buffers when handling incoming buffer file updates

This commit is contained in:
Nathan Sobo 2023-01-05 13:50:25 -07:00
parent 7a629769b7
commit 77e322cb75

View file

@ -5074,20 +5074,29 @@ impl Project {
_: Arc<Client>,
mut cx: AsyncAppContext,
) -> Result<()> {
let buffer_id = envelope.payload.buffer_id;
let is_incomplete = this.read_with(&cx, |this, _| {
this.incomplete_remote_buffers.contains_key(&buffer_id)
});
let buffer = if is_incomplete {
Some(
this.update(&mut cx, |this, cx| {
this.wait_for_remote_buffer(buffer_id, cx)
})
.await?,
)
} else {
None
};
this.update(&mut cx, |this, cx| {
let payload = envelope.payload.clone();
let buffer_id = payload.buffer_id;
if let Some(buffer) = this
.opened_buffers
.get_mut(&buffer_id)
.and_then(|b| b.upgrade(cx))
.or_else(|| {
this.incomplete_remote_buffers
.get(&buffer_id)
.cloned()
.flatten()
})
{
if let Some(buffer) = buffer.or_else(|| {
this.opened_buffers
.get(&buffer_id)
.and_then(|b| b.upgrade(cx))
}) {
let file = payload.file.ok_or_else(|| anyhow!("invalid file"))?;
let worktree = this
.worktree_for_id(WorktreeId::from_proto(file.worktree_id), cx)