mirror of
https://github.com/thegeneralist01/archivr
synced 2026-03-07 11:39:55 +01:00
feat: add local file downloader
Supports file:// URLs for archiving local files.
This commit is contained in:
parent
60727c0f1e
commit
935729ac93
1 changed files with 28 additions and 0 deletions
28
src/downloader/local.rs
Normal file
28
src/downloader/local.rs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
use anyhow::{Context, Result, bail};
|
||||
use std::{path::Path, process::Command};
|
||||
|
||||
use crate::hash::hash_file;
|
||||
|
||||
pub fn save(path: String, store_path: &Path, timestamp: &String) -> Result<String> {
|
||||
println!("Saving path: {path}");
|
||||
|
||||
let temp_dir = store_path.join("temp").join(timestamp);
|
||||
std::fs::create_dir_all(&temp_dir)?;
|
||||
|
||||
let in_file = Path::new(path.trim_start_matches("file://"));
|
||||
let extension = in_file
|
||||
.extension()
|
||||
.map_or(String::new(), |ext| format!(".{}", ext.to_string_lossy()));
|
||||
let out_file = temp_dir.join(format!("{timestamp}{extension}"));
|
||||
|
||||
let mut binding = Command::new("cp");
|
||||
let cmd = binding.arg(in_file).arg(&out_file);
|
||||
let out = cmd.output().with_context(|| "failed to spawn cp process")?;
|
||||
|
||||
if !out.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&out.stderr);
|
||||
bail!("yt-dlp failed: {stderr}");
|
||||
}
|
||||
|
||||
hash_file(&out_file)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue