Rewrite fully second db table into result

This commit is contained in:
micialware committed 2026-08-24 18:16:41 +03:00
1 parent 06bf9138c0
commit 8841a51897
11 files changed
+127 -74

No files matched your search

+18 -11
View File
@@ -1,19 +1,20 @@
use crate::app::AppState;
use crate::core::deck::DeckData;
use crate::core::srs::WordOpenMode;
use crate::data::entities::{CardStatistics, DeckSettings, WordData};
use crate::data::Id;
use crate::data::entities::{CardStatistics, DeckSettings, WordData};
use crate::data_provider::voice::get_voice;
use crate::navigation::Page::PreviousPage;
use crate::navigation::{KeyPressedPage, NavigatedPage, Page, RootMessage};
use crate::notification::{NotificationData, NotificationRequest};
use crate::notification::NotificationData;
use crate::styling::*;
use crate::{push_error, push_error_task};
use chrono::Local;
use iced::alignment::Horizontal::Center;
use iced::keyboard::key::Physical::Code;
use iced::widget::text::Style;
use iced::widget::{button, column, container, row, rule, space, text, tooltip, Column};
use iced::{alignment, keyboard, Element, Fill, Task, Theme};
use iced::widget::{Column, button, column, container, row, rule, space, text, tooltip};
use iced::{Element, Fill, Task, Theme, alignment, keyboard};
use parking_lot::Mutex;
use rodio::MixerDeviceSink;
use std::collections::HashSet;
@@ -57,7 +58,7 @@ impl NavigatedPage<RepetitionMessage> for RepetitionState {
if self.settings.require_speech() {
return Task::perform(play_sound(self.sink.clone(), value), |r| match r {
Ok(_) => RootMessage::Repetition(RepetitionMessage::PlayFinished),
Err(err) => RootMessage::PushNotification(NotificationRequest::Error(err)),
Err(err) => push_error!(err),
});
}
}
@@ -101,8 +102,11 @@ impl NavigatedPage<RepetitionMessage> for RepetitionState {
}
impl RepetitionState {
pub(crate) fn new(set: DeckSettings, state: Arc<Mutex<AppState>>) -> RepetitionState {
let mut card_set = DeckData::new(&set, state.clone());
pub(crate) fn new(
set: DeckSettings,
state: Arc<Mutex<AppState>>,
) -> Result<RepetitionState, NotificationData> {
let mut card_set = DeckData::new(&set, state.clone())?;
let (word, stat) = card_set.next();
let sink_handle = if set.forward.contains("speech") || set.backward.contains("speech") {
@@ -111,7 +115,7 @@ impl RepetitionState {
None
};
RepetitionState {
Ok(RepetitionState {
state,
settings: set,
set: card_set,
@@ -121,7 +125,7 @@ impl RepetitionState {
can_play: true,
sink: Arc::new(sink_handle),
opened: HashSet::new(),
}
})
}
}
@@ -140,7 +144,10 @@ impl RepetitionState {
return Task::none();
}
self.set.open(mode);
if let Err(err) = self.set.open(mode) {
return push_error_task!(err);
}
self.open = false;
self.opened.insert(self.current_word.id);
let next = self.set.next();
@@ -152,7 +159,7 @@ impl RepetitionState {
let task = play_sound(sink, self.current_word.key.clone());
return Task::perform(task, |r| match r {
Ok(_) => RootMessage::Repetition(RepetitionMessage::PlayFinished),
Err(err) => RootMessage::PushNotification(NotificationRequest::Error(err)),
Err(err) => push_error!(err),
});
}
self.increment_counter();