mod db; mod deck; mod gui; mod model; mod space_repetition; mod sync; mod util; use crate::util::event::Events; use anyhow::Result; use std::path::PathBuf; use structopt::StructOpt; #[derive(StructOpt)] #[structopt()] struct Opt { #[structopt(long, default_value = "deck.deck")] deck: String, } fn main() -> Result<()> { let deck_path = Opt::from_args().deck; let mut conn = db::init(db_path(&deck_path))?; let deck_name = deck::pp_from_path(&deck_path).unwrap_or_else(|| "Deck".to_string()); sync::run(&mut conn, &deck_path)?; let mut term = gui::terminal()?; let events = Events::new(); match gui::start(&conn, &mut term, &events, &deck_name) { Ok(()) => Ok(()), Err(msg) => { // Show errors in TUI, otherwise they are hidden gui::message::show(&mut term, &events, &deck_name, &format!("{msg}"), true)?; Err(msg) } } } fn db_path(deck_path: &str) -> String { let mut path = PathBuf::from(deck_path); path.set_extension("db"); path.to_string_lossy().to_string() }