From 65003337f93de9223d71c302cda3295632208113 Mon Sep 17 00:00:00 2001 From: Mika Vilpas Date: Wed, 24 Apr 2024 17:09:23 +0300 Subject: [PATCH] refactor: bulk renaming sends "bulk" events --- yazi-core/src/manager/commands/bulk_rename.rs | 7 +++++-- yazi-dds/src/body/bulk.rs | 2 +- yazi-dds/src/pubsub.rs | 14 +++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/yazi-core/src/manager/commands/bulk_rename.rs b/yazi-core/src/manager/commands/bulk_rename.rs index c249172a..c8aed8d2 100644 --- a/yazi-core/src/manager/commands/bulk_rename.rs +++ b/yazi-core/src/manager/commands/bulk_rename.rs @@ -94,15 +94,18 @@ impl Manager { } else if let Ok(f) = File::from(new_url).await { let old_url = Url::from(old); succeeded.insert(old_url.clone(), f.clone()); - - Pubsub::pub_from_rename(tab, &old_url, &f.url); } else { failed.push((o, n, anyhow!("Failed to retrieve file info"))); } } if !succeeded.is_empty() { + let changes: HashMap<_, _> = + succeeded.clone().into_iter().map(|(old, new)| (old, new.url)).collect(); + FilesOp::Upserting(cwd, succeeded).emit(); + + Pubsub::pub_from_bulk(tab, &changes); } drop(permit); diff --git a/yazi-dds/src/body/bulk.rs b/yazi-dds/src/body/bulk.rs index 4e35f1cc..7cf8f6ee 100644 --- a/yazi-dds/src/body/bulk.rs +++ b/yazi-dds/src/body/bulk.rs @@ -21,7 +21,7 @@ impl<'a> BodyBulk<'a> { impl BodyBulk<'static> { #[inline] - pub fn owned(tab: usize, changes: &HashMap) -> Body<'static> { + pub fn dummy(tab: usize, changes: &HashMap) -> Body<'static> { Self { tab, changes: Cow::Owned(changes.clone()) }.into() } } diff --git a/yazi-dds/src/pubsub.rs b/yazi-dds/src/pubsub.rs index 698a9ea4..04646de5 100644 --- a/yazi-dds/src/pubsub.rs +++ b/yazi-dds/src/pubsub.rs @@ -5,7 +5,7 @@ use parking_lot::RwLock; use yazi_boot::BOOT; use yazi_shared::{fs::Url, RoCell}; -use crate::{body::{Body, BodyCd, BodyDelete, BodyHi, BodyHover, BodyMove, BodyMoveItem, BodyRename, BodyTrash, BodyYank}, Client, ID, PEERS}; +use crate::{body::{Body, BodyBulk, BodyCd, BodyDelete, BodyHi, BodyHover, BodyMove, BodyMoveItem, BodyRename, BodyTrash, BodyYank}, Client, ID, PEERS}; pub static LOCAL: RoCell>>>> = RoCell::new(); @@ -118,6 +118,18 @@ impl Pubsub { } } + pub fn pub_from_bulk(tab: usize, changes: &HashMap) { + if LOCAL.read().contains_key("bulk") { + Self::pub_(BodyBulk::dummy(tab, changes)); + } + if PEERS.read().values().any(|p| p.able("bulk")) { + Client::push(BodyBulk::borrowed(tab, changes)); + } + if BOOT.local_events.contains("bulk") { + BodyBulk::borrowed(tab, changes).with_receiver(*ID).flush(); + } + } + pub fn pub_from_rename(tab: usize, from: &Url, to: &Url) { if LOCAL.read().contains_key("rename") { Self::pub_(BodyRename::dummy(tab, from, to));