Added repositories into AppState

This commit is contained in:
micialware committed 2026-08-31 12:12:14 +03:00
1 parent 6c20561ede
commit 11d5144db5
9 files changed
+67 -23

No files matched your search

+19 -17
View File
@@ -1,11 +1,9 @@
use std::sync::Arc;
use crate::data::Id;
use crate::data::entities::DeckSettings;
use crate::data::entities::{WordData, WordGroup};
use crate::data_provider::decks::load_sets;
use crate::data_provider::decks::{DeckRepository};
use crate::data_provider::settings::get_setting;
use crate::data_provider::sqlite::{SqliteConnection};
use crate::data_provider::words::{load_word_groups, load_words};
use crate::data_provider::words::{WordRepository};
use crate::navigation::RootMessage::Keyboard;
use crate::navigation::{AppSettings, RootMessage, ScreenState};
use chrono::NaiveDate;
@@ -18,6 +16,9 @@ use iced_core::{Font, Size, Theme};
use log::info;
use parking_lot::RwLock;
use rusqlite::Connection;
use crate::data::repositories::Repository;
use crate::data_provider::word_groups::WordGroupRepository;
pub const USER_FONT: Font = Font::with_name("Noto Sans JP");
pub fn start() -> iced::Result {
@@ -61,9 +62,9 @@ fn subscription(_state: &ScreenState) -> Subscription<RootMessage> {
#[derive(Clone)]
pub struct AppState {
pub dictionary: Vec<WordData>,
pub decks: Vec<DeckSettings>,
pub word_groups: Vec<WordGroup>,
pub dictionary: WordRepository,
pub decks: DeckRepository,
pub word_groups: WordGroupRepository,
pub connection: Arc<RwLock<SqliteConnection>>,
pub sync_data: Arc<RwLock<AppSettings>>,
pub activity: HashMap<Id, Vec<(NaiveDate, u32)>>,
@@ -77,30 +78,31 @@ impl Default for AppState {
impl AppState {
pub fn new() -> Self {
let connection = Arc::new(RwLock::new(SqliteConnection::default()));
Self {
dictionary: vec![],
decks: vec![],
word_groups: vec![],
connection: Arc::new(RwLock::new(Default::default())),
dictionary: WordRepository::new(connection.clone()),
decks: DeckRepository::new(connection.clone()),
word_groups: WordGroupRepository::new(connection.clone()),
sync_data: Arc::new(RwLock::new(AppSettings {
key: None,
auto_web_fetch: false,
})),
activity: Default::default(),
connection,
}
}
}
pub fn fill_state(state: &mut AppState) {
let connection = state.connection.read();
let list = load_words(&connection);
let sets = load_sets(&connection);
let groups = load_word_groups(&connection);
let setting = load_settings(&connection);
state.dictionary = list.unwrap_or_default();
state.decks = sets.unwrap_or_default();
state.word_groups = groups.unwrap_or_default();
state.word_groups.write().start().unwrap();
state.dictionary.write().start().unwrap();
state.decks.write().start().unwrap();
state.sync_data = Arc::new(RwLock::new(setting))
}