aboutsummaryrefslogtreecommitdiff
path: root/src/epub.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/epub.rs')
-rw-r--r--src/epub.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/epub.rs b/src/epub.rs
new file mode 100644
index 0000000..0c0bc74
--- /dev/null
+++ b/src/epub.rs
@@ -0,0 +1,34 @@
+use crate::models::FileEntry;
+use anyhow::Result;
+use reqwest::Client;
+use std::path::Path;
+use tokio::{
+ fs::{self, File},
+ io::AsyncWriteExt,
+};
+
+pub async fn download_all_files(
+ client: &Client,
+ file_entries: &[FileEntry],
+ dest_root: &Path,
+) -> Result<()> {
+ for entry in file_entries {
+ let dest_path = dest_root.join(&entry.full_path);
+
+ if let Some(parent_dir) = dest_path.parent() {
+ fs::create_dir_all(parent_dir).await?;
+ }
+
+ let mut file = File::create(dest_path).await?;
+ let bytes = client
+ .get(&entry.url)
+ .send()
+ .await?
+ .error_for_status()?
+ .bytes()
+ .await?;
+
+ file.write_all(&bytes).await?;
+ }
+ Ok(())
+}