From f61f93717ceeccfbff36fde960184ea4f68aa2c4 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Fri, 11 Sep 2026 13:28:23 +0300 Subject: [PATCH] Custom fields repo into AppState --- sql/custom_fields.sql | 2 +- src/app.rs | 4 ++++ src/data/entities.rs | 11 +++++++++++ src/data_provider/custom_fields.rs | 1 + src/data_provider/history.rs | 4 ++-- src/data_provider/sqlite.rs | 1 + 6 files changed, 20 insertions(+), 3 deletions(-) diff --git a/sql/custom_fields.sql b/sql/custom_fields.sql index ffc27b4..3db3e87 100644 --- a/sql/custom_fields.sql +++ b/sql/custom_fields.sql @@ -2,5 +2,5 @@ create table custom_fields ( id integer primary key, name text not null, - custom_fields text not null + identifier text not null ); \ No newline at end of file diff --git a/src/app.rs b/src/app.rs index 9254807..84a3ada 100644 --- a/src/app.rs +++ b/src/app.rs @@ -17,6 +17,7 @@ use log::info; use parking_lot::{Mutex, RwLock}; use rusqlite::Connection; use std::sync::Arc; +use crate::data_provider::custom_fields::CustomFieldRepository; pub const USER_FONT: Font = Font::with_name("Noto Sans JP"); @@ -65,6 +66,7 @@ pub struct AppState { pub decks: DeckRepository, pub word_groups: WordGroupRepository, pub card_states: CardStateRepository, + pub custom_fields: CustomFieldRepository, pub connection: Arc>, pub sync_data: Arc>, pub history: HistoryRepository, @@ -85,6 +87,7 @@ impl AppState { word_groups: WordGroupRepository::new(connection.clone()), card_states: CardStateRepository::new(connection.clone()), history: HistoryRepository::new(connection.clone()), + custom_fields: CustomFieldRepository::new(connection.clone()), sync_data: Arc::new(RwLock::new(AppSettings { key: None, auto_web_fetch: false, @@ -104,6 +107,7 @@ pub fn fill_state(state: &mut AppState) { state.decks.write().start().unwrap(); state.history.write().start().unwrap(); state.card_states.write().start().unwrap(); + state.custom_fields.write().start().unwrap(); state.sync_data = Arc::new(RwLock::new(setting)) } diff --git a/src/data/entities.rs b/src/data/entities.rs index dcedb50..b16b6fb 100644 --- a/src/data/entities.rs +++ b/src/data/entities.rs @@ -196,12 +196,23 @@ impl CardState { } } +#[derive(Clone)] pub struct CustomField { pub id: Id, pub name: String, pub identifier: String, } +impl EntityData for CustomField { + fn id(&self) -> Id { + self.id + } + + fn set_id(&mut self, id: Id) { + self.id = id; + } +} + pub struct EntityHandle { pub(crate) id: Id, index: u32, diff --git a/src/data_provider/custom_fields.rs b/src/data_provider/custom_fields.rs index 0b01770..4ea23a9 100644 --- a/src/data_provider/custom_fields.rs +++ b/src/data_provider/custom_fields.rs @@ -6,6 +6,7 @@ use rusqlite::{Error, Params, Row}; pub type CustomFieldRepository = DataRepository; pub type CustomFieldRepositoryInner = DataRepositoryInner; pub type CustomFieldDbLayer = SqliteDbLayer; +#[derive(Clone)] pub struct CustomFieldsQuerySet; impl TableAccessQuerySet for CustomFieldsQuerySet { fn load() -> &'static str { diff --git a/src/data_provider/history.rs b/src/data_provider/history.rs index 7b86513..1a14eba 100644 --- a/src/data_provider/history.rs +++ b/src/data_provider/history.rs @@ -48,7 +48,7 @@ impl TableAccessQuerySet for HistoryQuerySet { ( entity.deck_id, entity.word_id, - entity.timestamp, + entity.timestamp.timestamp(), entity.answer, entity.before, entity.after, @@ -60,7 +60,7 @@ impl TableAccessQuerySet for HistoryQuerySet { ( entity.deck_id, entity.word_id, - entity.timestamp, + entity.timestamp.timestamp(), entity.answer, entity.before, entity.after, diff --git a/src/data_provider/sqlite.rs b/src/data_provider/sqlite.rs index 617033f..d3e7262 100644 --- a/src/data_provider/sqlite.rs +++ b/src/data_provider/sqlite.rs @@ -64,6 +64,7 @@ fn make_history(conn: &Connection) -> Result<(), rusqlite::Error> { fn make_custom_fields(conn: &Connection) -> Result<(), rusqlite::Error> { let query = include_str!("../../sql/custom_fields.sql"); conn.execute(query, ())?; + conn.execute("insert into custom_fields (name, identifier) values (\"Чтение\", \"reading\"), (\"Описание\", \"description\"), (\"Пример использования\", \"context\")", ())?; Ok(()) }