From bce10de2af84988d7e643e763ecbba52b160be42 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Thu, 16 May 2024 17:54:48 +0800 Subject: [PATCH] refactor: eliminate `exec` --- yazi-config/src/plugin/props.rs | 2 +- yazi-config/src/plugin/rule.rs | 63 ++++---------------------- yazi-core/src/manager/commands/seek.rs | 2 +- yazi-core/src/tab/preview.rs | 4 +- yazi-scheduler/src/scheduler.rs | 2 +- 5 files changed, 14 insertions(+), 59 deletions(-) diff --git a/yazi-config/src/plugin/props.rs b/yazi-config/src/plugin/props.rs index 410bb73f..91035c60 100644 --- a/yazi-config/src/plugin/props.rs +++ b/yazi-config/src/plugin/props.rs @@ -11,6 +11,6 @@ pub struct PluginProps { impl From<&PluginRule> for PluginProps { fn from(rule: &PluginRule) -> Self { - Self { id: rule.id, name: rule.cmd.name.to_owned(), multi: rule.multi, prio: rule.prio } + Self { id: rule.id, name: rule.run.name.to_owned(), multi: rule.multi, prio: rule.prio } } } diff --git a/yazi-config/src/plugin/rule.rs b/yazi-config/src/plugin/rule.rs index 57c223f5..b08c20e4 100644 --- a/yazi-config/src/plugin/rule.rs +++ b/yazi-config/src/plugin/rule.rs @@ -1,19 +1,22 @@ -use std::sync::atomic::Ordering; - -use serde::{Deserialize, Deserializer}; +use serde::Deserialize; use yazi_shared::{event::Cmd, Condition}; -use crate::{Pattern, Priority, DEPRECATED_EXEC}; +use crate::{Pattern, Priority}; -#[derive(Debug)] +#[derive(Debug, Deserialize)] pub struct PluginRule { + #[serde(skip)] pub id: u8, pub cond: Option, pub name: Option, pub mime: Option, - pub cmd: Cmd, + #[serde(deserialize_with = "super::run_deserialize")] + pub run: Cmd, + #[serde(default)] pub sync: bool, + #[serde(default)] pub multi: bool, + #[serde(default)] pub prio: Priority, } @@ -24,51 +27,3 @@ impl PluginRule { #[inline] pub fn any_dir(&self) -> bool { self.name.as_ref().is_some_and(|p| p.any_dir()) } } - -// TODO: remove this once Yazi 0.3 is released -impl<'de> Deserialize<'de> for PluginRule { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - #[derive(Deserialize)] - pub struct Shadow { - #[serde(default)] - pub id: u8, - pub cond: Option, - pub name: Option, - pub mime: Option, - pub run: Option, - pub exec: Option, - #[serde(default)] - pub sync: bool, - #[serde(default)] - pub multi: bool, - #[serde(default)] - pub prio: Priority, - } - - let shadow = Shadow::deserialize(deserializer)?; - - #[derive(Deserialize)] - struct WrappedCmd(#[serde(deserialize_with = "super::run_deserialize")] Cmd); - - if shadow.exec.is_some() { - DEPRECATED_EXEC.store(true, Ordering::Relaxed); - } - let Some(run) = shadow.run.or(shadow.exec) else { - return Err(serde::de::Error::custom("missing field `run` within `[plugin]`")); - }; - - Ok(Self { - id: shadow.id, - cond: shadow.cond, - name: shadow.name, - mime: shadow.mime, - cmd: run.0, - sync: shadow.sync, - multi: shadow.multi, - prio: shadow.prio, - }) - } -} diff --git a/yazi-core/src/manager/commands/seek.rs b/yazi-core/src/manager/commands/seek.rs index a80c57c2..5beb7a17 100644 --- a/yazi-core/src/manager/commands/seek.rs +++ b/yazi-core/src/manager/commands/seek.rs @@ -32,6 +32,6 @@ impl Manager { }; let opt = opt.into() as Opt; - isolate::seek_sync(&previewer.cmd, hovered.clone(), opt.units); + isolate::seek_sync(&previewer.run, hovered.clone(), opt.units); } } diff --git a/yazi-core/src/tab/preview.rs b/yazi-core/src/tab/preview.rs index 0b7b560e..d5c8db7b 100644 --- a/yazi-core/src/tab/preview.rs +++ b/yazi-core/src/tab/preview.rs @@ -32,9 +32,9 @@ impl Preview { self.abort(); if previewer.sync { - isolate::peek_sync(&previewer.cmd, file, self.skip); + isolate::peek_sync(&previewer.run, file, self.skip); } else { - self.previewer_ct = Some(isolate::peek(&previewer.cmd, file, self.skip)); + self.previewer_ct = Some(isolate::peek(&previewer.run, file, self.skip)); } } diff --git a/yazi-scheduler/src/scheduler.rs b/yazi-scheduler/src/scheduler.rs index db83c69c..f51186b6 100644 --- a/yazi-scheduler/src/scheduler.rs +++ b/yazi-scheduler/src/scheduler.rs @@ -221,7 +221,7 @@ impl Scheduler { pub fn preload_paged(&self, rule: &PluginRule, targets: Vec<&yazi_shared::fs::File>) { let id = self.ongoing.lock().add( TaskKind::Preload, - format!("Run preloader `{}` with {} target(s)", rule.cmd.name, targets.len()), + format!("Run preloader `{}` with {} target(s)", rule.run.name, targets.len()), ); let plugin = rule.into();