Routing to history page

This commit is contained in:
2026-07-05 01:58:32 +03:00
parent ef4773d724
commit 848d376cf8
3 changed files with 14 additions and 7 deletions
+3 -3
View File
@@ -11,7 +11,7 @@ use HistoryMessage::Back;
#[derive(Clone)] #[derive(Clone)]
pub struct HistoryState { pub struct HistoryState {
set_id: u32, set_id: usize,
list: Vec<HistoryItem>, list: Vec<HistoryItem>,
} }
@@ -25,7 +25,7 @@ impl NavigatedPage<HistoryMessage> for HistoryState {
} }
impl HistoryState { impl HistoryState {
pub fn new(id: u32, state: Arc<Mutex<AppState>>) -> Self { pub fn new(id: usize, state: Arc<Mutex<AppState>>) -> Self {
Self { Self {
set_id: id, set_id: id,
list: get_history_of_set(id, &state.lock().unwrap().dictionary), 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<WordData>) -> Vec<HistoryItem> { fn get_history_of_set(id: usize, words: &Vec<WordData>) -> Vec<HistoryItem> {
let app_dir = app_data_dir(); let app_dir = app_data_dir();
let head = app_dir.clone().join(format!("set_{}_history.csv", id)); let head = app_dir.clone().join(format!("set_{}_history.csv", id));
let tail = app_dir.clone().join(format!("set_{}_history.csv", id)); let tail = app_dir.clone().join(format!("set_{}_history.csv", id));
+2 -1
View File
@@ -164,7 +164,8 @@ impl ScreenState {
Repetitions, Repetitions,
Repetition, Repetition,
Word, Word,
Sync Sync,
History
) )
} }
+9 -3
View File
@@ -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::data_provider::card_stats::load_stats_of_set;
use crate::lang::{SetOrderMode, WordData}; use crate::lang::{SetOrderMode, WordData};
use crate::repetition::RepetitionState; use crate::repetition::RepetitionState;
use crate::Page::{PreviousPage, Repetition}; use crate::Page::{History, PreviousPage, Repetition};
use crate::{AppState, NavigatedPage, Page, RootMessage, DEFAULT_SPACING}; use crate::{AppState, NavigatedPage, Page, RootMessage, DEFAULT_SPACING};
use iced::widget::button::danger; use iced::widget::button::danger;
pub use iced::widget::button::{Catalog, Style}; 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 iced::{Border, Center, Element, Fill, Left, Length, Shadow, Task, Theme};
use rhai::{Engine, Scope}; use rhai::{Engine, Scope};
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use crate::history::HistoryState;
#[derive(Clone)] #[derive(Clone)]
pub struct RepetitionsState { pub struct RepetitionsState {
@@ -24,6 +25,8 @@ impl NavigatedPage<RepetitionsMessage> for RepetitionsState {
fn navigate(&self, message: &RepetitionsMessage) -> Option<Page> { fn navigate(&self, message: &RepetitionsMessage) -> Option<Page> {
if let RepetitionsMessage::Back = message { if let RepetitionsMessage::Back = message {
Some(PreviousPage) 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 { } else if let RepetitionsMessage::GoToRepetition = message {
let clone = self.state.clone(); let clone = self.state.clone();
let card_set; let card_set;
@@ -55,6 +58,7 @@ impl RepetitionsState {
RepetitionsMessage::Next => {} RepetitionsMessage::Next => {}
RepetitionsMessage::Back => {} RepetitionsMessage::Back => {}
RepetitionsMessage::GoToRepetition => {} RepetitionsMessage::GoToRepetition => {}
RepetitionsMessage::GoToHistory => {}
RepetitionsMessage::CreateSet => { RepetitionsMessage::CreateSet => {
let index = state.card_sets.len() + 1; let index = state.card_sets.len() + 1;
state state
@@ -169,7 +173,8 @@ impl RepetitionsState {
button("Проверить фильтр").on_press(RepetitionsMessage::TryFilter), button("Проверить фильтр").on_press(RepetitionsMessage::TryFilter),
self.count_view(&set), self.count_view(&set),
radio("Обычный режим", SetOrderMode::Default, Some(set.open_mode), RepetitionsMessage::SetOpenMode), 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) .spacing(DEFAULT_SPACING)
) )
@@ -260,7 +265,8 @@ pub enum RepetitionsMessage {
SetBackward(String), SetBackward(String),
SetFilter(String), SetFilter(String),
TryFilter, TryFilter,
SetOpenMode(SetOrderMode) SetOpenMode(SetOrderMode),
GoToHistory,
} }
#[derive(Clone)] #[derive(Clone)]