Fixing bugs

This commit is contained in:
2026-08-18 17:15:03 +03:00
parent 306febc514
commit 3cd7c12baa
+38 -28
View File
@@ -1,7 +1,7 @@
use crate::data_provider::card_sets::update_deck;
use crate::data_provider::card_stats::{add_stat_list, load_stats_of_deck};
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::{NavigatedPage, Page};
use crate::repetition::RepetitionState;
@@ -11,17 +11,17 @@ use crate::styling::*;
use crate::{AppState, RootMessage};
use chrono::{Days, Local, Utc};
use hashbrown::{HashMap, HashSet};
use iced::widget::button::{danger, Status};
pub use iced::widget::button::{Catalog, Style};
use iced::widget::button::{Status, danger};
use iced::widget::tooltip::Position::Top;
use iced::widget::{
button, column, container, lazy, radio, row, scrollable, space, svg, text, text_input, tooltip,
Column, Row,
Column, Row, button, column, container, lazy, radio, row, scrollable, space, svg, text,
text_input, tooltip,
};
use iced::{Background, Border, Center, Color, Element, Fill, Length, Shadow, Task, Theme};
use iced_core::Padding;
use iced_core::border::Radius;
use iced_core::svg::Handle;
use iced_core::Padding;
use std::ops::Deref;
use std::sync::{Arc, Mutex};
@@ -47,7 +47,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
let selected_set = self.selected_deck_mut().unwrap();
if selected_set.append_mode == AppendMode::Full {
Self::append_all_words(&clone.lock().unwrap(), selected_set);
selected_set.existing_words_indices = selected_set.available_words_indices.clone();
} else {
@@ -62,7 +61,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
.unwrap()
.is_empty()
{
selected_set.append_warning = true;
return None;
}
}
@@ -110,8 +108,6 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
existing_words_indices: None,
available_words_indices: None,
append_mode: Default::default(),
append_warning: false,
valid_filter: true,
index: None,
});
}
@@ -122,6 +118,15 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
if deck.id != INVALID_ID {
let mut state = self.state.lock().unwrap();
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) => {
@@ -154,7 +159,7 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
} else {
state.decks.push(deck.general_settings.clone());
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);
});
let decks = state_.decks.iter().enumerate().map(|(index, deck)| {DeckViewData{
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();
let decks = Self::get_decks_from_state(&state_);
drop(state_);
RepetitionsState {
word_id_index_map: map,
@@ -276,12 +273,29 @@ impl RepetitionsState {
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 {
fn launch_delete_button(&self, deck: &DeckViewData) -> Element<'_, RepetitionsMessage> {
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 row![
@@ -376,7 +390,8 @@ impl RepetitionsState {
button("Сохранить").style(jl_button).on_press(Save),
self.launch_delete_button(deck)
]
.spacing(DEFAULT_SPACING).align_y(Center),
.spacing(DEFAULT_SPACING)
.align_y(Center),
]
.spacing(DEFAULT_SPACING)
.width(Length::FillPortion(2))
@@ -533,11 +548,8 @@ impl RepetitionsState {
} else {
None
},
text_color: if deck.valid_filter {
_x.palette().primary
} else {
_x.palette().warning
},
text_color:
_x.palette().primary,
border: Border {
color: Default::default(),
width: 0.0,
@@ -633,8 +645,6 @@ struct DeckViewData {
existing_words_indices: Option<Vec<usize>>,
available_words_indices: Option<Vec<usize>>,
append_mode: AppendMode,
append_warning: bool,
valid_filter: bool,
index: Option<usize>,
}
impl Deref for DeckViewData {