arhivach-downloader

Download arhivach.vc threads
git clone https://git.ea.contact/arhivach-downloader
Log | Files | Refs | README

commit 749dd8a7032b747281c3abb7e6cb07e1262abe08
parent d724ff5343a37b9c470ddb8ed6fbf632be939d86
Author: egor-achkasov <eaachkasov@gmail.com>
Date:   Mon, 23 Feb 2026 15:55:24 +0000

Add resume flag

Diffstat:
Msrc/export.rs | 20++++++++++++++++++--
Msrc/parse_args.rs | 10++++++++--
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, }) }