mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41: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());
|
self.prev(Default::default());
|
||||||
|
|
||||||
if self.page == old {
|
if self.page == old {
|
||||||
emit!(Pages(self.page)); // Force update
|
self.set_page(true); // Force update
|
||||||
}
|
}
|
||||||
|
|
||||||
true
|
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 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 {
|
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;
|
self.page = new;
|
||||||
emit!(Pages(new));
|
|
||||||
true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn next(&mut self, step: Step) -> bool {
|
pub fn next(&mut self, step: Step) -> bool {
|
||||||
|
|
@ -115,11 +131,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]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue