From b359cc911917b7caeee921d95da6021f6127199c Mon Sep 17 00:00:00 2001 From: rabite Date: Mon, 27 Jan 2020 15:25:44 +0100 Subject: [PATCH] don't draw preview dir twice --- src/listview.rs | 35 ++++++++++++++++++++++++----------- src/preview.rs | 4 ++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/listview.rs b/src/listview.rs index ff1a9a9..52007a7 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -331,32 +331,41 @@ impl FileListBuilder { } }?; - if self.meta_all { - files.meta_all(); - } else if self.meta_upto > 0 { - files.meta_upto(self.meta_upto, Some(self.core.get_sender())); - } + let mut view = ListView::new(&self.core, files); let selected_file = match self.selected_file { Some(f) => Some(f), None => { c.as_ref() - .map(|c| c.get_selection(&files.directory).ok()) + .map(|c| c.get_selection(&view.content.directory).ok()) .flatten() } }; - let mut view = ListView::new(&self.core, files); - selected_file.map(|mut f| { f.meta_sync().log(); view.select_file(&f); }); + let from = match self.meta_all { + true => 0, + false => view.offset, + }; + + let ysize = view.core.coordinates.ysize_u(); + let upto = match self.meta_all { + true => view.content.len, + false => from + ysize + 1 + }; + + view.content + .iter_files_mut() + .skip(from) + .take(upto) + .for_each(|f| f.meta_sync().log()); + view.content.meta_upto = Some(view.content.len); + if self.prerender { - view.refresh().log(); - - match self.stale { Some(s) => view.render_buffer_stale(s)?, None => view.render_buffer()? @@ -367,6 +376,10 @@ impl FileListBuilder { } }; + view.content.set_clean(); + view.content.dirty_meta.set_clean(); + view.core.set_clean(); + Ok(view) } } diff --git a/src/preview.rs b/src/preview.rs index 7546dfc..cc50168 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -451,6 +451,8 @@ impl Previewer { stale: &Stale, animator: &Stale) -> HResult { + use crate::dirty::Dirtyable; + if stale.is_stale()? { return Previewer::preview_failed(&file) } let source = FileSource::Path(file.clone()); @@ -463,6 +465,8 @@ impl Previewer { if stale.is_stale()? { return Previewer::preview_failed(&file) } file_list.animate_slide_up(Some(animator))?; + file_list.core.set_clean(); + Ok(PreviewWidget::FileList(file_list)) }