diff --git a/yazi-config/preset/yazi.toml b/yazi-config/preset/yazi.toml index 36665aa9..a53c0227 100644 --- a/yazi-config/preset/yazi.toml +++ b/yazi-config/preset/yazi.toml @@ -71,6 +71,7 @@ macro_workers = 10 bizarre_retry = 5 image_alloc = 536870912 # 512MB image_bound = [ 0, 0 ] +ignore_precaching_tasks = true [plugins] preload = [] diff --git a/yazi-config/src/tasks/tasks.rs b/yazi-config/src/tasks/tasks.rs index ec73d54a..e7ae67f4 100644 --- a/yazi-config/src/tasks/tasks.rs +++ b/yazi-config/src/tasks/tasks.rs @@ -14,6 +14,8 @@ pub struct Tasks { pub image_alloc: u32, pub image_bound: [u16; 2], + + pub ignore_precaching_tasks: bool, } impl Default for Tasks { diff --git a/yazi-core/src/files/sorter.rs b/yazi-core/src/files/sorter.rs index bdf620ba..75c0c5fe 100644 --- a/yazi-core/src/files/sorter.rs +++ b/yazi-core/src/files/sorter.rs @@ -1,7 +1,7 @@ use std::{cmp::Ordering, collections::BTreeMap, mem}; use yazi_config::manager::SortBy; -use yazi_shared::{fs::File, fs::Url, natsort}; +use yazi_shared::{fs::{File, Url}, natsort}; #[derive(Clone, Copy, Default, PartialEq)] pub struct FilesSorter { diff --git a/yazi-scheduler/src/running.rs b/yazi-scheduler/src/running.rs index d353a970..54306b4c 100644 --- a/yazi-scheduler/src/running.rs +++ b/yazi-scheduler/src/running.rs @@ -1,8 +1,10 @@ use std::collections::BTreeMap; use futures::future::BoxFuture; +use yazi_config::TASKS; use super::{Task, TaskStage}; +use crate::TaskKind; #[derive(Default)] pub struct Running { @@ -36,7 +38,14 @@ impl Running { pub(super) fn exists(&self, id: usize) -> bool { self.all.contains_key(&id) } #[inline] - pub fn values(&self) -> impl Iterator { self.all.values() } + pub fn values(&self) -> impl Iterator { + let map = self.all.values(); + if TASKS.ignore_precaching_tasks { + map.into_iter().filter(|t| t.kind == TaskKind::User).collect::>().into_iter() + } else { + map.into_iter().collect::>().into_iter() + } + } #[inline] pub fn is_empty(&self) -> bool { self.all.is_empty() } diff --git a/yazi-scheduler/src/scheduler.rs b/yazi-scheduler/src/scheduler.rs index 55faa5a5..4b6d20fa 100644 --- a/yazi-scheduler/src/scheduler.rs +++ b/yazi-scheduler/src/scheduler.rs @@ -7,7 +7,7 @@ use yazi_config::{open::Opener, TASKS}; use yazi_shared::{emit, event::Exec, fs::{unique_path, Url}, Layer, Throttle}; use super::{Running, TaskOp, TaskStage}; -use crate::workers::{File, FileOpDelete, FileOpLink, FileOpPaste, FileOpTrash, Precache, PrecacheOpMime, PrecacheOpSize, Process, ProcessOpOpen}; +use crate::{workers::{File, FileOpDelete, FileOpLink, FileOpPaste, FileOpTrash, Precache, PrecacheOpMime, PrecacheOpSize, Process, ProcessOpOpen}, TaskKind}; pub struct Scheduler { file: Arc, @@ -336,6 +336,10 @@ impl Scheduler { } let id = running.add(format!("Calculate the size of {:?}", target)); + if let Some(task) = self.running.clone().write().get_mut(id) { + task.kind = TaskKind::PreCache; + } + _ = self.todo.send_blocking({ let precache = self.precache.clone(); let target = target.clone(); @@ -352,6 +356,10 @@ impl Scheduler { let name = format!("Preload mimetype for {} files", targets.len()); let id = self.running.write().add(name); + if let Some(task) = self.running.clone().write().get_mut(id) { + task.kind = TaskKind::PreCache; + } + _ = self.todo.send_blocking({ let precache = self.precache.clone(); async move { @@ -365,6 +373,10 @@ impl Scheduler { let name = format!("Precache of {} image files", targets.len()); let id = self.running.write().add(name); + if let Some(task) = self.running.clone().write().get_mut(id) { + task.kind = TaskKind::PreCache; + } + self.precache.image(id, targets).ok(); } @@ -372,6 +384,10 @@ impl Scheduler { let name = format!("Precache of {} video files", targets.len()); let id = self.running.write().add(name); + if let Some(task) = self.running.clone().write().get_mut(id) { + task.kind = TaskKind::PreCache; + } + self.precache.video(id, targets).ok(); } @@ -379,6 +395,10 @@ impl Scheduler { let name = format!("Precache of {} PDF files", targets.len()); let id = self.running.write().add(name); + if let Some(task) = self.running.clone().write().get_mut(id) { + task.kind = TaskKind::PreCache; + } + self.precache.pdf(id, targets).ok(); } } diff --git a/yazi-scheduler/src/task.rs b/yazi-scheduler/src/task.rs index ffb7dd0f..d914e084 100644 --- a/yazi-scheduler/src/task.rs +++ b/yazi-scheduler/src/task.rs @@ -5,6 +5,7 @@ pub struct Task { pub id: usize, pub name: String, pub stage: TaskStage, + pub kind: TaskKind, pub total: u32, pub succ: u32, @@ -69,3 +70,10 @@ pub enum TaskStage { Dispatched, Hooked, } + +#[derive(Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd)] +pub enum TaskKind { + #[default] + User, + PreCache, +}