commit 749dd8a7032b747281c3abb7e6cb07e1262abe08
parent d724ff5343a37b9c470ddb8ed6fbf632be939d86
Author: egor-achkasov <eaachkasov@gmail.com>
Date: Mon, 23 Feb 2026 15:55:24 +0000
Add resume flag
Diffstat:
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/export.rs b/src/export.rs
@@ -59,10 +59,22 @@ pub fn export2html(posts: &[Post], config: &Config) -> Result<()> {
.join("\n");
if config.files {
- download_assets(&posts, &format!("{}/files", dir), "files", |f| &f.url)?;
+ download_assets(
+ &posts,
+ &format!("{}/files", dir),
+ "files",
+ |f| &f.url,
+ config.resume,
+ )?;
}
if config.thumb {
- download_assets(&posts, &format!("{}/thumb", dir), "thumbnails", |f| &f.url_thumb)?;
+ download_assets(
+ &posts,
+ &format!("{}/thumb", dir),
+ "thumbnails",
+ |f| &f.url_thumb,
+ config.resume,
+ )?;
}
const TEMPLATE: &'static str = include_str!("../template.html");
@@ -167,6 +179,7 @@ fn download_assets(
dest_dir: &str,
label: &str,
url_of: impl Fn(&crate::file::File) -> &str,
+ skip_if_exists: bool,
) -> Result<()> {
use std::io::Write;
@@ -180,6 +193,9 @@ fn download_assets(
let url = url_of(f);
let filename = url.split('/').last().unwrap_or("");
let path = format!("{}/{}", dest_dir, filename);
+ if skip_if_exists && std::path::Path::new(&path).exists() {
+ continue;
+ }
let mut result = Err(anyhow::anyhow!("no attempts"));
for _ in 0..3 {
result = download(url, &path);
diff --git a/src/parse_args.rs b/src/parse_args.rs
@@ -6,7 +6,8 @@ use std::path::PathBuf;
pub struct Config{
pub urls: Vec<String>,
pub thumb: bool,
- pub files: bool
+ pub files: bool,
+ pub resume: bool,
}
pub fn parse_args() -> Result<Config> {
@@ -27,6 +28,10 @@ pub fn parse_args() -> Result<Config> {
/// Download files (images, videos, gifs, etc), default: false
#[arg(short = 'f', long = "files", default_value_t = false)]
files: bool,
+
+ /// Resume files and thumbnails downloading instead of overwriting. Useless if neither -t nor -f are set, default: false
+ #[arg(short = 'r', long = "resume", default_value_t = false)]
+ resume: bool
}
let cli = Cli::parse();
@@ -48,6 +53,7 @@ pub fn parse_args() -> Result<Config> {
Ok(Config {
urls,
thumb: cli.thumb,
- files: cli.files
+ files: cli.files,
+ resume: cli.resume,
})
}