diff --git a/src/data_provider/card_stats.rs b/src/data_provider/card_stats.rs index bddae92..2374c0f 100644 --- a/src/data_provider/card_stats.rs +++ b/src/data_provider/card_stats.rs @@ -30,7 +30,7 @@ pub fn add_stat(stat: &mut CardStatistics, connection: &Connection) { &stat.word_id, &stat.set_id, &stat.score, - &stat.last_open, + &stat.last_open.timestamp(), ), |row| row.get(0) ) @@ -45,7 +45,7 @@ pub fn update_stat_score(stat: &CardStatistics, connection: &Connection){ "UPDATE card_stats SET score = ?1, last_opened = ?2 WHERE id = ?3", ( &stat.score, - &stat.last_open, + &stat.last_open.timestamp(), &stat.id ), ) diff --git a/src/history.rs b/src/history.rs new file mode 100644 index 0000000..387f284 --- /dev/null +++ b/src/history.rs @@ -0,0 +1,58 @@ +use crate::{AppState, NavigatedPage, Page, RootMessage}; +use iced::widget::*; +use iced::{Element, Fill, Left, Task}; +use std::sync::{Arc, Mutex}; +use HistoryMessage::Back; + +#[derive(Clone)] +pub struct HistoryState { + set_id: u32, + list: Vec +} + +impl NavigatedPage for HistoryState { + fn navigate(&self, message: &HistoryMessage) -> Option { + match message { + Back => Some(Page::PreviousPage), + _ => None, + } + } +} + +impl HistoryState { + pub fn new(id: u32, state: Arc>) -> Self { + Self { set_id: id, list: vec![] } + } + + pub fn update(&mut self, message: HistoryMessage) -> Task { + Task::none() + } + + pub fn view(&self) -> Element<'_, HistoryMessage> { + container( + iced::widget::column![ + button("Назад").on_press(HistoryMessage::Back), + // column![ + // + // ] + // .height(Fill) + // .width(Fill) + ] + .align_x(Left) + .width(Fill), + ) + .center_x(Fill) + .padding(10) + .into() + } +} + +#[derive(Clone)] +pub enum HistoryMessage { + Back, +} + +#[derive(Clone)] +pub struct HistoryItem{ + +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index d472e4e..99f5bdb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ mod selector; mod sync; mod word; mod writing; +mod history; use crate::data_provider::card_sets::load_sets; use crate::data_provider::settings::get_setting; @@ -26,18 +27,16 @@ use crate::selector::*; use crate::sync::{SyncMessage, SyncState}; use crate::word::{WordMessage, WordState}; use crate::writing::{WritingMessage, WritingState}; -use crate::Page::{ - Dictionary, DictionaryQuiz, Quiz, Randomizer, Repetition, Repetitions, Selector, Sync, Word, - Writing, -}; +use crate::Page::{Dictionary, DictionaryQuiz, History, Quiz, Randomizer, Repetition, Repetitions, Selector, Sync, Word, Writing}; use crate::RootMessage::Keyboard; use iced::keyboard::Event; use iced::widget::text; -use iced::{keyboard, Element, Subscription}; +use iced::{keyboard, Element, Program, Subscription}; use iced::{Font, Task}; use rusqlite::Connection; use std::sync::{Arc, Mutex}; use crate::data_provider::sqlite::create_db; +use crate::history::{HistoryMessage, HistoryState}; const DEFAULT_SPACING: f32 = 10.0; @@ -66,6 +65,7 @@ pub enum RootMessage { Repetition(RepetitionMessage), Word(WordMessage), Sync(SyncMessage), + History(HistoryMessage), Keyboard(Event), } @@ -80,6 +80,7 @@ pub enum Page { Repetition(RepetitionState), Word(WordState), Sync(SyncState), + History(HistoryState), PreviousPage, } @@ -146,7 +147,8 @@ impl ScreenState { Repetitions, Repetition, Word, - Sync + Sync, + History ); Task::none() }