Skip to main content

plot/lib/job/
step2.rs

1use crate::lib::{
2	job::{self, ValidResultMainRow},
3	logic,
4};
5// ============================================================================
6// STRUKTURA WYJŚCIOWA (Transport do kolejnych etapów)
7// ============================================================================
8
9#[derive(Debug, Clone)]
10pub struct FormattedRow {
11	pub raw: ValidResultMainRow, // Zachowujemy oryginał do sortowania (Step 3) i limitowania (Step 4)
12	pub cells: Vec<String>,      // Sformatowane kolumny, każda jako niezależny String (dla Step 5)
13}
14
15// ============================================================================
16// FORMATTER (Step 2)
17// ============================================================================
18
19pub fn engine_step2_data_formater(
20	j: &job::ValidPreparedJobConfig,
21	tab: &job::ValidResultMainTab, // ⚡ Zmiana typu
22) -> Vec<FormattedRow> {
23	let item_cfg = &j.item;
24	let col_cfg = &j.cols;
25	let date_cfg = &j.date;
26	let time_cfg = &j.time;
27	let size_cfg = &j.size;
28
29	let total_rows = tab.rows.len();
30	let num_width = total_rows.to_string().len();
31
32	let mut formatted_table = Vec::with_capacity(total_rows);
33
34	for (i, row) in tab.rows.iter().enumerate() {
35		// ⚡ Iterujemy po tab.rows
36		let mut cells = Vec::with_capacity(col_cfg.columns.len());
37
38		for col in &col_cfg.columns {
39			let cell_str = match col {
40				job::ValidTableColumnsParse::Date => date_cfg.format_date(row.dt_modified),
41				job::ValidTableColumnsParse::Time => time_cfg.format_time(row.dt_modified),
42				job::ValidTableColumnsParse::Size => size_cfg.format_size(row.size_real),
43				job::ValidTableColumnsParse::Item => {
44					let u_params = (i, num_width, tab.tier_max, tab.name_len_max);
45					item_cfg.format_item(u_params, row, &tab.rows)
46				}
47				job::ValidTableColumnsParse::Path => {
48					let mut p_str = row.node.path.str.clone();
49
50					// ⚡ PROPAGACJA: Jeśli Item ma włączone wyrównanie (ws-show), wyrównujemy też ścieżkę
51					if item_cfg.align_end {
52						let padding = tab.path_len_max.saturating_sub(p_str.chars().count());
53						p_str.push_str(&" ".repeat(padding));
54					}
55					p_str
56				}
57			};
58			cells.push(cell_str);
59		}
60
61		if job::IS_DEBUG {
62			let type_node = match row.node.node {
63				logic::NodeIs::Dir => "📂",
64				logic::NodeIs::File => "📃",
65			};
66			// id_self (formatujemy jako [ 🆔 XXX ]) &&  id_path (formatujemy jako wektor ID [0, 1, ...])
67			cells.push(format!("🆔{}[{:?}] 🔙📂{:?}", type_node, row.node.id_self, row.node.id_path));
68		}
69
70		formatted_table.push(FormattedRow { raw: row.clone(), cells });
71	}
72
73	formatted_table
74}
75
76// ============================================================================
77// HELPERY FORMATUJĄCE
78// ============================================================================