use std::path::PathBuf;
use crate::lib::{
core::{print_help_for_pattern_syntax_and_semantics, print_help_for_toml_config, start, start_blank},
logic::file_save_safe_if_changed,
mapping::{prepare, translate},
schema::{RawCliJob, ReadyJob},
};
pub fn route_and_execute<F>(cli: RawCliJob, mut execute_pipeline: F)
where F: FnMut(&ReadyJob) -> bool {
if cli.help_for_pattern {
print_help_for_pattern_syntax_and_semantics();
return;
}
if cli.help_for_config {
print_help_for_toml_config();
return;
}
if let Some(path_to_show) = &cli.jobs_load_only_show {
let path_opt = if path_to_show.is_empty() { None } else { Some(PathBuf::from(path_to_show)) };
let s = start(path_opt);
s.get_jobs(|job_raw| {
let desc = job_raw.description.as_deref().unwrap_or("---");
println!(" [ID: {}] Opis: {}", job_raw.id, desc);
});
return;
}
if let Some(path_to_load) = &cli.jobs_load {
let path_opt = if path_to_load.is_empty() { None } else { Some(PathBuf::from(path_to_load)) };
let s = start(path_opt);
let mut successful_jobs_toml = String::new();
if let Some(ids) = &cli.task_id {
s.get_jobs_some(ids, |job_raw| {
let job = prepare(job_raw.clone());
if execute_pipeline(&job) {
successful_jobs_toml.push_str("\n");
successful_jobs_toml.push_str(&job.insert_as_toml());
}
});
} else {
s.get_jobs(|job_raw| {
let job = prepare(job_raw.clone());
if execute_pipeline(&job) {
successful_jobs_toml.push_str("\n");
successful_jobs_toml.push_str(&job.insert_as_toml());
}
});
}
dump_last_successful_jobs(&s, &successful_jobs_toml);
return;
}
if cli.job_blank {
let s = start_blank(None);
let mut successful_jobs_toml = String::new();
if cli.speed {
println!("⚙️ Tryb: SZYBKI (Fast Manual)");
s.get_jobs(|job_blank_like_raw_toml| {
let job_raw_cli = translate(job_blank_like_raw_toml.clone(), &cli);
let job = prepare(job_raw_cli);
if execute_pipeline(&job) {
successful_jobs_toml.push_str("\n");
successful_jobs_toml.push_str(&job.insert_as_toml());
}
});
} else {
println!("⚙️ Tryb: PEŁNY (Full Manual)");
s.get_jobs(|job_blank_like_raw_toml| {
let job_raw_cli = translate(job_blank_like_raw_toml.clone(), &cli);
let job = prepare(job_raw_cli);
if execute_pipeline(&job) {
successful_jobs_toml.push_str("\n");
successful_jobs_toml.push_str(&job.insert_as_toml());
}
});
}
dump_last_successful_jobs(&s, &successful_jobs_toml);
return;
}
}
fn dump_last_successful_jobs(runtime: &crate::lib::core::AnchoredRuntime, jobs_toml_content: &str) {
if jobs_toml_content.is_empty() {
return;
}
let mut out_path = runtime.path_xdo().to_path_buf();
out_path.set_file_name("CargoPlotLast.toml");
let mut final_content = String::from("# Automatyczny zapis poprawnie wykonanych zadań (ReadyJob)\n");
final_content.push_str(jobs_toml_content);
file_save_safe_if_changed(&out_path, &final_content);
println!("💾 Zapisano recepturę zadania.");
println!("📂 Ścieżka zapisu: {}", out_path.display());
}