yazi_core/manager/commands/
update_yanked.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::collections::HashSet;

use yazi_macro::render;
use yazi_shared::{event::CmdCow, url::Url};

use crate::manager::{Manager, Yanked};

#[derive(Default)]
pub struct Opt {
	cut:  bool,
	urls: HashSet<Url>,
}

impl TryFrom<CmdCow> for Opt {
	type Error = ();

	fn try_from(mut c: CmdCow) -> Result<Self, Self::Error> {
		if let Some(iter) = c.take_any::<yazi_dds::body::BodyYankIter>("urls") {
			Ok(Self { urls: iter.urls.into_iter().collect(), cut: iter.cut })
		} else {
			Err(())
		}
	}
}

impl Manager {
	pub fn update_yanked(&mut self, opt: impl TryInto<Opt>) {
		let Ok(opt) = opt.try_into() else { return };

		if opt.urls.is_empty() && self.yanked.is_empty() {
			return;
		}

		self.yanked = Yanked::new(opt.cut, opt.urls);
		render!();
	}
}