on master help sign in
Use a write_count to determine how many writes left to flush
b155e86Blaž Hrastnik
helix-view/src/editor.rs+20−11
@@ -657,6 +657,7 @@ pub struct Editor {
657 // https://stackoverflow.com/a/66875668
657 // https://stackoverflow.com/a/66875668
658 pub saves: HashMap<DocumentId, UnboundedSender<Once<DocumentSavedEventFuture>>>,
658 pub saves: HashMap<DocumentId, UnboundedSender<Once<DocumentSavedEventFuture>>>,
659 pub save_queue: SelectAll<Flatten<UnboundedReceiverStream<Once<DocumentSavedEventFuture>>>>,
659 pub save_queue: SelectAll<Flatten<UnboundedReceiverStream<Once<DocumentSavedEventFuture>>>>,
660+ pub write_count: usize,
660
661
661 pub count: Option<std::num::NonZeroUsize>,
662 pub count: Option<std::num::NonZeroUsize>,
662 pub selected_register: Option<char>,
663 pub selected_register: Option<char>,
@@ -761,6 +762,7 @@ impl Editor {
761 documents: BTreeMap::new(),
762 documents: BTreeMap::new(),
762 saves: HashMap::new(),
763 saves: HashMap::new(),
763 save_queue: SelectAll::new(),
764 save_queue: SelectAll::new(),
765+ write_count: 0,
764 count: None,
766 count: None,
765 selected_register: None,
767 selected_register: None,
766 macro_recording: None,
768 macro_recording: None,
@@ -1206,6 +1208,8 @@ impl Editor {
1206 .send(stream::once(Box::pin(future)))
1208 .send(stream::once(Box::pin(future)))
1207 .map_err(|err| anyhow!("failed to send save event: {}", err))?;
1209 .map_err(|err| anyhow!("failed to send save event: {}", err))?;
1208
1210
1211+ self.write_count += 1;
1212+
1209 Ok(())
1213 Ok(())
1210 }
1214 }
1211
1215
@@ -1332,6 +1336,7 @@ impl Editor {
1332 biased;
1336 biased;
1333
1337
1334 Some(event) = self.save_queue.next() => {
1338 Some(event) = self.save_queue.next() => {
1339+ self.write_count -= 1;
1335 EditorEvent::DocumentSaved(event)
1340 EditorEvent::DocumentSaved(event)
1336 }
1341 }
1337 Some(config_event) = self.config_events.1.recv() => {
1342 Some(config_event) = self.config_events.1.recv() => {
@@ -1350,17 +1355,21 @@ impl Editor {
1350 }
1355 }
1351
1356
1352 pub async fn flush_writes(&mut self) {
1357 pub async fn flush_writes(&mut self) {
1358+ while self.write_count > 0 {
1353− while let Some(save_event) = self.save_queue.next().await {
1359+ if let Some(save_event) = self.save_queue.next().await {
1354− match &save_event {
1360+ match &save_event {
1355− Ok(event) => {
1361+ Ok(event) => {
1356− let doc = doc_mut!(self, &event.doc_id);
1362+ let doc = doc_mut!(self, &event.doc_id);
1357− doc.set_last_saved_revision(event.revision);
1363+ doc.set_last_saved_revision(event.revision);
1358− }
1364+ }
1359− Err(err) => {
1365+ Err(err) => {
1360− log::error!("error saving document: {}", err);
1366+ log::error!("error saving document: {}", err);
1361− }
1367+ }
1362− };
1368+ };
1363− // TODO: if is_err: break?
1369+ // TODO: if is_err: break?
1370+
1371+ self.write_count -= 1;
1372+ }
1364 }
1373 }
1365 }
1374 }
1366}
1375}