plot/lib/logic/
engine_multiple.rs1use crate::lib::logic::{ConfigJob, ConfigManifest, DocEngine, IoConfig, JobMode, JobSpec, MX, RenderFlags};
2pub struct DocEngineMultiple {
6 pub manifest: ConfigManifest,
7}
8
9impl DocEngineMultiple {
10 pub fn loader_default() -> Result<Self, String> {
16 let manifest = IoConfig::default_config_loader()?;
17 Ok(Self { manifest })
18 }
19
20 pub fn loader_from_toml(path: &str) -> Result<Self, String> {
22 let manifest = IoConfig::config_loader_from(path)?;
23 Ok(Self { manifest })
24 }
25
26 pub fn parse(&self, cfg: &ConfigJob) -> Result<JobSpec, String> { JobSpec::from_config(cfg) }
33
34 pub fn parse_for(&self, id: &str) -> Result<JobSpec, String> {
36 let cfg_job = self
37 .manifest
38 .job
39 .iter()
40 .find(|j| j.id == id)
41 .ok_or_else(|| format!("❌ Nie znaleziono zadania o ID: '{}'", id))?;
42
43 JobSpec::from_config(cfg_job)
44 }
45
46 pub fn jobs(&self) -> Result<(), String> {
52 for cfg_job in &self.manifest.job {
53 let spec = self.parse(cfg_job)?;
54 self.execute_spec(spec)?;
55 }
56 Ok(())
57 }
58
59 pub fn job_id(&self, id: &str) -> Result<(), String> {
61 let spec = self.parse_for(id)?;
62 self.execute_spec(spec)?;
63 Ok(())
64 }
65
66 fn execute_spec(&self, spec: JobSpec) -> Result<(), String> {
72 if !spec.quiet_work {
73 let name = spec.name.as_deref().unwrap_or("Brak nazwy");
74 println!("🚀 Uruchamianie zadania: {} ({})", spec.id, name);
75 }
76
77 let mx_mode = match spec.mode {
79 JobMode::Matched => MX::Matched,
80 JobMode::Mismatched => MX::Mismatched,
81 };
82
83 let mut engine = DocEngine::new(spec.scan.clone()).spec(spec.table.clone());
86
87 if !spec.quiet_work {
89 if let Some(size) = spec.table.trim_size {
90 let page = Some(spec.table.trim_page);
91 engine = engine.view_trimmed(mx_mode, spec.hide_stats, spec.hide_promo, size, page);
92 } else {
93 engine = engine.view(mx_mode, spec.hide_stats, spec.hide_promo);
94 }
95 } else {
96 engine.last_render =
99 Some(RenderFlags { hide_stats: spec.hide_stats, hide_promo: spec.hide_promo, mode: mx_mode });
100 }
101
102 if let Some(sotc_path) = &spec.save_sotc_at {
104 engine = engine.save_structure_of_the_content(sotc_path, spec.title_sotc.as_deref());
105 }
106 if let Some(cots_path) = &spec.save_cots_at {
107 engine = engine.save_content_of_the_structure(cots_path, spec.title_cots.as_deref());
108 }
109
110 let _ = engine;
111
112 if !spec.quiet_work {
113 println!("✨ Ukończono zadanie: {}", spec.id);
114 }
115
116 Ok(())
117 }
118}