mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
45 lines
858 B
Rust
45 lines
858 B
Rust
use tokio::sync::mpsc;
|
|
use yazi_shared::Id;
|
|
|
|
use crate::{TaskIn, TaskProg};
|
|
|
|
#[derive(Debug)]
|
|
pub struct Task {
|
|
pub id: Id,
|
|
pub name: String,
|
|
pub(crate) prog: TaskProg,
|
|
pub(crate) hook: Option<TaskIn>,
|
|
pub canceled: bool,
|
|
|
|
pub logs: String,
|
|
pub logger: Option<mpsc::UnboundedSender<String>>,
|
|
}
|
|
|
|
impl Task {
|
|
pub(super) fn new<T>(id: Id, name: String) -> Self
|
|
where
|
|
T: Into<TaskProg> + Default,
|
|
{
|
|
Self {
|
|
id,
|
|
name,
|
|
prog: T::default().into(),
|
|
hook: None,
|
|
canceled: false,
|
|
|
|
logs: Default::default(),
|
|
logger: Default::default(),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn log(&mut self, line: String) {
|
|
self.logs.push_str(&line);
|
|
self.logs.push('\n');
|
|
|
|
if let Some(logger) = &self.logger {
|
|
logger.send(line).ok();
|
|
}
|
|
}
|
|
|
|
pub(super) fn set_hook(&mut self, hook: impl Into<TaskIn>) { self.hook = Some(hook.into()); }
|
|
}
|