plot/lib/display/
job_spec.rs1use super::Color;
2use crate::lib::logic::{JobMode, JobSpec, TabSortOrder};
3
4impl std::fmt::Display for JobSpec {
5 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6 let name = self.name.as_deref().unwrap_or("None");
7 let desc = self.description.as_deref().unwrap_or("None");
8
9 let quiet_status = if self.quiet_work { "π (Quiet)" } else { "π (Verbose)" };
10
11 let c_bool = |b: bool| Color::size(&b.to_string()).to_string();
13 let c_num = |n: usize| Color::size(&n.to_string()).to_string();
14
15 println!("{}", "β".repeat(80));
16 writeln!(f, "γIDγπ [{}] | {} | {}", Color::num(&self.id), Color::folder(name), quiet_status)?;
18 writeln!(f, " β π {}", Color::border(desc))?;
19 writeln!(f, " β")?;
20
21 writeln!(f, " βββγSCANγ")?;
23 writeln!(f, " β βββ π― \"{}\"", Color::folder(&self.scan.work_path))?;
24 writeln!(f, " β βββ π | π«π [{}]", c_bool(self.scan.ignore_case))?;
25
26 let pats_len = self.scan.patterns.len();
27 for (i, pat) in self.scan.patterns.iter().enumerate() {
28 let branch = if i == pats_len - 1 { "βββ" } else { "βββ" };
29 writeln!(f, " β {} \"{}\"", branch, Color::border(pat))?;
30 }
31
32 writeln!(f, " β")?;
33
34 writeln!(f, " βββγEXPORTγ")?;
36 let has_sotc = self.save_sotc_at.is_some();
37 let sotc_path = self.save_sotc_at.as_deref().unwrap_or("");
38 let sotc_title = self.title_sotc.as_deref().unwrap_or("");
39 writeln!(f, " β βββγSOTCγποΈ [{}] | πΎ \"{}\"", c_bool(has_sotc), Color::folder(sotc_path))?;
40 writeln!(f, " β β βββ π€ \"{}\"", Color::border(sotc_title))?;
41
42 let has_cots = self.save_cots_at.is_some();
43 let cots_path = self.save_cots_at.as_deref().unwrap_or("");
44 let cots_title = self.title_cots.as_deref().unwrap_or("");
45 writeln!(f, " β βββγCOTSγπ [{}] | πΎ \"{}\"", c_bool(has_cots), Color::folder(cots_path))?;
46 writeln!(f, " β βββ π€ \"{}\"", Color::border(cots_title))?;
47
48 writeln!(f, " β")?;
49
50 writeln!(f, " βββγTABLEγ")?;
52 let cols = self.table.columns.iter().map(|c| format!("{:?}", c)).collect::<Vec<_>>().join(", ");
53 let struct_name = format!("{:?}", self.table.structure);
54 writeln!(
55 f,
56 " β βββ π§© [{}] | ποΈ [{}] | β [{}]",
57 Color::size(&cols),
58 Color::size(&struct_name),
59 c_bool(self.table.more_icons)
60 )?;
61
62 let sort_by_str = format!("{:?}", self.table.sort_by).to_lowercase();
63 let sort_order_str = format!("{:?}", self.table.sort_order).to_lowercase();
64 let is_reverse = self.table.sort_order == TabSortOrder::Desc;
65 writeln!(
66 f,
67 " β βββ πΆ (\"{}\", \"{}\") | β©οΈ [{}]",
68 Color::size(&sort_by_str),
69 Color::size(&sort_order_str),
70 c_bool(is_reverse)
71 )?;
72
73 writeln!(f, " β")?;
74
75 writeln!(f, " βββγSPECγ")?;
77 let is_m = self.mode == JobMode::Matched;
78 let is_x = self.mode == JobMode::Mismatched;
79 writeln!(f, " βββ βοΈ βοΈ Matched [{}] | βοΈ βοΈ Mismatched [{}]", c_bool(is_m), c_bool(is_x))?;
80 writeln!(f, " βββ ππ [{}] | πβΉοΈ [{}]", c_bool(self.hide_stats), c_bool(self.hide_promo))?;
81
82 let is_trim = self.table.trim_size.is_some();
83 let t_size = self.table.trim_size.unwrap_or(20);
84 let t_page = self.table.trim_page;
85
86 write!(f, " βββ βοΈ π [{}] | ππ [{}] | πποΈ [{}] ", c_bool(is_trim), c_num(t_size), c_num(t_page))
87 }
88}