yazi/yazi-core/src/manager/commands/seek.rs

37 lines
852 B
Rust

use yazi_config::PLUGIN;
use yazi_plugin::isolate;
use yazi_shared::{MIME_DIR, event::{Cmd, Data}};
use crate::manager::Manager;
#[derive(Debug)]
pub struct Opt {
units: i16,
}
impl From<Cmd> for Opt {
fn from(c: Cmd) -> Self { Self { units: c.first().and_then(Data::as_i16).unwrap_or(0) } }
}
impl Manager {
pub fn seek(&mut self, opt: impl Into<Opt>) {
let Some(hovered) = self.hovered() else {
return self.active_mut().preview.reset();
};
let mime = if hovered.is_dir() {
MIME_DIR
} else if let Some(s) = self.mimetype.get(&hovered.url) {
s
} else {
return self.active_mut().preview.reset();
};
let Some(previewer) = PLUGIN.previewer(&hovered.url, mime) else {
return self.active_mut().preview.reset();
};
let opt = opt.into() as Opt;
isolate::seek_sync(&previewer.run, hovered.clone(), opt.units);
}
}