From fd69ce2666d24707ee7b0ab3986632121c03939f Mon Sep 17 00:00:00 2001 From: Mroik Date: Mon, 16 Feb 2026 06:12:17 +0100 Subject: Minor adjustments --- Cargo.lock | 2 +- Cargo.toml | 7 ++++++- src/app.rs | 23 +++++++++++------------ src/state.rs | 1 + 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f9e2d9b..bfc972b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -256,7 +256,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "marika-finger-blaster" -version = "0.0.2" +version = "0.0.4" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index c5e7235..0f5bca8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 diff --git a/src/app.rs b/src/app.rs index 6a0044b..476b4a7 100644 --- a/src/app.rs +++ b/src/app.rs @@ -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) { - 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, } -- cgit v1.3