diff options
Diffstat (limited to 'src/gui')
| -rw-r--r-- | src/gui/mod.rs | 18 | ||||
| -rw-r--r-- | src/gui/question.rs | 12 | 
2 files changed, 21 insertions, 9 deletions
| diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 92cd943..3599df8 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -51,13 +51,17 @@ pub fn start(conn: &Connection, term: &mut Term, events: &Events, deck_name: &st          match db::pick_random_ready(conn) {              Some(card) => { -                let difficulty = question::ask(term, events, &title, &card)?; -                answers += 1; -                db::update( -                    conn, -                    &card.question, -                    &space_repetition::update(card.state, difficulty), -                )?; +                match question::ask(term, events, &title, &card)? { +                    question::Response::Aborted => break, +                    question::Response::Answered { difficulty } => { +                        answers += 1; +                        db::update( +                            conn, +                            &card.question, +                            &space_repetition::update(card.state, difficulty), +                        )?; +                    } +                }              }              None => {                  let message = match db::next_ready(conn) { diff --git a/src/gui/question.rs b/src/gui/question.rs index 27759f8..8f9ee19 100644 --- a/src/gui/question.rs +++ b/src/gui/question.rs @@ -25,12 +25,17 @@ enum Answer {      Difficulty { difficulty: Difficulty },  } +pub enum Response { +    Aborted, +    Answered { difficulty: Difficulty }, +} +  pub fn ask<B: Backend>(      terminal: &mut Terminal<B>,      events: &Events,      title: &str,      card: &Card, -) -> Result<Difficulty> { +) -> Result<Response> {      let mut state = State {          input: String::new(),          answer: Answer::Write, @@ -155,6 +160,9 @@ pub fn ask<B: Backend>(                              state.input = format!("{}{}", words.join(" "), if words.len() > 0 {" " } else {""});                          }                      } +                    Key::Ctrl('c') => { +                        return Ok(Response::Aborted); +                    }                      _ => {}                  },                  Answer::Difficulty { @@ -171,7 +179,7 @@ pub fn ask<B: Backend>(                              state.answer = Answer::Difficulty { difficulty: *d }                          }                      } -                    Key::Char('\n') => return Ok(selected), +                    Key::Char('\n') => return Ok(Response::Answered { difficulty: selected }),                      _ => {}                  },              } | 
