mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-24 08:11:04 +00:00
59 lines
1.4 KiB
Rust
59 lines
1.4 KiB
Rust
use mlua::ObjectLike;
|
|
use yazi_binding::Error;
|
|
use yazi_config::LAYOUT;
|
|
use yazi_macro::{emit, relay};
|
|
use yazi_runner::previewer::PeekJob;
|
|
use yazi_scheduler::TaskSummary;
|
|
use yazi_shared::url::AsUrl;
|
|
use yazi_widgets::Renderable;
|
|
|
|
use crate::{app::PluginOpt, tab::PreviewLock};
|
|
|
|
pub struct AppProxy;
|
|
|
|
impl AppProxy {
|
|
pub fn plugin(opt: PluginOpt) {
|
|
emit!(Call(relay!(app:plugin).with_any("opt", opt)));
|
|
}
|
|
|
|
pub fn plugin_peek(job: PeekJob) {
|
|
let name = job.previewer.name.clone();
|
|
Self::plugin(PluginOpt::new_callback(name, move |_, plugin| plugin.call_method("peek", job)));
|
|
}
|
|
|
|
pub fn update_progress(summary: TaskSummary) {
|
|
emit!(Call(relay!(app:update_progress).with_any("summary", summary)));
|
|
}
|
|
}
|
|
|
|
// --- Mgr
|
|
pub struct MgrProxy;
|
|
|
|
impl MgrProxy {
|
|
pub fn update_paged_by<U>(page: usize, only_if: U)
|
|
where
|
|
U: AsUrl,
|
|
{
|
|
emit!(Call(relay!(mgr:update_paged, [page]).with("only-if", only_if.as_url())));
|
|
}
|
|
|
|
pub fn update_peeked(lock: PreviewLock) {
|
|
emit!(Call(relay!(mgr:update_peeked).with_any("lock", lock)));
|
|
}
|
|
|
|
pub fn update_peeked_error(job: PeekJob, error: String) {
|
|
let area = LAYOUT.get().preview;
|
|
Self::update_peeked(PreviewLock {
|
|
url: job.file.url,
|
|
cha: job.file.cha,
|
|
mime: job.mime,
|
|
|
|
skip: job.skip,
|
|
area: area.into(),
|
|
data: vec![
|
|
Renderable::Clear(Default::default()).with_area(area),
|
|
Renderable::from(Error::custom(error)).with_area(area),
|
|
],
|
|
});
|
|
}
|
|
}
|