yazi_scheduler/
task.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use tokio::sync::mpsc;

#[derive(Debug, Default)]
pub struct Task {
	pub id:    usize,
	pub kind:  TaskKind,
	pub name:  String,
	pub stage: TaskStage,

	pub total: u32,
	pub succ:  u32,
	pub fail:  u32,

	pub found:     u64,
	pub processed: u64,

	pub logs:   String,
	pub logger: Option<mpsc::UnboundedSender<String>>,
}

impl Task {
	pub fn new(id: usize, kind: TaskKind, name: String) -> Self {
		Self { id, kind, name, ..Default::default() }
	}
}

#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum TaskKind {
	#[default]
	User,
	Preload,
}

#[derive(Debug, PartialEq, Eq)]
pub struct TaskSummary {
	pub name: String,

	pub total: u32,
	pub succ:  u32,
	pub fail:  u32,

	pub found:     u64,
	pub processed: u64,
}

impl From<&Task> for TaskSummary {
	fn from(task: &Task) -> Self {
		TaskSummary {
			name: task.name.clone(),

			total: task.total,
			succ:  task.succ,
			fail:  task.fail,

			found:     task.found,
			processed: task.processed,
		}
	}
}

#[derive(Debug)]
pub enum TaskProg {
	// id, size
	New(usize, u64),
	// id, processed, size
	Adv(usize, u32, u64),
	// id
	Succ(usize),
	// id
	Fail(usize, String),
	// id, line
	Log(usize, String),
}

#[derive(Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd)]
pub enum TaskStage {
	#[default]
	Pending,
	Dispatched,
	Hooked,
}