diff options
| author | Mroik <mroik@delayed.space> | 2026-02-16 06:12:17 +0100 |
|---|---|---|
| committer | Mroik <mroik@delayed.space> | 2026-02-16 08:00:55 +0100 |
| commit | fd69ce2666d24707ee7b0ab3986632121c03939f (patch) | |
| tree | ee7646ac5ad9cb849469cd7610ab8597f763c0fb | |
| parent | 104872664d6d7f56475a89a11a787aac8b170cec (diff) | |
Minor adjustments
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | Cargo.toml | 7 | ||||
| -rw-r--r-- | src/app.rs | 23 | ||||
| -rw-r--r-- | src/state.rs | 1 |
4 files changed, 19 insertions, 14 deletions
@@ -256,7 +256,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "marika-finger-blaster" -version = "0.0.2" +version = "0.0.4" dependencies = [ "anyhow", "clap", @@ -1,6 +1,6 @@ [package] name = "marika-finger-blaster" -version = "0.0.2" +version = "0.0.4" edition = "2024" [dependencies] @@ -11,3 +11,8 @@ rand = "0.8.5" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" tokio = { version = "1.43.1", features = ["sync", "macros", "rt", "rt-multi-thread", "time"] } + +[profile.release] +strip = true +lto = true +codegen-units = 1 @@ -27,7 +27,7 @@ use crate::{ state::State, }; -pub const TICK_RATE: u64 = 1000 / 20; +pub const TICK_RATE: u64 = 1000 / 60; pub const MIN_TERM_COL: u16 = 40; pub const MIN_TERM_ROW: u16 = 10; const MAX_QUOTE_LINE: u16 = 80; @@ -164,27 +164,28 @@ impl App<'_> { async fn handle_keypress(&mut self, k: char) -> Result<()> { self.state.buffer.push(k); - let buffer_length = self.state.buffer.chars().count(); + self.state.buffer_len += 1; let current_word = self.quote[self.state.current]; let last_byte = self.state.buffer.char_indices().last().unwrap().0; let is_word_completed = self.state.buffer[..last_byte] == *current_word; let is_text_completed = self.state.buffer == current_word && self.state.current == self.quote.len() - 1; - let is_correct = buffer_length <= current_word.chars().count() + let is_correct = self.state.buffer_len <= current_word.chars().count() && self.state.buffer.chars().last().unwrap() - == current_word.chars().nth(buffer_length - 1).unwrap(); + == current_word.chars().nth(self.state.buffer_len - 1).unwrap(); if is_word_completed && k == ' ' { self.state.buffer.clear(); + self.state.buffer_len = 0; self.state.current += 1; } else if is_text_completed { self.running = false; self.completed = true; } else if !is_correct { self.mistake_count += 1; - if buffer_length <= current_word.chars().count() { + if self.state.buffer_len <= current_word.chars().count() { self.mistakes - .insert((self.state.current, buffer_length - 1)); + .insert((self.state.current, self.state.buffer_len - 1)); } } @@ -192,8 +193,9 @@ impl App<'_> { } async fn handle_backspace(&mut self) { - if !self.state.buffer.is_empty() { + if self.state.buffer_len > 0 { self.state.buffer.pop(); + self.state.buffer_len -= 1; } } @@ -340,12 +342,9 @@ impl App<'_> { } async fn start_tick_generator(ev: Sender<Event>) { - loop { - tokio::time::sleep(Duration::from_millis(TICK_RATE)).await; - if ev.is_closed() { - break; - } + while !ev.is_closed() { ev.send(Event::Render).await.unwrap(); + tokio::time::sleep(Duration::from_millis(TICK_RATE)).await; } } diff --git a/src/state.rs b/src/state.rs index f798836..74b39d5 100644 --- a/src/state.rs +++ b/src/state.rs @@ -2,4 +2,5 @@ pub struct State { pub current: usize, pub buffer: String, + pub buffer_len: usize, } |
