fix(render): precache n-1 and n+1 pages

This commit is contained in:
Hanaasagi 2023-11-07 20:23:33 +09:00
parent 1f744810f4
commit 20219a4f52
2 changed files with 17 additions and 6 deletions

View file

@ -56,8 +56,21 @@ impl Folder {
return false; return false;
} }
let old = self.page;
self.page = new; 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)); emit!(Pages(new));
if next_page != new && next_page != old {
emit!(Pages(next_page));
}
true true
} }
@ -115,11 +128,11 @@ impl Folder {
#[inline] #[inline]
pub fn hovered(&self) -> Option<&File> { self.files.get(self.cursor) } 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 len = self.files.len();
let limit = MANAGER.layout.folder_height(); 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); let end = (start + limit).min(len);
&self.files[start..end] &self.files[start..end]
} }

View file

@ -143,10 +143,8 @@ impl App {
} }
} }
Event::Pages(page) => { Event::Pages(page) => {
if manager.current().page == page { let targets = self.cx.manager.current().paginate(page);
let targets = self.cx.manager.current().paginate(); tasks.precache_mime(targets, &self.cx.manager.mimetype);
tasks.precache_mime(targets, &self.cx.manager.mimetype);
}
} }
Event::Mimetype(mimes) => { Event::Mimetype(mimes) => {
if manager.update_mimetype(mimes, tasks) { if manager.update_mimetype(mimes, tasks) {