Fixing bugs
This commit is contained in:
+38
-28
@@ -1,7 +1,7 @@
|
|||||||
use crate::data_provider::card_sets::update_deck;
|
use crate::data_provider::card_sets::update_deck;
|
||||||
use crate::data_provider::card_stats::{add_stat_list, load_stats_of_deck};
|
use crate::data_provider::card_stats::{add_stat_list, load_stats_of_deck};
|
||||||
use crate::history::HistoryState;
|
use crate::history::HistoryState;
|
||||||
use crate::lang::{AppendMode, CardStatistics, DeckSettings, Id, OrderMode, INVALID_ID};
|
use crate::lang::{AppendMode, CardStatistics, DeckSettings, INVALID_ID, Id, OrderMode};
|
||||||
use crate::navigation::Page::{History, PreviousPage, Repetition, RepetitionSettings};
|
use crate::navigation::Page::{History, PreviousPage, Repetition, RepetitionSettings};
|
||||||
use crate::navigation::{NavigatedPage, Page};
|
use crate::navigation::{NavigatedPage, Page};
|
||||||
use crate::repetition::RepetitionState;
|
use crate::repetition::RepetitionState;
|
||||||
@@ -11,17 +11,17 @@ use crate::styling::*;
|
|||||||
use crate::{AppState, RootMessage};
|
use crate::{AppState, RootMessage};
|
||||||
use chrono::{Days, Local, Utc};
|
use chrono::{Days, Local, Utc};
|
||||||
use hashbrown::{HashMap, HashSet};
|
use hashbrown::{HashMap, HashSet};
|
||||||
use iced::widget::button::{danger, Status};
|
|
||||||
pub use iced::widget::button::{Catalog, Style};
|
pub use iced::widget::button::{Catalog, Style};
|
||||||
|
use iced::widget::button::{Status, danger};
|
||||||
use iced::widget::tooltip::Position::Top;
|
use iced::widget::tooltip::Position::Top;
|
||||||
use iced::widget::{
|
use iced::widget::{
|
||||||
button, column, container, lazy, radio, row, scrollable, space, svg, text, text_input, tooltip,
|
Column, Row, button, column, container, lazy, radio, row, scrollable, space, svg, text,
|
||||||
Column, Row,
|
text_input, tooltip,
|
||||||
};
|
};
|
||||||
use iced::{Background, Border, Center, Color, Element, Fill, Length, Shadow, Task, Theme};
|
use iced::{Background, Border, Center, Color, Element, Fill, Length, Shadow, Task, Theme};
|
||||||
|
use iced_core::Padding;
|
||||||
use iced_core::border::Radius;
|
use iced_core::border::Radius;
|
||||||
use iced_core::svg::Handle;
|
use iced_core::svg::Handle;
|
||||||
use iced_core::Padding;
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
@@ -47,7 +47,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
|||||||
|
|
||||||
let selected_set = self.selected_deck_mut().unwrap();
|
let selected_set = self.selected_deck_mut().unwrap();
|
||||||
if selected_set.append_mode == AppendMode::Full {
|
if selected_set.append_mode == AppendMode::Full {
|
||||||
|
|
||||||
Self::append_all_words(&clone.lock().unwrap(), selected_set);
|
Self::append_all_words(&clone.lock().unwrap(), selected_set);
|
||||||
selected_set.existing_words_indices = selected_set.available_words_indices.clone();
|
selected_set.existing_words_indices = selected_set.available_words_indices.clone();
|
||||||
} else {
|
} else {
|
||||||
@@ -62,7 +61,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.is_empty()
|
.is_empty()
|
||||||
{
|
{
|
||||||
selected_set.append_warning = true;
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,8 +108,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
|||||||
existing_words_indices: None,
|
existing_words_indices: None,
|
||||||
available_words_indices: None,
|
available_words_indices: None,
|
||||||
append_mode: Default::default(),
|
append_mode: Default::default(),
|
||||||
append_warning: false,
|
|
||||||
valid_filter: true,
|
|
||||||
index: None,
|
index: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -122,6 +118,15 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
|||||||
if deck.id != INVALID_ID {
|
if deck.id != INVALID_ID {
|
||||||
let mut state = self.state.lock().unwrap();
|
let mut state = self.state.lock().unwrap();
|
||||||
state.decks.remove(index);
|
state.decks.remove(index);
|
||||||
|
self.decks = self
|
||||||
|
.decks
|
||||||
|
.clone()
|
||||||
|
.into_iter()
|
||||||
|
.map(|mut deck| {
|
||||||
|
deck.index = state.decks.iter().position(|d| d.id == deck.id);
|
||||||
|
deck
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetName(value) => {
|
SetName(value) => {
|
||||||
@@ -154,7 +159,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
|
|||||||
} else {
|
} else {
|
||||||
state.decks.push(deck.general_settings.clone());
|
state.decks.push(deck.general_settings.clone());
|
||||||
deck.index = Some(state.decks.len() - 1);
|
deck.index = Some(state.decks.len() - 1);
|
||||||
self.decks[deck.index.unwrap()] = deck.clone();
|
self.decks[self.selected_deck_index.unwrap()] = deck.clone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -259,15 +264,7 @@ impl RepetitionsState {
|
|||||||
map.insert(word.id, index);
|
map.insert(word.id, index);
|
||||||
});
|
});
|
||||||
|
|
||||||
let decks = state_.decks.iter().enumerate().map(|(index, deck)| {DeckViewData{
|
let decks = Self::get_decks_from_state(&state_);
|
||||||
general_settings: deck.clone(),
|
|
||||||
existing_words_indices: None,
|
|
||||||
available_words_indices: None,
|
|
||||||
append_mode: Default::default(),
|
|
||||||
append_warning: false,
|
|
||||||
valid_filter: true,
|
|
||||||
index: Some(index),
|
|
||||||
}}).collect();
|
|
||||||
drop(state_);
|
drop(state_);
|
||||||
RepetitionsState {
|
RepetitionsState {
|
||||||
word_id_index_map: map,
|
word_id_index_map: map,
|
||||||
@@ -276,12 +273,29 @@ impl RepetitionsState {
|
|||||||
state,
|
state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_decks_from_state(state: &AppState) -> Vec<DeckViewData> {
|
||||||
|
state
|
||||||
|
.decks
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(index, deck)| DeckViewData {
|
||||||
|
general_settings: deck.clone(),
|
||||||
|
existing_words_indices: None,
|
||||||
|
available_words_indices: None,
|
||||||
|
append_mode: Default::default(),
|
||||||
|
index: Some(index),
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RepetitionsState {
|
impl RepetitionsState {
|
||||||
fn launch_delete_button(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
fn launch_delete_button(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
|
||||||
if deck.id != INVALID_ID {
|
if deck.id != INVALID_ID {
|
||||||
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.as_ref().unwrap().is_empty()
|
||||||
|
{
|
||||||
return text!("Добавьте карточки или измените фильтр").into();
|
return text!("Добавьте карточки или измените фильтр").into();
|
||||||
}
|
}
|
||||||
return row![
|
return row![
|
||||||
@@ -376,7 +390,8 @@ impl RepetitionsState {
|
|||||||
button("Сохранить").style(jl_button).on_press(Save),
|
button("Сохранить").style(jl_button).on_press(Save),
|
||||||
self.launch_delete_button(deck)
|
self.launch_delete_button(deck)
|
||||||
]
|
]
|
||||||
.spacing(DEFAULT_SPACING).align_y(Center),
|
.spacing(DEFAULT_SPACING)
|
||||||
|
.align_y(Center),
|
||||||
]
|
]
|
||||||
.spacing(DEFAULT_SPACING)
|
.spacing(DEFAULT_SPACING)
|
||||||
.width(Length::FillPortion(2))
|
.width(Length::FillPortion(2))
|
||||||
@@ -533,11 +548,8 @@ impl RepetitionsState {
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
},
|
},
|
||||||
text_color: if deck.valid_filter {
|
text_color:
|
||||||
_x.palette().primary
|
_x.palette().primary,
|
||||||
} else {
|
|
||||||
_x.palette().warning
|
|
||||||
},
|
|
||||||
border: Border {
|
border: Border {
|
||||||
color: Default::default(),
|
color: Default::default(),
|
||||||
width: 0.0,
|
width: 0.0,
|
||||||
@@ -633,8 +645,6 @@ struct DeckViewData {
|
|||||||
existing_words_indices: Option<Vec<usize>>,
|
existing_words_indices: Option<Vec<usize>>,
|
||||||
available_words_indices: Option<Vec<usize>>,
|
available_words_indices: Option<Vec<usize>>,
|
||||||
append_mode: AppendMode,
|
append_mode: AppendMode,
|
||||||
append_warning: bool,
|
|
||||||
valid_filter: bool,
|
|
||||||
index: Option<usize>,
|
index: Option<usize>,
|
||||||
}
|
}
|
||||||
impl Deref for DeckViewData {
|
impl Deref for DeckViewData {
|
||||||
|
|||||||
Reference in New Issue
Block a user