Add navigation to repetition page

This commit is contained in:
2026-04-13 22:25:58 +03:00
parent 8df6eae781
commit a1217f90ec
12 changed files with 674 additions and 121 deletions
+19 -17
View File
@@ -8,15 +8,16 @@ mod repetition;
mod repetitions;
mod selector;
mod writing;
use std::fs::File;
use std::io::Read;
use crate::dictionary::{DictionaryElement, DictionaryMessage, DictionaryState};
mod data_provider;
use crate::data_provider::card_sets::load_sets;
use crate::data_provider::words::{create_db, load_words};
use crate::dictionary::{app_data_dir, DictionaryMessage, DictionaryState};
use crate::dictionary_test::{DictionaryQuizMessage, DictionaryQuizState};
use crate::lang::DictionaryElement;
use crate::quiz::*;
use crate::randomizer::randomizer::{RandomizerMessage, RandomizerState};
use crate::repetition::{RepetitionMessage, RepetitionState};
use crate::repetitions::{RepetitionsMessage, RepetitionsState};
use crate::repetitions::{CardSetSettings, RepetitionsMessage, RepetitionsState};
use crate::selector::*;
use crate::writing::{WritingMessage, WritingState};
use crate::Page::{
@@ -25,6 +26,7 @@ use crate::Page::{
use iced::widget::text;
use iced::Element;
use iced::{Font, Task};
use rusqlite::Connection;
use std::sync::{Arc, Mutex};
fn main() -> iced::Result {
@@ -32,7 +34,8 @@ fn main() -> iced::Result {
.title("Kana learn app")
.font(include_bytes!("../noto.ttf"))
.default_font(Font::with_name("Noto Sans JP"))
.run()
.
run()
}
#[derive(Debug, Clone)]
@@ -65,21 +68,19 @@ pub struct ScreenState {
pub struct AppState {
pub dictionary: Vec<DictionaryElement>,
pub card_sets: Vec<CardSetSettings>,
pub connection: Connection
}
impl Default for ScreenState {
fn default() -> Self {
let mut current_dict = "[]".to_string();
match File::open(dictionary::dict_file()) {
Ok(mut f) => {
current_dict = String::new();
f.read_to_string(&mut current_dict).unwrap();
}
_ => {}
}
let list: Vec<DictionaryElement> = serde_json::from_str(&current_dict).unwrap();
let state = Arc::new(Mutex::new(AppState { dictionary: list }));
let path = app_data_dir();
let db_file = path.join("data.db");
let connection = Connection::open(db_file).unwrap();
let list: Vec<DictionaryElement> = load_words(&connection);
let sets: Vec<CardSetSettings> = load_sets(&connection);
let state = Arc::new(Mutex::new(AppState { dictionary: list, card_sets: sets, connection }));
ScreenState {
stack: vec![Selector(SelectorState::new(state.clone()))],
}
@@ -88,6 +89,7 @@ impl Default for ScreenState {
impl ScreenState {
pub fn boot() -> (ScreenState, Task<RootMessage>) {
create_db();
(ScreenState::default(), Task::none())
}
pub fn update(&mut self, message: RootMessage) -> Task<RootMessage> {