yazi-actor 26.1.22

Yazi actor model
Documentation
use anyhow::Result;
use yazi_macro::{render, succ};
use yazi_parser::mgr::UpdateSpottedOpt;
use yazi_shared::data::Data;

use crate::{Actor, Ctx};

pub struct UpdateSpotted;

impl Actor for UpdateSpotted {
	type Options = UpdateSpottedOpt;

	const NAME: &str = "update_spotted";

	fn act(cx: &mut Ctx, mut opt: Self::Options) -> Result<Data> {
		let tab = cx.tab_mut();
		let Some(hovered) = tab.hovered().map(|h| &h.url) else {
			succ!(tab.spot.reset());
		};

		if opt.lock.url != *hovered {
			succ!();
		}

		if tab.spot.lock.as_ref().is_none_or(|l| l.id != opt.lock.id) {
			tab.spot.skip = opt.lock.selected().unwrap_or_default();
		} else if let Some(s) = opt.lock.selected() {
			tab.spot.skip = s;
		} else {
			opt.lock.select(Some(tab.spot.skip));
		}

		tab.spot.lock = Some(opt.lock);
		succ!(render!());
	}
}