Dynamic sync

This commit is contained in:
2026-07-29 13:52:47 +03:00
parent 0b0b9f307d
commit 6906f1416f
2 changed files with 39 additions and 13 deletions
+28 -12
View File
@@ -96,30 +96,46 @@ pub struct AppState {
pub sync_data: AppSettings,
}
impl Default for ScreenState {
fn default() -> Self {
impl AppState {
pub fn new() -> Self {
let path = app_data_dir();
let db_file = path.join("data.db");
let connection = Connection::open(db_file).unwrap();
connection.execute("PRAGMA foreign_keys = ON;", []).unwrap();
let list = load_words(&connection);
let sets = load_sets(&connection);
let groups = load_word_groups(&connection);
let setting = load_settings(&connection);
let state = Arc::new(Mutex::new(AppState {
dictionary: list,
card_sets: sets,
Self{
dictionary: vec![],
card_sets: vec![],
word_groups: vec![],
connection,
word_groups: groups,
sync_data: setting,
}));
sync_data: AppSettings { key: None },
}
}
}
impl Default for ScreenState {
fn default() -> Self {
let mut state = AppState::new();
fill_state(&mut state);
let state = Arc::new(Mutex::new(state));
ScreenState {
stack: vec![Selector(SelectorState::new(state.clone()))],
}
}
}
fn fill_state(mut state: &mut AppState) {
let list = load_words(&state.connection);
let sets = load_sets(&state.connection);
let groups = load_word_groups(&state.connection);
let setting = load_settings(&state.connection);
state.dictionary = list;
state.card_sets = sets;
state.word_groups = groups;
state.sync_data = setting
}
fn load_settings(connection: &Connection) -> AppSettings {
let key = get_setting("SYNC_KEY".to_string(), connection);
AppSettings { key }
+11 -1
View File
@@ -2,7 +2,7 @@ use crate::data_provider::settings::{delete_settings, set_setting};
use crate::dictionary::app_data_dir;
use crate::sync::SyncMessage::NextAnimation;
use crate::Page::PreviousPage;
use crate::{AppState, NavigatedPage, Page, RootMessage, DEFAULT_SPACING};
use crate::{fill_state, AppState, NavigatedPage, Page, RootMessage, DEFAULT_SPACING};
use iced::widget::button::danger;
use iced::widget::container::rounded_box;
use iced::widget::{button, column, container, progress_bar, row, space, text};
@@ -130,6 +130,16 @@ impl SyncState {
}
SyncMessage::NetworkFinished => {
self.frozen = false;
let mut updated_state = AppState::new();
fill_state(&mut updated_state);
let mut state = self.state.lock().unwrap();
state.sync_data = updated_state.sync_data;
state.connection = updated_state.connection;
state.card_sets = updated_state.card_sets;
state.dictionary = updated_state.dictionary;
state.word_groups = updated_state.word_groups;
}
SyncMessage::Disable => {}
SyncMessage::DisableSync => {