From cad65609553dc5b5efe76fa146e8f6bf3b6ea6df Mon Sep 17 00:00:00 2001 From: sxyazi Date: Mon, 11 Sep 2023 19:16:49 +0800 Subject: [PATCH] fix: wrong offset of existing directory on previewing --- core/src/manager/manager.rs | 4 ++-- core/src/manager/preview/preview.rs | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/core/src/manager/manager.rs b/core/src/manager/manager.rs index 56292825..b1e4093d 100644 --- a/core/src/manager/manager.rs +++ b/core/src/manager/manager.rs @@ -65,8 +65,8 @@ impl Manager { } if hovered.is_dir() { - let len = self.active().history(url).map(|f| f.files.len()); - self.active_mut().preview.folder(url, len, sequent); + let position = self.active().history(url).map(|f| (f.offset(), f.files.len())); + self.active_mut().preview.folder(url, position, sequent); return false; } diff --git a/core/src/manager/preview/preview.rs b/core/src/manager/preview/preview.rs index 1ff06946..11a8c1b8 100644 --- a/core/src/manager/preview/preview.rs +++ b/core/src/manager/preview/preview.rs @@ -59,15 +59,15 @@ impl Preview { })); } - pub fn folder(&mut self, url: &Url, files: Option, sequent: bool) { - if let Some(files) = files { - self.skip = self.skip.min(files.saturating_sub(MANAGER.layout.preview_height())); + pub fn folder(&mut self, url: &Url, position: Option<(usize, usize)>, sequent: bool) { + if let Some((_, len)) = position { + self.skip = self.skip.min(len.saturating_sub(MANAGER.layout.preview_height())); } if self.same(url, MIME_DIR) { return; } else if !self.same_mime(url, MIME_DIR) { - self.skip = 0; + self.skip = position.map(|(offset, _)| offset).unwrap_or(0); } self.reset(|_| true); @@ -89,7 +89,7 @@ impl Preview { return; }; - if files.is_some() { + if position.is_some() { emit!(Files(FilesOp::Full(url, UnboundedReceiverStream::new(rx).collect().await))); return; } @@ -159,10 +159,12 @@ impl Preview { return false; }; - let b = !lock.is_image(); - if f(lock) { - self.lock = None; + if !f(lock) { + return false; } + + let b = !lock.is_image(); + self.lock = None; b } }