diff options
| author | A Farzat <a@farzat.xyz> | 2026-03-03 11:10:03 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-03-03 11:22:00 +0300 |
| commit | 6aad662ec59a3974cbca6c423c1e08e8bc5e90f6 (patch) | |
| tree | eb97ccab865cec7ac530a4c0d2d63f9dfd4c3867 | |
| parent | b0035a511b13b03c4c73b0cfad488dbab541e01e (diff) | |
| download | oreilly-epub-6aad662ec59a3974cbca6c423c1e08e8bc5e90f6.tar.gz oreilly-epub-6aad662ec59a3974cbca6c423c1e08e8bc5e90f6.zip | |
Add a function to write mimetype
| -rw-r--r-- | src/epub.rs | 8 | ||||
| -rw-r--r-- | src/main.rs | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/epub.rs b/src/epub.rs index 0c0bc74..f216567 100644 --- a/src/epub.rs +++ b/src/epub.rs @@ -7,6 +7,14 @@ use tokio::{ io::AsyncWriteExt, }; +/// Creates and writes the mimetype. Assumes dest_root already exists. +pub async fn write_mimetype(dest_root: &Path) -> Result<()> { + let dest_path = dest_root.join("mimetype"); + let mut file = File::create(dest_path).await?; + file.write_all(b"application/epub+zip").await?; + Ok(()) +} + pub async fn download_all_files( client: &Client, file_entries: &[FileEntry], diff --git a/src/main.rs b/src/main.rs index ed73ec7..6e9e6dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ mod models; use std::collections::HashMap; use std::path::Path; -use crate::epub::download_all_files; +use crate::epub::{download_all_files, write_mimetype}; use crate::http_client::build_authenticated_client; use crate::models::{Chapter, EpubResponse, FileEntry, Paginated, SpineItem, TocNode}; use anyhow::{Context, Result, ensure}; @@ -121,6 +121,7 @@ async fn main() -> Result<()> { let dest_root = format!("Books/{}/epub_root", args.bookid); let dest_root = Path::new(&dest_root); download_all_files(&client, &file_entries, dest_root).await?; + write_mimetype(dest_root).await?; // Sanity check: Every entry in spine exists in chapters. let chapters: HashMap<String, Chapter> = |
