Working repetitions
This commit is contained in:
1 parent
242b56fc21
commit
2e04450c76
7 files changed
+163
-260
No files matched your search
@@ -2,11 +2,13 @@ use crate::app::AppState;
|
||||
use crate::core::deck::DeckData;
|
||||
use crate::core::srs::WordOpenMode;
|
||||
use crate::data::Id;
|
||||
use crate::data::entities::{CardState, DeckSettings, WordData};
|
||||
use crate::data::entities::{CardState, WordData};
|
||||
use crate::data::repositories::Repository;
|
||||
use crate::data_provider::voice::get_voice;
|
||||
use crate::navigation::Page::PreviousPage;
|
||||
use crate::navigation::{KeyPressedPage, NavigatedPage, Page, RootMessage};
|
||||
use crate::notification::{MaybeError, NotificationData};
|
||||
use crate::pages::repetitions::DeckRunData;
|
||||
use crate::styling::*;
|
||||
use crate::{push_error, push_error_task};
|
||||
use iced::alignment::Horizontal::Center;
|
||||
@@ -18,11 +20,10 @@ use rodio::MixerDeviceSink;
|
||||
use std::collections::HashSet;
|
||||
use std::sync::Arc;
|
||||
use tokio::task::spawn_blocking;
|
||||
use crate::data::repositories::Repository;
|
||||
|
||||
pub struct RepetitionState {
|
||||
state: AppState,
|
||||
pub settings: DeckSettings,
|
||||
pub settings: DeckRunData,
|
||||
pub set: DeckData,
|
||||
current_word: WordData,
|
||||
current_statistic: CardState,
|
||||
@@ -102,10 +103,10 @@ impl NavigatedPage<RepetitionMessage> for RepetitionState {
|
||||
|
||||
impl RepetitionState {
|
||||
pub(crate) fn new(
|
||||
set: DeckSettings,
|
||||
set: DeckRunData,
|
||||
state: AppState,
|
||||
) -> Result<RepetitionState, NotificationData> {
|
||||
let mut card_set = DeckData::new(&set, state.clone())?;
|
||||
let mut card_set = DeckData::new(&set, set.open_mode, state.clone());
|
||||
let (word, stat) = card_set.next();
|
||||
let word = state.dictionary.read().get_static(word).unwrap();
|
||||
let stat = state.card_states.read().get_static(stat).unwrap();
|
||||
|
||||
+18
-18
@@ -33,7 +33,7 @@ use std::sync::Arc;
|
||||
#[derive(Clone)]
|
||||
pub struct RepetitionsState {
|
||||
selected_deck_handle: Option<EntityHandle<DeckSettings>>,
|
||||
decks: BTreeMap<EntityHandle<DeckSettings>, DeckViewData>,
|
||||
decks: BTreeMap<EntityHandle<DeckSettings>, DeckRunData>,
|
||||
state: AppState,
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
}
|
||||
|
||||
if let Ok(repetition_state) =
|
||||
RepetitionState::new(selected_set.general_settings.clone(), self.state.clone())
|
||||
RepetitionState::new(selected_set.clone(), self.state.clone())
|
||||
{
|
||||
return Some(Repetition(repetition_state));
|
||||
}
|
||||
@@ -111,7 +111,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
let handle = self.state.decks.write().create(general.clone());
|
||||
self.decks.insert(
|
||||
handle,
|
||||
DeckViewData {
|
||||
DeckRunData {
|
||||
settings_handle: handle,
|
||||
general_settings: general,
|
||||
existing_words_indices: Default::default(),
|
||||
@@ -258,7 +258,7 @@ impl RepetitionsState {
|
||||
|
||||
fn get_decks_from_state(
|
||||
state: &AppState,
|
||||
) -> BTreeMap<EntityHandle<DeckSettings>, DeckViewData> {
|
||||
) -> BTreeMap<EntityHandle<DeckSettings>, DeckRunData> {
|
||||
state
|
||||
.decks
|
||||
.read()
|
||||
@@ -267,7 +267,7 @@ impl RepetitionsState {
|
||||
.map(|(index, deck)| {
|
||||
(
|
||||
EntityHandle::new(deck.id, index, true),
|
||||
DeckViewData {
|
||||
DeckRunData {
|
||||
settings_handle: EntityHandle::new(deck.id, index, true),
|
||||
general_settings: deck.clone(),
|
||||
existing_words_indices: Default::default(),
|
||||
@@ -284,7 +284,7 @@ impl RepetitionsState {
|
||||
}
|
||||
|
||||
impl RepetitionsState {
|
||||
fn launch_delete_button(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||
fn launch_delete_button(&self, deck: &DeckRunData) -> Element<'_, RepetitionsMessage> {
|
||||
if deck.id.is_valid() {
|
||||
if deck.append_mode == AppendMode::Manual && deck.existing_words_indices.is_empty() {
|
||||
return text!("Добавьте карточки или измените фильтр").into();
|
||||
@@ -468,7 +468,7 @@ impl RepetitionsState {
|
||||
})
|
||||
.into()
|
||||
}
|
||||
fn word_append_panel(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||
fn word_append_panel(&self, deck: &DeckRunData) -> Element<'_, RepetitionsMessage> {
|
||||
column![
|
||||
text!("Режим добавления карточек"),
|
||||
row![
|
||||
@@ -491,7 +491,7 @@ impl RepetitionsState {
|
||||
.spacing(HALF_SPACING)
|
||||
.into()
|
||||
}
|
||||
fn adder_panel(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||
fn adder_panel(&self, deck: &DeckRunData) -> Element<'_, RepetitionsMessage> {
|
||||
match deck.append_mode {
|
||||
AppendMode::Full => space().into(),
|
||||
AppendMode::Manual => row![
|
||||
@@ -511,7 +511,7 @@ impl RepetitionsState {
|
||||
let available = selected_deck.available_words_indices.len();
|
||||
text!("{} слова добавлено из {}", now, available).into()
|
||||
}
|
||||
fn count_view(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||
fn count_view(&self, deck: &DeckRunData) -> Element<'_, RepetitionsMessage> {
|
||||
if let Some(count) = deck.count {
|
||||
return text!("Количество слов: {}", count).into();
|
||||
}
|
||||
@@ -547,7 +547,7 @@ impl RepetitionsState {
|
||||
}
|
||||
|
||||
impl RepetitionsState {
|
||||
fn append_all_words(state: &mut AppState, deck: &DeckViewData) -> MaybeError {
|
||||
fn append_all_words(state: &mut AppState, deck: &DeckRunData) -> MaybeError {
|
||||
let existing = &deck.existing_words_indices;
|
||||
let mut created_set = HashSet::with_capacity(existing.len());
|
||||
existing.iter().for_each(|c| {
|
||||
@@ -593,10 +593,10 @@ impl RepetitionsState {
|
||||
}
|
||||
}
|
||||
|
||||
fn selected_deck(&self) -> Option<&DeckViewData> {
|
||||
fn selected_deck(&self) -> Option<&DeckRunData> {
|
||||
self.decks.get(&self.selected_deck_handle?)
|
||||
}
|
||||
fn selected_deck_mut(&mut self) -> Option<&mut DeckViewData> {
|
||||
fn selected_deck_mut(&mut self) -> Option<&mut DeckRunData> {
|
||||
self.decks.get_mut(&self.selected_deck_handle?)
|
||||
}
|
||||
|
||||
@@ -641,18 +641,18 @@ pub enum RepetitionsMessage {
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct DeckViewData {
|
||||
settings_handle: EntityHandle<DeckSettings>,
|
||||
general_settings: DeckSettings,
|
||||
pub struct DeckRunData {
|
||||
pub settings_handle: EntityHandle<DeckSettings>,
|
||||
pub general_settings: DeckSettings,
|
||||
existing_words_indices: Vec<EntityHandle<WordData>>,
|
||||
available_words_indices: Vec<EntityHandle<WordData>>,
|
||||
indices_ready: bool,
|
||||
append_mode: AppendMode,
|
||||
pub append_mode: AppendMode,
|
||||
count: Option<usize>,
|
||||
open_mode: OrderMode,
|
||||
pub open_mode: OrderMode,
|
||||
}
|
||||
|
||||
impl Deref for DeckViewData {
|
||||
impl Deref for DeckRunData {
|
||||
type Target = DeckSettings;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
|
||||
Reference in new issue
Block a user