From 20219a4f52edea537c5b1e2cea88bd5a3a8f335f Mon Sep 17 00:00:00 2001 From: Hanaasagi Date: Tue, 7 Nov 2023 20:23:33 +0900 Subject: [PATCH] fix(render): precache n-1 and n+1 pages --- yazi-core/src/tab/folder.rs | 17 +++++++++++++++-- yazi-fm/src/app.rs | 6 ++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/yazi-core/src/tab/folder.rs b/yazi-core/src/tab/folder.rs index 44a356a6..5e654bf8 100644 --- a/yazi-core/src/tab/folder.rs +++ b/yazi-core/src/tab/folder.rs @@ -56,8 +56,21 @@ impl Folder { return false; } + let old = self.page; self.page = new; + + let prev_page = new.saturating_sub(1); + let next_page = new.saturating_add(1); + + if prev_page != new && prev_page != old { + emit!(Pages(prev_page)); + } + emit!(Pages(new)); + + if next_page != new && next_page != old { + emit!(Pages(next_page)); + } true } @@ -115,11 +128,11 @@ impl Folder { #[inline] pub fn hovered(&self) -> Option<&File> { self.files.get(self.cursor) } - pub fn paginate(&self) -> &[File] { + pub fn paginate(&self, page: usize) -> &[File] { let len = self.files.len(); let limit = MANAGER.layout.folder_height(); - let start = (self.page * limit).min(len.saturating_sub(1)); + let start = (page * limit).min(len.saturating_sub(1)); let end = (start + limit).min(len); &self.files[start..end] } diff --git a/yazi-fm/src/app.rs b/yazi-fm/src/app.rs index 3a83a297..40f80ae6 100644 --- a/yazi-fm/src/app.rs +++ b/yazi-fm/src/app.rs @@ -143,10 +143,8 @@ impl App { } } Event::Pages(page) => { - if manager.current().page == page { - let targets = self.cx.manager.current().paginate(); - tasks.precache_mime(targets, &self.cx.manager.mimetype); - } + let targets = self.cx.manager.current().paginate(page); + tasks.precache_mime(targets, &self.cx.manager.mimetype); } Event::Mimetype(mimes) => { if manager.update_mimetype(mimes, tasks) {