Skip to main content

gutenberg_rs/
lib.rs

1#![doc = include_str!("../README.md")]
2use crate::error::Error;
3use sqlite_cache::SQLiteCache;
4
5use settings::GutenbergCacheSettings;
6use utils::{decompress_tar_bz, download_file};
7
8mod book;
9mod fst_parser_file_node;
10mod fst_parser_node;
11mod fst_parser_or_node;
12mod utils;
13
14pub mod error;
15pub mod rdf_parser;
16pub mod settings;
17pub mod sqlite_cache;
18pub mod text_get;
19
20pub mod fst_parser;
21pub mod fst_parser_type;
22
23pub async fn setup_sqlite(
24    settings: &GutenbergCacheSettings,
25    force_regenerate: bool,
26    show_progress_bar: bool,
27) -> Result<SQLiteCache, Error> {
28    let archive_exists = std::path::Path::new(&settings.cache_rdf_archive_name).exists();
29    if !archive_exists || force_regenerate {
30        if archive_exists {
31            std::fs::remove_file(&settings.cache_rdf_archive_name)?;
32        }
33        download_file(
34            &settings.cache_rdf_download_link,
35            &settings.cache_rdf_archive_name,
36            show_progress_bar,
37        )
38        .await?;
39    }
40
41    let cache_folder_exists = std::path::Path::new(&settings.cache_rdf_unpack_directory).exists();
42
43    if !cache_folder_exists || force_regenerate {
44        if cache_folder_exists {
45            std::fs::remove_file(&settings.cache_rdf_unpack_directory)?;
46        }
47        decompress_tar_bz(&settings.cache_rdf_archive_name, show_progress_bar)?;
48    }
49
50    match SQLiteCache::get_cache(settings) {
51        Ok(cache) => Ok(cache),
52        Err(_e) => {
53            let parse_result =
54                rdf_parser::parse_rdfs_from_folder(&settings.cache_rdf_unpack_directory, true)?;
55            SQLiteCache::create_cache(&parse_result, settings, false, show_progress_bar)
56        }
57    }
58}