From 3adf3f9697c4e2beb10e652947046d5fddda2ed4 Mon Sep 17 00:00:00 2001 From: Joris Date: Sat, 12 Feb 2022 16:57:19 +0100 Subject: Say when the next card will be available --- src/gui/gui.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/gui/gui.rs') diff --git a/src/gui/gui.rs b/src/gui/gui.rs index fdf686b..88333bb 100644 --- a/src/gui/gui.rs +++ b/src/gui/gui.rs @@ -1,11 +1,12 @@ -use crate::{db::db, gui::question, space_repetition, util::event::Events}; +use crate::util::time; +use crate::{db::db, gui::message, gui::question, space_repetition, util::event::Events}; use anyhow::Result; use rusqlite::Connection; use std::io; use termion::{raw::IntoRawMode, screen::AlternateScreen}; use tui::{backend::TermionBackend, Terminal}; -pub fn start(conn: &Connection) -> Result<()> { +pub fn start(conn: &Connection, deck_name: &String) -> Result<()> { let stdout = io::stdout().into_raw_mode()?; let stdout = AlternateScreen::from(stdout); let backend = TermionBackend::new(stdout); @@ -14,17 +15,28 @@ pub fn start(conn: &Connection) -> Result<()> { let events = Events::new(); loop { - match db::pick_ready(&conn) { - Some(card) => { - let difficulty = - question::ask(&mut terminal, &events, &card, "German".to_string())?; + let now = time::now()?; + + match db::next_ready(&conn) { + Some(card) if card.ready <= now => { + let difficulty = question::ask(&mut terminal, &events, &card, deck_name)?; db::update( &conn, &card.question, &space_repetition::update(card.state, difficulty), )?; } + Some(card) => { + let message = format!( + "Prochaine carte disponible dans {}.", + time::pp_duration(card.ready - now) + ); + let _ = message::show(&mut terminal, &events, &message, deck_name); + break; + } None => { + let message = format!("Aucune carte n’est disponible. Votre deck est-il vide ?"); + let _ = message::show(&mut terminal, &events, &message, deck_name); break; } } -- cgit v1.2.3