diff --git a/src/main.rs b/src/main.rs index 7f34715..8f27e03 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,7 +45,7 @@ fn main() -> Result<(), Error> { } let hash_body = read_to_string(hash_file.clone()).unwrap_or(String::new()); let hash_body: HashFile = toml::from_str(&*hash_body).unwrap_or(HashFile{hashes: HashMap::new()}); - let in_hashes: HashMap = hash_body.hashes.iter().map(|(k, v)| { + let in_hashes: HashMap = hash_body.hashes.par_iter().map(|(k, v)| { let mut array = [0u8; 128]; let decoded = base64::decode(v).unwrap(); let slice = decoded.as_slice(); @@ -81,6 +81,7 @@ fn main() -> Result<(), Error> { println!("Read configuration successfully! Converting markdown files to html..."); let mut posts: Vec = vec![]; + let mut posts_to_index: Vec = vec![]; let input_files: Vec = fs::read_dir(cwd)? .filter(|file| { let file = file.as_ref().unwrap(); @@ -104,21 +105,55 @@ fn main() -> Result<(), Error> { published: NaiveDateTime::parse_from_str(&*settings.published, &*config.time_format) .unwrap(), }; + posts_to_index.push(post.clone()); if in_hashes.get(&*post.id).unwrap_or(&[0; 128]) != &hash || config_update { out_hashes.insert(post.id.clone(), hash); - posts.push(post); + posts.push(post.clone()); } }; let mut write_hashes = in_hashes.clone(); - write_hashes.extend(out_hashes.iter().map(|(k, v)| {(k.clone(), v.clone())})); + write_hashes.par_extend(out_hashes.par_iter().map(|(k, v)| {(k.clone(), v.clone())})); println!("Writing hash table..."); let toml = toml::to_string(&HashFile { hashes: write_hashes.iter().map(|(k, v)| { (k.clone(), base64::encode(v)) }).collect::>()}).unwrap(); let mut file = File::create(hash_file)?; file.write_all(toml.as_bytes())?; + + println!("Writing index..."); + posts_to_index.par_sort_by(|a, b| b.published.cmp(&a.published)); + println!( + "Found {} post lists", + index.select(r#"meta[typeset="index-entry""#).length() + ); + for index_ref in index.select(r#"meta[typeset="index-entry""#).iter() { + let n = index_ref + .attr("content") + .unwrap_or("".to_tendril()) + .parse() + .unwrap_or(0); + let parent = nth_parent(index_ref.clone(), n); + let parent_html = parent.html(); + for post in posts_to_index.iter() { + let html = parent_html.to_string(); + + parent.parent().append_html(html); + nth_children(parent.parent(), n) + .select(r#"meta[typeset="index-entry""#) + .replace_with_html( + format!("{}\n", post.id, post.title).as_str(), + ); + } + parent.parent().children().iter().nth(0).unwrap().remove(); + } + + let output = index.html().to_string(); + let path = out_path.join(PathBuf::from("index.html")); + let mut file = File::create(path)?; + file.write_all(output.as_bytes())?; + if out_hashes.len() == 0 { - println!("Nothing to do"); + println!("Have a nice day :)"); return Ok(()); } println!("Successfully converted to HTML! Creating {} document(s)...", posts.len()); @@ -134,7 +169,7 @@ fn main() -> Result<(), Error> { .unwrap() .replace("$", post.title.as_str()); - element.replace_with_html(format!(r#"{title}"#)); + element.replace_with_html(format!("{}", title)); } "title" => { element.replace_with_html(post.title.to_string()); @@ -154,37 +189,7 @@ fn main() -> Result<(), Error> { let mut file = File::create(path)?; file.write_all(output.as_bytes())?; } - println!("Writing index..."); - posts.par_sort_by(|a, b| b.published.cmp(&a.published)); - println!( - "Found {} post lists", - index.select(r#"meta[typeset="index-entry""#).length() - ); - for index_ref in index.select(r#"meta[typeset="index-entry""#).iter() { - let n = index_ref - .attr("content") - .unwrap_or("".to_tendril()) - .parse() - .unwrap_or(0); - let parent = nth_parent(index_ref.clone(), n); - let parent_html = parent.html(); - for post in posts.iter() { - let html = parent_html.to_string(); - parent.parent().append_html(html); - nth_children(parent.parent(), n) - .select(r#"meta[typeset="index-entry""#) - .replace_with_html( - format!("{}\n", post.id, post.title).as_str(), - ); - } - parent.parent().children().iter().nth(0).unwrap().remove(); - } - - let output = index.html().to_string(); - let path = out_path.join(PathBuf::from("index.html")); - let mut file = File::create(path)?; - file.write_all(output.as_bytes())?; println!("Have a nice day :)"); Ok(()) }