mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 23:01:05 +00:00
fix: precache n-1 and n+1 pages (#349)
This commit is contained in:
parent
7c49d9c57a
commit
a0ba853718
2 changed files with 26 additions and 12 deletions
|
|
@ -43,22 +43,38 @@ impl Folder {
|
|||
self.prev(Default::default());
|
||||
|
||||
if self.page == old {
|
||||
emit!(Pages(self.page)); // Force update
|
||||
self.set_page(true); // Force update
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
pub fn set_page(&mut self, force: bool) -> bool {
|
||||
pub fn set_page(&mut self, force: bool) {
|
||||
let limit = MANAGER.layout.folder_height();
|
||||
let new = if limit == 0 { 0 } else { self.cursor / limit };
|
||||
if limit == 0 {
|
||||
return;
|
||||
}
|
||||
|
||||
let new = self.cursor / limit;
|
||||
if !force && self.page == new {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Current page
|
||||
emit!(Pages(new));
|
||||
|
||||
// Next page
|
||||
let max_page = (self.files.len() + limit - 1) / limit;
|
||||
if new < max_page && new + 1 != self.page {
|
||||
emit!(Pages(new + 1));
|
||||
}
|
||||
|
||||
// Previous page
|
||||
if new > 1 && new - 1 != self.page {
|
||||
emit!(Pages(new - 1));
|
||||
}
|
||||
|
||||
self.page = new;
|
||||
emit!(Pages(new));
|
||||
true
|
||||
}
|
||||
|
||||
pub fn next(&mut self, step: Step) -> bool {
|
||||
|
|
@ -115,11 +131,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]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue