From 7dbcfc0a6c52a3a0e0b601f4e594d84e06a6f3e7 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Tue, 27 Sep 2022 20:25:45 +0100 Subject: [PATCH] config folder watcher improvement --- lapce-data/src/config.rs | 26 +++++++++++++++++++------- lapce-data/src/selection_range.rs | 7 +++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index cae54fc2..85f0f90a 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -11,7 +11,7 @@ }; use indexmap::IndexMap; use lapce_proxy::{directory::Directory, plugin::wasi::find_all_volts}; -use parking_lot::RwLock; +use parking_lot::{Mutex, RwLock}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use structdesc::FieldNames; @@ -606,11 +606,15 @@ pub struct Config { pub struct ConfigWatcher { event_sink: ExtEventSink, + delay_handler: Arc>>, } impl ConfigWatcher { pub fn new(event_sink: ExtEventSink) -> Self { - Self { event_sink } + Self { + event_sink, + delay_handler: Arc::new(Mutex::new(None)), + } } } @@ -621,11 +625,19 @@ fn handle_event(&mut self, event: notify::Result) { notify::EventKind::Create(_) | notify::EventKind::Modify(_) | notify::EventKind::Remove(_) => { - let _ = self.event_sink.submit_command( - LAPCE_UI_COMMAND, - LapceUICommand::ReloadConfig, - Target::Auto, - ); + *self.delay_handler.lock() = Some(()); + let delay_handler = self.delay_handler.clone(); + let event_sink = self.event_sink.clone(); + std::thread::spawn(move || { + std::thread::sleep(std::time::Duration::from_millis(500)); + if delay_handler.lock().take().is_some() { + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::ReloadConfig, + Target::Auto, + ); + } + }); } _ => (), } diff --git a/lapce-data/src/selection_range.rs b/lapce-data/src/selection_range.rs index b43fb9b9..9f8ce86f 100644 --- a/lapce-data/src/selection_range.rs +++ b/lapce-data/src/selection_range.rs @@ -93,7 +93,6 @@ fn count(&self) -> usize { #[cfg(test)] mod test { - use crate::command::CommandExecuted::No; use crate::selection_range::SyntaxSelectionRanges; use lapce_rpc::buffer::BufferId; use lsp_types::{Position, Range, SelectionRange}; @@ -136,11 +135,11 @@ fn should_get_next_selection_range() { rev: 0, last_known_selection: None, ranges: SelectionRange { - range: range_zero.clone(), + range: range_zero, parent: Some(Box::new(SelectionRange { - range: range_one.clone(), + range: range_one, parent: Some(Box::new(SelectionRange { - range: range_two.clone(), + range: range_two, parent: None, })), })),