diff options
author | rabite <rabite@posteo.de> | 2019-12-23 02:08:50 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-12-23 02:08:50 +0100 |
commit | ef29c47e88f13d2931a2c571a579bf0bf0dacc8c (patch) | |
tree | 3a80d1a2e6115630d6e37aa989a8155ad435f809 /src/file_browser.rs | |
parent | 03693f96d0265f665ec00b5bb204cb727d7b137a (diff) |
fixed hangs when updating large directories (>10k files)
Diffstat (limited to 'src/file_browser.rs')
-rw-r--r-- | src/file_browser.rs | 52 |
1 files changed, 7 insertions, 45 deletions
diff --git a/src/file_browser.rs b/src/file_browser.rs index 257ca32..43394ac 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -168,21 +168,6 @@ impl Tabbable for TabView<FileBrowser> { } fn on_refresh(&mut self) -> HResult<()> { - let fs_changes = self.active_tab_() - .fs_cache - .fs_changes - .write()? - .drain(..) - .collect::<Vec<_>>(); - - for tab in &mut self.widgets { - for (dir, old_file, new_file) in fs_changes.iter() { - tab.replace_file(&dir, - old_file.as_ref(), - new_file.as_ref()).log() - } - } - let open_dirs = self.widgets .iter() .fold(HashSet::new(), |mut dirs, tab| { @@ -503,7 +488,7 @@ impl FileBrowser { } pub fn main_widget_goto(&mut self, dir: &File) -> HResult<()> { - self.cache_files().log(); + self.save_tab_settings().log(); let dir = dir.clone(); let cache = self.fs_cache.clone(); @@ -733,22 +718,15 @@ impl FileBrowser { Ok(&self.left_widget()?.content) } - pub fn cache_files(&mut self) -> HResult<()> { - if self.main_widget().is_ok() { + pub fn save_tab_settings(&mut self) -> HResult<()> { + if !self.main_async_widget_mut()?.ready() { return Ok(()) } + + if self.main_widget()?.content.len() > 0 { let files = self.get_files()?; let selected_file = self.selected_file().ok(); - self.fs_cache.put_files(files, selected_file).log(); - self.main_widget_mut()?.content.meta_updated = false; + self.fs_cache.save_settings(files, selected_file).log(); } - - // if self.cwd.parent().is_some() { - // let left_selection = self.left_widget()?.clone_selected_file(); - // let left_files = self.get_left_files()?; - // self.fs_cache.put_files(left_files, Some(left_selection)).log(); - // self.left_widget_mut()?.content.meta_updated = false; - // } - Ok(()) } @@ -769,22 +747,6 @@ impl FileBrowser { Ok(dir) } - fn replace_file(&mut self, - dir: &File, - old: Option<&File>, - new: Option<&File>) -> HResult<()> { - if &self.cwd == dir { - self.main_widget_mut()?.content.replace_file(old, new.cloned()).log(); - } - - self.preview_widget_mut()?.replace_file(dir, old, new).ok(); - - if &self.left_dir()? == &dir { - self.left_widget_mut()?.content.replace_file(old, new.cloned()).log(); - } - Ok(()) - } - pub fn selected_file(&self) -> HResult<File> { let widget = self.main_widget()?; let file = widget.selected_file().clone(); @@ -1288,7 +1250,7 @@ impl Widget for FileBrowser { self.set_cwd().log(); if !self.columns.zoom_active { self.update_preview().log(); } self.columns.refresh().log(); - self.cache_files().log(); + self.save_tab_settings().log(); Ok(()) } |