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}