plot/lib/mapping/
engine_cli.rs1use std::path::PathBuf;
2
3use crate::lib::{
4 core::{print_help_for_pattern_syntax_and_semantics, print_help_for_toml_config, start, start_blank},
5 logic::file_save_safe_if_changed,
6 mapping::{prepare, translate},
7 schema::{RawCliJob, ReadyJob},
8};
9
10pub fn route_and_execute<F>(cli: RawCliJob, mut execute_pipeline: F)
12where F: FnMut(&ReadyJob) -> bool {
14 if cli.help_for_pattern {
18 print_help_for_pattern_syntax_and_semantics();
19 return;
20 }
21
22 if cli.help_for_config {
26 print_help_for_toml_config();
27 return;
28 }
29
30 if let Some(path_to_show) = &cli.jobs_load_only_show {
34 let path_opt = if path_to_show.is_empty() { None } else { Some(PathBuf::from(path_to_show)) };
35 let s = start(path_opt);
36 s.get_jobs(|job_raw| {
37 let desc = job_raw.description.as_deref().unwrap_or("---");
38 println!(" [ID: {}] Opis: {}", job_raw.id, desc);
39 });
40 return;
41 }
42
43 if let Some(path_to_load) = &cli.jobs_load {
47 let path_opt = if path_to_load.is_empty() { None } else { Some(PathBuf::from(path_to_load)) };
48 let s = start(path_opt);
49 let mut successful_jobs_toml = String::new();
50
51 if let Some(ids) = &cli.task_id {
52 s.get_jobs_some(ids, |job_raw| {
53 let job = prepare(job_raw.clone());
54 if execute_pipeline(&job) {
56 successful_jobs_toml.push_str("\n");
57 successful_jobs_toml.push_str(&job.insert_as_toml());
58 }
59 });
60 } else {
61 s.get_jobs(|job_raw| {
62 let job = prepare(job_raw.clone());
63 if execute_pipeline(&job) {
65 successful_jobs_toml.push_str("\n");
66 successful_jobs_toml.push_str(&job.insert_as_toml());
67 }
68 });
69 }
70
71 dump_last_successful_jobs(&s, &successful_jobs_toml);
72 return;
73 }
74
75 if cli.job_blank {
79 let s = start_blank(None);
80 let mut successful_jobs_toml = String::new();
81
82 if cli.speed {
83 println!("⚙️ Tryb: SZYBKI (Fast Manual)");
87
88 s.get_jobs(|job_blank_like_raw_toml| {
89 let job_raw_cli = translate(job_blank_like_raw_toml.clone(), &cli);
92 let job = prepare(job_raw_cli);
93
94 if execute_pipeline(&job) {
95 successful_jobs_toml.push_str("\n");
96 successful_jobs_toml.push_str(&job.insert_as_toml());
97 }
98 });
99 } else {
100 println!("⚙️ Tryb: PEŁNY (Full Manual)");
104
105 s.get_jobs(|job_blank_like_raw_toml| {
106 let job_raw_cli = translate(job_blank_like_raw_toml.clone(), &cli);
107 let job = prepare(job_raw_cli);
108
109 if execute_pipeline(&job) {
110 successful_jobs_toml.push_str("\n");
111 successful_jobs_toml.push_str(&job.insert_as_toml());
112 }
113 });
114 }
115
116 dump_last_successful_jobs(&s, &successful_jobs_toml);
117 return;
118 }
119}
120
121fn dump_last_successful_jobs(runtime: &crate::lib::core::AnchoredRuntime, jobs_toml_content: &str) {
124 if jobs_toml_content.is_empty() {
126 return;
127 }
128
129 let mut out_path = runtime.path_xdo().to_path_buf();
130 out_path.set_file_name("CargoPlotLast.toml");
131
132 let mut final_content = String::from("# Automatyczny zapis poprawnie wykonanych zadań (ReadyJob)\n");
133 final_content.push_str(jobs_toml_content);
134
135 file_save_safe_if_changed(&out_path, &final_content);
137
138 println!("💾 Zapisano recepturę zadania.");
139 println!("📂 Ścieżka zapisu: {}", out_path.display());
140}