From c5e91b844c8b50d4b3e3aca63bec295d3d0d6959 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Thu, 20 Aug 2026 11:17:51 +0300 Subject: [PATCH] found bug in random srs --- src/data_provider/voice.rs | 16 +++++++--------- src/lang.rs | 13 +------------ src/repetition.rs | 17 +++++++++-------- 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/src/data_provider/voice.rs b/src/data_provider/voice.rs index 45a6833..71c89b4 100644 --- a/src/data_provider/voice.rs +++ b/src/data_provider/voice.rs @@ -4,11 +4,11 @@ use sha2::{Digest, Sha256}; use std::fs::File; use std::io::BufReader; -pub async fn get_voice(text: &str) -> BufReader { +pub async fn get_voice(text: &str) -> Result, ()> { let mut path = app_data_dir(); path.push("voice"); if !path.exists() { - std::fs::create_dir(path.clone()).unwrap(); + std::fs::create_dir(path.clone()).map_err(|_|())?; } let hash = format!("{}.wav", hex::encode(Sha256::digest(text.as_bytes()))); path.push(hash); @@ -20,21 +20,19 @@ pub async fn get_voice(text: &str) -> BufReader { .send() .await; - let query = query.unwrap().text().await.unwrap(); + let query = query.map_err(|_|())?.text().await.map_err(|_|())?; // Synthesis let audio = client .post(format!("{engine_url}/synthesis?speaker=11")) .header("Content-Type", "application/json") .body(query) .send() - .await - .unwrap() + .await.map_err(|_|())? .bytes() - .await - .unwrap(); + .await.map_err(|_|())?; - tokio::fs::write(&path, &audio).await.unwrap(); + tokio::fs::write(&path, &audio).await.map_err(|_|())?; } - BufReader::new(File::open(path).unwrap()) + Ok(BufReader::new(File::open(path).map_err(|_|())?)) } diff --git a/src/lang.rs b/src/lang.rs index c72276c..846cc31 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -364,17 +364,6 @@ impl DeckData { .map(|w| &state_locked.dictionary[*w]) .cloned() .collect(); - let word_ids = last_list.iter().map(|l| l.id).collect::>(); - - let mut index = 0; - for stat in current_set.clone() { - if !word_ids.contains(&stat.word_id) { - delete_stat(&stat, &state_locked.connection); - current_set.remove(index); - } else { - index += 1; - } - } Self { set: current_set, @@ -515,7 +504,7 @@ impl SRSModule for RandomSRSModule { fn init(&mut self, set: &mut DeckData) { self.initialized = true; - self.basket = (0..set.words.len()).collect::>(); + self.basket = (0..set.set.len()).collect::>(); self.basket.shuffle(&mut rand::rng()) } } diff --git a/src/repetition.rs b/src/repetition.rs index 41d4ae5..f75ae84 100644 --- a/src/repetition.rs +++ b/src/repetition.rs @@ -9,8 +9,8 @@ use chrono::Local; use iced::alignment::Horizontal::Center; use iced::keyboard::key::Physical::Code; use iced::widget::text::Style; -use iced::widget::{Column, button, column, container, row, rule, space, text, tooltip}; -use iced::{Element, Fill, Task, Theme, alignment, keyboard}; +use iced::widget::{button, column, container, row, rule, space, text, tooltip, Column}; +use iced::{alignment, keyboard, Element, Fill, Task, Theme}; use parking_lot::Mutex; use rodio::MixerDeviceSink; use std::collections::HashSet; @@ -317,10 +317,11 @@ pub enum RepetitionMessage { } async fn play_sound(sink: Arc, text: String) { - let data = get_voice(text.as_str()).await; - spawn_blocking(move || { - rodio::play(sink.mixer(), data).unwrap().sleep_until_end(); - }) - .await - .unwrap(); + if let Ok(data) = get_voice(text.as_str()).await { + spawn_blocking(move || { + rodio::play(sink.mixer(), data).unwrap().sleep_until_end(); + }) + .await + .unwrap(); + } }