Remove Option for vecs in repetitions
This commit is contained in:
1 parent
d261a08932
commit
3cbdf0803b
1 file changed
+28
-45
+28
-45
@@ -1,8 +1,12 @@
|
||||
use crate::app::AppState;
|
||||
use crate::core::srs::{AppendMode, OrderMode};
|
||||
use crate::data::Id;
|
||||
use crate::data::entities::{CardStatistics, DeckSettings};
|
||||
use crate::data_provider::card_sets::update_deck;
|
||||
use crate::data_provider::card_stats::{add_stat_list, load_stats_of_deck};
|
||||
use crate::pages::history::HistoryState;
|
||||
use crate::navigation::Page::{History, PreviousPage, Repetition, RepetitionSettings};
|
||||
use crate::navigation::{NavigatedPage, Page, RootMessage};
|
||||
use crate::pages::history::HistoryState;
|
||||
use crate::pages::repetition::RepetitionState;
|
||||
use crate::pages::repetition_settings::RepetitionSettingsState;
|
||||
use crate::pages::repetitions::RepetitionsMessage::*;
|
||||
@@ -23,10 +27,6 @@ use iced_core::svg::Handle;
|
||||
use parking_lot::Mutex;
|
||||
use std::ops::Deref;
|
||||
use std::sync::Arc;
|
||||
use crate::app::AppState;
|
||||
use crate::data::entities::{CardStatistics, DeckSettings};
|
||||
use crate::core::srs::{AppendMode, OrderMode};
|
||||
use crate::data::Id;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct RepetitionsState {
|
||||
@@ -53,16 +53,8 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
Self::append_all_words(&mut clone.lock(), selected_set);
|
||||
selected_set.existing_words_indices = selected_set.available_words_indices.clone();
|
||||
} else {
|
||||
if selected_set
|
||||
.available_words_indices
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.is_empty()
|
||||
|| selected_set
|
||||
.existing_words_indices
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.is_empty()
|
||||
if selected_set.available_words_indices.is_empty()
|
||||
|| selected_set.existing_words_indices.is_empty()
|
||||
{
|
||||
return None;
|
||||
}
|
||||
@@ -82,7 +74,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
}
|
||||
}
|
||||
fn navigated(&mut self) {
|
||||
let index = self.selected_deck_index.unwrap();
|
||||
if let Some(index) = self.selected_deck_index {
|
||||
let state = self.state.lock();
|
||||
if let Some(global_deck) = state.decks.get(index) {
|
||||
if global_deck.id != self.selected_deck().unwrap().id {
|
||||
@@ -90,7 +82,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
self.decks.remove(index);
|
||||
self.clear_selection();
|
||||
} else {
|
||||
self.decks[self.selected_deck_index.unwrap()].general_settings =
|
||||
self.decks[index].general_settings =
|
||||
state.decks[index].clone();
|
||||
drop(state);
|
||||
self.fill_deck_word_indices();
|
||||
@@ -101,6 +93,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
self.clear_selection()
|
||||
}
|
||||
}
|
||||
}
|
||||
fn update(&mut self, message: RepetitionsMessage) -> Task<RootMessage> {
|
||||
match message {
|
||||
Next => {}
|
||||
@@ -113,8 +106,9 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
let index = self.decks.len() + 1;
|
||||
self.decks.push(DeckViewData {
|
||||
general_settings: DeckSettings::with_name(format!("Колода #{}", index)),
|
||||
existing_words_indices: None,
|
||||
available_words_indices: None,
|
||||
existing_words_indices: Default::default(),
|
||||
available_words_indices: Default::default(),
|
||||
indices_ready: false,
|
||||
append_mode: Default::default(),
|
||||
index: None,
|
||||
});
|
||||
@@ -144,7 +138,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
SelectSet(index) => {
|
||||
self.select_deck(index);
|
||||
let deck = self.selected_deck().unwrap();
|
||||
if deck.existing_words_indices.is_none() {
|
||||
if !deck.indices_ready {
|
||||
self.fill_deck_word_indices();
|
||||
}
|
||||
}
|
||||
@@ -195,15 +189,13 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
{
|
||||
{
|
||||
let deck = self.selected_deck().unwrap();
|
||||
let existing_words_indices = deck.existing_words_indices.as_ref().unwrap();
|
||||
let existing_words_indices = &deck.existing_words_indices;
|
||||
let mut created_set = HashSet::with_capacity(existing_words_indices.len());
|
||||
existing_words_indices.iter().for_each(|c| {
|
||||
created_set.insert(c);
|
||||
});
|
||||
adding = deck
|
||||
.available_words_indices
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.filter(|c| !created_set.contains(c))
|
||||
.take(count)
|
||||
@@ -212,10 +204,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
||||
}
|
||||
|
||||
let deck = self.selected_deck_mut().unwrap();
|
||||
deck.existing_words_indices
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.append(&mut adding.clone());
|
||||
deck.existing_words_indices.append(&mut adding.clone());
|
||||
}
|
||||
|
||||
let deck = self.selected_deck().unwrap();
|
||||
@@ -280,8 +269,9 @@ impl RepetitionsState {
|
||||
.enumerate()
|
||||
.map(|(index, deck)| DeckViewData {
|
||||
general_settings: deck.clone(),
|
||||
existing_words_indices: None,
|
||||
available_words_indices: None,
|
||||
existing_words_indices: Default::default(),
|
||||
available_words_indices: Default::default(),
|
||||
indices_ready: false,
|
||||
append_mode: Default::default(),
|
||||
index: Some(index),
|
||||
})
|
||||
@@ -292,9 +282,7 @@ impl RepetitionsState {
|
||||
impl RepetitionsState {
|
||||
fn launch_delete_button(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||
if deck.id.is_valid() {
|
||||
if deck.append_mode == AppendMode::Manual
|
||||
&& deck.existing_words_indices.as_ref().unwrap().is_empty()
|
||||
{
|
||||
if deck.append_mode == AppendMode::Manual && deck.existing_words_indices.is_empty() {
|
||||
return text!("Добавьте карточки или измените фильтр").into();
|
||||
}
|
||||
return row![
|
||||
@@ -517,12 +505,8 @@ impl RepetitionsState {
|
||||
|
||||
fn count_comparator_view(&self) -> Element<'_, RepetitionsMessage> {
|
||||
let selected_deck = self.selected_deck().unwrap();
|
||||
let now = selected_deck.existing_words_indices.as_ref().unwrap().len();
|
||||
let available = selected_deck
|
||||
.available_words_indices
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.len();
|
||||
let now = selected_deck.existing_words_indices.len();
|
||||
let available = selected_deck.available_words_indices.len();
|
||||
text!("{} слова добавлено из {}", now, available).into()
|
||||
}
|
||||
fn count_view(&self, deck: &DeckSettings) -> Element<'_, RepetitionsMessage> {
|
||||
@@ -562,15 +546,13 @@ impl RepetitionsState {
|
||||
|
||||
impl RepetitionsState {
|
||||
fn append_all_words(state: &mut AppState, deck: &DeckViewData) {
|
||||
let existing = deck.existing_words_indices.as_ref().unwrap();
|
||||
let existing = &deck.existing_words_indices;
|
||||
let mut created_set = HashSet::with_capacity(existing.len());
|
||||
existing.iter().for_each(|c| {
|
||||
created_set.insert(c);
|
||||
});
|
||||
let required = deck
|
||||
.available_words_indices
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.filter(|i| !created_set.contains(i))
|
||||
.cloned();
|
||||
@@ -625,8 +607,8 @@ impl RepetitionsState {
|
||||
.map(|c| self.word_id_index_map[&c.word_id])
|
||||
.collect();
|
||||
let total = deck.get_word_list(state);
|
||||
deck.existing_words_indices = Some(added);
|
||||
deck.available_words_indices = Some(total);
|
||||
deck.existing_words_indices = added;
|
||||
deck.available_words_indices = total;
|
||||
self.decks[self.selected_deck_index.unwrap()] = deck;
|
||||
}
|
||||
}
|
||||
@@ -654,8 +636,9 @@ pub enum RepetitionsMessage {
|
||||
#[derive(Clone)]
|
||||
struct DeckViewData {
|
||||
general_settings: DeckSettings,
|
||||
existing_words_indices: Option<Vec<usize>>,
|
||||
available_words_indices: Option<Vec<usize>>,
|
||||
existing_words_indices: Vec<usize>,
|
||||
available_words_indices: Vec<usize>,
|
||||
indices_ready: bool,
|
||||
append_mode: AppendMode,
|
||||
index: Option<usize>,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user