fix: discard empty textchanges, drain range

This commit is contained in:
əlemi 2023-11-30 03:04:26 +01:00
parent 3881bb38ea
commit 3197c083bf

View file

@ -112,8 +112,10 @@ impl ControllerWorker<TextChange> for BufferControllerWorker {
res = self.operations.recv() => match res {
None => break,
Some(change) => {
match self.buffer.view().get(change.span.clone()) {
None => tracing::error!("received illegal span from client"),
if !change.is_empty() {
let view = self.buffer.view();
match view.get(change.span.clone()) {
None => tracing::error!("received illegal span from client: {:?} but buffer is of len {}", change.span, view.len()),
Some(span) => {
let diff = TextDiff::from_chars(span, &change.content);
@ -151,6 +153,7 @@ impl ControllerWorker<TextChange> for BufferControllerWorker {
},
}
}
}
},
// received a message from server
@ -161,7 +164,7 @@ impl ControllerWorker<TextChange> for BufferControllerWorker {
Ok(op) => {
self.buffer.merge(op);
self.content.send(self.buffer.view()).unwrap_or_warn("could not send buffer update");
for tx in self.pollers.drain(0..self.pollers.len()) {
for tx in self.pollers.drain(..) {
tx.send(()).unwrap_or_warn("could not wake up poller");
}
},