From 6066f1e382017161a28a96d5497266f0c221dcab Mon Sep 17 00:00:00 2001 From: sxyazi Date: Thu, 25 Apr 2024 18:45:29 +0800 Subject: [PATCH] .. --- yazi-core/src/manager/commands/bulk_rename.rs | 3 +-- yazi-dds/src/body/bulk.rs | 23 ++++++++++++------- yazi-dds/src/pubsub.rs | 8 +++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/yazi-core/src/manager/commands/bulk_rename.rs b/yazi-core/src/manager/commands/bulk_rename.rs index 6f88f63c..4739a677 100644 --- a/yazi-core/src/manager/commands/bulk_rename.rs +++ b/yazi-core/src/manager/commands/bulk_rename.rs @@ -98,8 +98,7 @@ impl Manager { } if !succeeded.is_empty() { - // Pubsub::pub_from_bulk(tab, &changes); - + Pubsub::pub_from_bulk(tab, succeeded.iter().map(|(u, f)| (u, &f.url)).collect()); FilesOp::Upserting(cwd, succeeded).emit(); } drop(permit); diff --git a/yazi-dds/src/body/bulk.rs b/yazi-dds/src/body/bulk.rs index 4e35f1cc..65667837 100644 --- a/yazi-dds/src/body/bulk.rs +++ b/yazi-dds/src/body/bulk.rs @@ -9,20 +9,27 @@ use super::Body; #[derive(Debug, Serialize, Deserialize)] pub struct BodyBulk<'a> { pub tab: usize, - pub changes: Cow<'a, HashMap>, + pub changes: HashMap, Cow<'a, Url>>, } impl<'a> BodyBulk<'a> { #[inline] - pub fn borrowed(tab: usize, changes: &'a HashMap) -> Body<'a> { - Self { tab, changes: Cow::Borrowed(changes) }.into() + pub fn borrowed(tab: usize, changes: &HashMap<&'a Url, &'a Url>) -> Body<'a> { + let iter = changes.iter().map(|(&from, &to)| (Cow::Borrowed(from), Cow::Borrowed(to))); + + Self { tab, changes: iter.collect() }.into() } } impl BodyBulk<'static> { #[inline] - pub fn owned(tab: usize, changes: &HashMap) -> Body<'static> { - Self { tab, changes: Cow::Owned(changes.clone()) }.into() + pub fn owned(tab: usize, changes: &HashMap<&Url, &Url>) -> Body<'static> { + let changes = changes + .iter() + .map(|(&from, &to)| (Cow::Owned(from.clone()), Cow::Owned(to.clone()))) + .collect(); + + Self { tab, changes }.into() } } @@ -32,14 +39,14 @@ impl<'a> From> for Body<'a> { impl IntoLua<'_> for BodyBulk<'static> { fn into_lua(self, lua: &Lua) -> mlua::Result { - BodyBulkIter { tab: self.tab, inner: self.changes.into_owned().into_iter() }.into_lua(lua) + BodyBulkIter { tab: self.tab, inner: self.changes.into_iter() }.into_lua(lua) } } // --- Iterator pub struct BodyBulkIter { pub tab: usize, - pub inner: hash_map::IntoIter, + pub inner: hash_map::IntoIter, Cow<'static, Url>>, } impl UserData for BodyBulkIter { @@ -52,7 +59,7 @@ impl UserData for BodyBulkIter { methods.add_meta_function(MetaMethod::Pairs, |lua, me: AnyUserData| { let iter = lua.create_function(|lua, mut me: UserDataRefMut| { - if let Some((from, to)) = me.inner.next() { + if let Some((Cow::Owned(from), Cow::Owned(to))) = me.inner.next() { (lua.create_any_userdata(from)?, lua.create_any_userdata(to)?).into_lua_multi(lua) } else { ().into_lua_multi(lua) diff --git a/yazi-dds/src/pubsub.rs b/yazi-dds/src/pubsub.rs index 2e236ebb..5db25744 100644 --- a/yazi-dds/src/pubsub.rs +++ b/yazi-dds/src/pubsub.rs @@ -130,15 +130,15 @@ impl Pubsub { } } - pub fn pub_from_bulk(tab: usize, changes: &HashMap) { + pub fn pub_from_bulk(tab: usize, changes: HashMap<&Url, &Url>) { if LOCAL.read().contains_key("bulk") { - Self::pub_(BodyBulk::owned(tab, changes)); + Self::pub_(BodyBulk::owned(tab, &changes)); } if PEERS.read().values().any(|p| p.able("bulk")) { - Client::push(BodyBulk::borrowed(tab, changes)); + Client::push(BodyBulk::borrowed(tab, &changes)); } if BOOT.local_events.contains("bulk") { - BodyBulk::borrowed(tab, changes).with_receiver(*ID).flush(); + BodyBulk::borrowed(tab, &changes).with_receiver(*ID).flush(); } }