diff --git a/src/history.rs b/src/history.rs index 4ad19d9..e3dcf32 100644 --- a/src/history.rs +++ b/src/history.rs @@ -11,7 +11,7 @@ use HistoryMessage::Back; #[derive(Clone)] pub struct HistoryState { - set_id: u32, + set_id: usize, list: Vec, } @@ -25,7 +25,7 @@ impl NavigatedPage for HistoryState { } impl HistoryState { - pub fn new(id: u32, state: Arc>) -> Self { + pub fn new(id: usize, state: Arc>) -> Self { Self { set_id: id, list: get_history_of_set(id, &state.lock().unwrap().dictionary), @@ -55,7 +55,7 @@ impl HistoryState { } } -fn get_history_of_set(id: u32, words: &Vec) -> Vec { +fn get_history_of_set(id: usize, words: &Vec) -> Vec { let app_dir = app_data_dir(); let head = app_dir.clone().join(format!("set_{}_history.csv", id)); let tail = app_dir.clone().join(format!("set_{}_history.csv", id)); diff --git a/src/main.rs b/src/main.rs index 99f5bdb..74e53c3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -164,7 +164,8 @@ impl ScreenState { Repetitions, Repetition, Word, - Sync + Sync, + History ) } diff --git a/src/repetitions.rs b/src/repetitions.rs index 53176e2..0bbc022 100644 --- a/src/repetitions.rs +++ b/src/repetitions.rs @@ -2,7 +2,7 @@ use crate::data_provider::card_sets::{delete_set, update_card_set}; use crate::data_provider::card_stats::load_stats_of_set; use crate::lang::{SetOrderMode, WordData}; use crate::repetition::RepetitionState; -use crate::Page::{PreviousPage, Repetition}; +use crate::Page::{History, PreviousPage, Repetition}; use crate::{AppState, NavigatedPage, Page, RootMessage, DEFAULT_SPACING}; use iced::widget::button::danger; pub use iced::widget::button::{Catalog, Style}; @@ -11,6 +11,7 @@ use iced::widget::{button, column, container, radio, row, scrollable, space, tex use iced::{Border, Center, Element, Fill, Left, Length, Shadow, Task, Theme}; use rhai::{Engine, Scope}; use std::sync::{Arc, Mutex}; +use crate::history::HistoryState; #[derive(Clone)] pub struct RepetitionsState { @@ -24,6 +25,8 @@ impl NavigatedPage for RepetitionsState { fn navigate(&self, message: &RepetitionsMessage) -> Option { if let RepetitionsMessage::Back = message { Some(PreviousPage) + } else if let RepetitionsMessage::GoToHistory = message { + Some(History(HistoryState::new(self.selected_set.unwrap(), self.state.clone()))) } else if let RepetitionsMessage::GoToRepetition = message { let clone = self.state.clone(); let card_set; @@ -55,6 +58,7 @@ impl RepetitionsState { RepetitionsMessage::Next => {} RepetitionsMessage::Back => {} RepetitionsMessage::GoToRepetition => {} + RepetitionsMessage::GoToHistory => {} RepetitionsMessage::CreateSet => { let index = state.card_sets.len() + 1; state @@ -169,7 +173,8 @@ impl RepetitionsState { button("Проверить фильтр").on_press(RepetitionsMessage::TryFilter), self.count_view(&set), radio("Обычный режим", SetOrderMode::Default, Some(set.open_mode), RepetitionsMessage::SetOpenMode), - self.words_words_view(&set) + self.words_words_view(&set), + button("История").on_press(RepetitionsMessage::GoToHistory), ] .spacing(DEFAULT_SPACING) ) @@ -260,7 +265,8 @@ pub enum RepetitionsMessage { SetBackward(String), SetFilter(String), TryFilter, - SetOpenMode(SetOrderMode) + SetOpenMode(SetOrderMode), + GoToHistory, } #[derive(Clone)]