learn-hieroglyphs/src/db.rs

63 lines
2.0 KiB
Rust

use rusqlite::Connection;
use std::{fs, io::ErrorKind, path::PathBuf, sync::RwLock};
pub static PROGRAM_HOME_PATH: RwLock<std::string::String> = RwLock::new(String::new());
pub static DB_PATH: RwLock<std::string::String> = RwLock::new(String::new());
pub static IMAGES_STORE_PATH: RwLock<std::string::String> = RwLock::new(String::new());
pub fn init() {
let program_home_path = if cfg!(target_os = "windows") {
let binding = std::env::var("APP_DATA").expect("No APP_DATA directory");
let appdata = PathBuf::from(&binding);
appdata.join("learn-hieroglyph")
} else {
let binding = std::env::var("HOME").expect("No HOME directory");
let home = PathBuf::from(&binding);
home.join(".config/learn-hieroglyph")
};
match fs::create_dir_all(&program_home_path) {
Ok(_) => {},
Err(error) => match error.kind() {
ErrorKind::AlreadyExists => {},
_ => panic!("Could not create app home folder: {}", &program_home_path.to_str().unwrap())
}
};
let mut binding = PROGRAM_HOME_PATH.write().unwrap();
*binding = program_home_path.as_path().to_str().unwrap().to_string();
let db_path = program_home_path.join("db.sqlite");
let mut binding = DB_PATH.write().unwrap();
*binding = db_path.as_path().to_str().unwrap().to_string();
let images_store_path = program_home_path.join("images/");
let mut binding = IMAGES_STORE_PATH.write().unwrap();
*binding = images_store_path.as_path().to_str().unwrap().to_string();
let connection = Connection::open(db_path).unwrap();
connection.execute("CREATE TABLE IF NOT EXISTS cards (
id INTEGER PRIMARY KEY AUTOINCREMENT,
imagename CHAR(64),
hieroglyph VARCHAR(2),
reading VARCHAR(128)
)",()).unwrap();
}
pub fn get_program_home_path() -> String {
(*PROGRAM_HOME_PATH.read().unwrap()).clone()
}
pub fn get_db_path() -> String {
(*DB_PATH.read().unwrap()).clone()
}
pub fn get_images_store_path() -> String {
(*IMAGES_STORE_PATH.read().unwrap()).clone()
}