use std::{path::PathBuf, fs, sync::{Arc, Mutex}}; use threadpool::ThreadPool; use crate::status_reporter::*; // TODO: make this usable // (this module just here to keep old code around for a bit) pub enum Task {} #[allow(unreachable_code, unused)] pub fn batchmode(tasks: Vec<(PathBuf, Task)>) { let pool = ThreadPool::new(16); let results = Arc::new(Mutex::new(vec![])); let printer = Arc::new(StatusReport::new(tasks.len(), tasks.len())); for (path, task) in tasks { pool.execute({ let results = Arc::clone(&results); let printer = Arc::clone(&printer); move || { printer.enter_file(&format!("{path:?}")); let result: anyhow::Result<(PathBuf, String)> = todo!(); results.lock().unwrap().push(result); } }); } pool.join(); println!("\n\nSummary:"); let mut c_errors = 0; let mut c_total = 0; for r in results.lock().unwrap().iter() { match r { Err(e) => { println!(" {}", e); c_errors += 1; }, _ => () } c_total += 1; } println!("\n ({c_total} sites total, {c_errors} errors, generated {} edits)", c_total - c_errors); let edits: Vec<_> = Arc::into_inner(results).unwrap().into_inner().unwrap() .into_iter() .filter_map(|r| r.ok()) .collect(); println!("applying changes ..."); for (filename, content) in edits { fs::write(&filename, content.as_bytes()).unwrap(); // println!("{}", content); } }