111 lines
4.1 KiB
Rust
111 lines
4.1 KiB
Rust
#[allow(warnings)]
|
|
fn main() {
|
|
use doe::*;
|
|
if (args!().len() == 1 && &args!()[0] == "-h") || args!().len() < 1 {
|
|
println!("Usage:");
|
|
println!("cargo r -- -h => display help");
|
|
println!("cargo r -- deploy => deploy to gitee");
|
|
println!("cargo r -- get_img => get all images to blog_images repo");
|
|
} else if args!().len() == 1 && &args!()[0] == "get_img" {
|
|
let repo_path = "./src/posts";
|
|
doe::fs::fs::walk_dir(repo_path)
|
|
.unwrap()
|
|
.iter()
|
|
.for_each(|p| {
|
|
if p.display().to_string().ends_with("md"){
|
|
let mut new_lines = vec![];
|
|
std::fs::read_to_string(p).unwrap().split_to_vec("\n").iter().for_each(|line|{
|
|
if line.contains(".image") && line.contains("p3-juejin.byteimg"){
|
|
if let Some(url) = extract_image_url(line){
|
|
let file_name = url.split("/").last().unwrap().replace(".image", ".png");
|
|
download_image(&url, &"../blog_images/all_imgs/".push_back(file_name.clone()));
|
|
let ll = line.replace(&url, &"https://gitcode.net/dnrops/blog_images/-/raw/main/all_imgs/".push_back(file_name));
|
|
new_lines.push(ll);
|
|
}
|
|
}else{
|
|
new_lines.push(line.to_string());
|
|
}
|
|
});
|
|
std::fs::write(p, new_lines.join("\n")).unwrap();
|
|
}
|
|
});
|
|
} else if args!().len() == 1 && &args!()[0] == "deploy" {
|
|
system("mdbook build").unwrap();
|
|
let deploy_path = "D:\\CODE\\gitlink_code\\dnrops.gitlink.net";
|
|
doe::fs::fs::walk_dir(deploy_path)
|
|
.unwrap()
|
|
.iter()
|
|
.for_each(|p| {
|
|
if p.starts_with("D:\\CODE\\gitlink_code\\dnrops.gitlink.net\\.git\\") {
|
|
} else {
|
|
doe::remove_file_or_folder!(p);
|
|
}
|
|
});
|
|
// frist cretae dirs
|
|
doe::fs::fs::walk_dir("./book")
|
|
.unwrap()
|
|
.iter()
|
|
.for_each(|p| {
|
|
if p.is_dir() {
|
|
doe::fs::fs::move_folder(
|
|
p,
|
|
&deploy_path
|
|
.to_path_buf()
|
|
.join(p.strip_prefix("./book").unwrap()),
|
|
)
|
|
.unwrap();
|
|
}
|
|
});
|
|
// secondary move files
|
|
doe::fs::fs::walk_dir("./book")
|
|
.unwrap()
|
|
.iter()
|
|
.for_each(|p| {
|
|
if !p.is_dir() {
|
|
doe::fs::fs::move_file(
|
|
p,
|
|
&deploy_path
|
|
.to_path_buf()
|
|
.join(p.strip_prefix("./book").unwrap()),
|
|
)
|
|
.unwrap();
|
|
}
|
|
});
|
|
// push blog
|
|
system("ppush new").unwrap();
|
|
|
|
std::env::set_current_dir(deploy_path).unwrap();
|
|
// push page
|
|
system("ppush new").unwrap();
|
|
}
|
|
}
|
|
|
|
#[allow(warnings)]
|
|
fn download_image(url: &str, save_path: &str) {
|
|
use std::io::Write;
|
|
let mut resp = reqwest::blocking::get(url).unwrap();
|
|
let buf = resp.bytes().unwrap().to_vec();
|
|
let mut file = std::fs::File::create(save_path).unwrap();
|
|
file.write_all(&buf).unwrap();
|
|
println!("{},done!", url);
|
|
}
|
|
#[allow(warnings)]
|
|
fn extract_image_url(input: &str) -> Option<String> {
|
|
// Extract the URL between parentheses
|
|
let re = regex::Regex::new(r"\(([^)]+)\)").unwrap();
|
|
if let Some(captures) = re.captures(input) {
|
|
let url_str = captures.get(1).unwrap().as_str();
|
|
|
|
// Parse the URL using the `url` crate
|
|
let mut url = url::Url::parse(url_str).ok()?;
|
|
|
|
// Remove the query parameters and anchor tag
|
|
url.set_query(None);
|
|
url.set_fragment(None);
|
|
|
|
Some(url.to_string())
|
|
} else {
|
|
None
|
|
}
|
|
}
|