diff --git a/.vscode/settings.json b/.vscode/settings.json index 10da6ac..deca29b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,6 +20,7 @@ "reqwest", "royalroad", "tempdir", + "tempfile", "thiserror", "ureq" ] diff --git a/src/file_system_crap.rs b/src/file_system_crap.rs index f500dfe..aa05ba2 100644 --- a/src/file_system_crap.rs +++ b/src/file_system_crap.rs @@ -34,10 +34,7 @@ pub fn setup_html2xhtml() -> Result { #[cfg(target_os = "windows")] { const HTML2XHTML: &[u8; 245025] = include_bytes!("../html2xhtml-windows.zip"); // This will not compile on windows due to this and no I don't give a shit. // Compile it on linux for windows like a sane person. - let html2xhtml_temp_dir = match TempDir::new() { - Ok(temp_dir) => temp_dir, - Err(error) => return Err(GenerationError::TempDirCreationError {error}), - }; + let html2xhtml_temp_dir = create_temp_dir()?; match zip_extract::extract(Cursor::new(HTML2XHTML), html2xhtml_temp_dir.path(), true) { Ok(_) => (), @@ -49,10 +46,7 @@ pub fn setup_html2xhtml() -> Result { #[cfg(target_os = "linux")] { const HTML2XHTML: &[u8; 186938] = include_bytes!("../html2xhtml-linux.zip"); - let html2xhtml_temp_dir = match TempDir::new() { - Ok(temp_dir) => temp_dir, - Err(error) => return Err(GenerationError::TempDirCreationError {error}), - }; + let html2xhtml_temp_dir = create_temp_dir()?; match zip_extract::extract(Cursor::new(HTML2XHTML), html2xhtml_temp_dir.path(), true) { Ok(_) => (), @@ -71,11 +65,19 @@ pub fn setup_html2xhtml() -> Result { Err(GenerationError::OsUnsupportedError {os: misc::Oses::OtherUnknownOs}) } -/// Delete html2xhtml from the operating system's temp directory. -pub fn delete_html2xhtml(html2xhtml_dir: TempDir) { - let temp_dir_path = html2xhtml_dir.path().to_path_buf(); +/// Function to create a temporary directory. +fn create_temp_dir() -> Result { + match TempDir::new() { + Ok(temp_dir) => return Ok(temp_dir), + Err(error) => return Err(GenerationError::TempDirCreationError {error}), + } +} - match html2xhtml_dir.close() { +/// Delete a temporary directory. +pub fn delete_temp_dir(temp_dir: TempDir) { + let temp_dir_path = temp_dir.path().to_path_buf(); + + match temp_dir.close() { Ok(_) => (), Err(warning) => { let warning = Warning::TempDirDeletionError { diff --git a/src/library.rs b/src/library.rs index fa8482e..8e6c399 100644 --- a/src/library.rs +++ b/src/library.rs @@ -124,7 +124,7 @@ pub fn generate_epub(epub_args: EpubArgs, book_url: Url, output_directory: PathB epub_builder.inline_toc(); // Setup html2xhtml on the operating system. - let html2xhtml_dir = file_system_crap::setup_html2xhtml()?; + let html2xhtml_temp_dir = file_system_crap::setup_html2xhtml()?; let mut old_tags_new_tags: HashMap = HashMap::new(); @@ -165,7 +165,7 @@ pub fn generate_epub(epub_args: EpubArgs, book_url: Url, output_directory: PathB let xhtml: String; if epub_args.no_images { - xhtml = html_to_xhtml(string_to_html_fragment(&remove_image_tags(&chapter.isolated_chapter_html)), &html2xhtml_dir)? + xhtml = html_to_xhtml(string_to_html_fragment(&remove_image_tags(&chapter.isolated_chapter_html)), &html2xhtml_temp_dir)? } else { let mut replaced_html = chapter.isolated_chapter_html.html(); @@ -173,7 +173,7 @@ pub fn generate_epub(epub_args: EpubArgs, book_url: Url, output_directory: PathB replaced_html = replaced_html.replace(&old_img_tag.clone(), &old_tags_new_tags[old_img_tag]); } - xhtml = html_to_xhtml(string_to_html_fragment(&replaced_html), &html2xhtml_dir)?; + xhtml = html_to_xhtml(string_to_html_fragment(&replaced_html), &html2xhtml_temp_dir)?; } epub_builder.add_content(EpubContent::new(format!("chapter_{}.xhtml", i+1), xhtml.as_bytes()) @@ -199,7 +199,7 @@ pub fn generate_epub(epub_args: EpubArgs, book_url: Url, output_directory: PathB .expect(format!("Unable to write finished epub data to {0}", output_path.to_string_lossy()).as_str()); // Delete the html2xhtml temp directory. It's good to clean up after yourself. - file_system_crap::delete_html2xhtml(html2xhtml_dir); + file_system_crap::delete_temp_dir(html2xhtml_temp_dir); Ok(WARNINGS.lock().unwrap()) }