Added repositories into AppState
This commit is contained in:
1 parent
6c20561ede
commit
11d5144db5
9 files changed
+67
-23
No files matched your search
+19
-17
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user