Repo integration #15

Merged
micialware merged 35 commits from repo-integration into master 2026-09-09 12:47:42 +03:00
10 changed files with 24 additions and 27 deletions
Showing only changes of commit a68e56e861 - Show all commits

No files matched your search

+1 -1
View File
@@ -8,7 +8,7 @@ use crate::core::srs::{
WordOpenMode, WorstWordsSRSModule, WordOpenMode, WorstWordsSRSModule,
}; };
use crate::data::entities::*; use crate::data::entities::*;
use crate::data_provider::card_states::{update_stat_score, CardStateRepository, CardStateRepositoryInner}; use crate::data_provider::card_states::{CardStateRepositoryInner};
use crate::notification::{MaybeError, NotificationData}; use crate::notification::{MaybeError, NotificationData};
use log::info; use log::info;
use rhai::{Engine, Scope}; use rhai::{Engine, Scope};
+1 -1
View File
@@ -3,7 +3,7 @@ pub mod repositories;
use rusqlite::ToSql; use rusqlite::ToSql;
use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef}; use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef};
use std::fmt::{Display, Formatter, write}; use std::fmt::{Display, Formatter};
use std::num::ParseIntError; use std::num::ParseIntError;
use std::str::FromStr; use std::str::FromStr;
+1 -3
View File
@@ -1,6 +1,4 @@
use crate::app::AppState; use crate::core::srs::{FADE_PER_DAY, MAX_SCORE, WordOpenMode};
use crate::core::srs::{FADE_PER_DAY, MAX_SCORE, OrderMode, WordOpenMode};
use crate::data::repositories::Repository;
use crate::data::{INVALID_ID, Id}; use crate::data::{INVALID_ID, Id};
use chrono::{DateTime, NaiveDate, Utc}; use chrono::{DateTime, NaiveDate, Utc};
use fsrs::MemoryState; use fsrs::MemoryState;
+2 -4
View File
@@ -1,5 +1,6 @@
use crate::data::Id; use crate::data::Id;
use crate::data::entities::{EntityData, EntityHandle, WordData}; use crate::data::entities::{EntityData, EntityHandle};
use crate::data_provider::sqlite::SqliteConnection;
use crate::helpers::into_result; use crate::helpers::into_result;
use crate::notification::{MaybeError, NotificationData}; use crate::notification::{MaybeError, NotificationData};
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
@@ -9,10 +10,7 @@ use rayon::iter::ParallelIterator;
use rusqlite::Connection; use rusqlite::Connection;
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ops::{Deref, Index, IndexMut}; use std::ops::{Deref, Index, IndexMut};
use std::rc::Rc;
use std::slice::Iter;
use std::sync::Arc; use std::sync::Arc;
use crate::data_provider::sqlite::SqliteConnection;
pub trait Repository<T, D> pub trait Repository<T, D>
where where
+1 -1
View File
@@ -1,5 +1,5 @@
use crate::data::Id; use crate::data::Id;
use crate::data::entities::{CardState, EntityData}; use crate::data::entities::{EntityData};
use crate::data::repositories::{BatchedDbLayer, DbLayer}; use crate::data::repositories::{BatchedDbLayer, DbLayer};
use crate::notification::MaybeError; use crate::notification::MaybeError;
use crate::notification::NotificationData::{DbLoadError, DbSaveError}; use crate::notification::NotificationData::{DbLoadError, DbSaveError};
+2 -3
View File
@@ -1,8 +1,7 @@
use crate::data::entities::{DeckSettings, WordGroup}; use crate::data::entities::WordGroup;
use crate::data::repositories::{DataRepository, DataRepositoryInner};
use crate::data_provider::{SqliteDbLayer, TableAccessQuerySet}; use crate::data_provider::{SqliteDbLayer, TableAccessQuerySet};
use rusqlite::{Error, Params, Row}; use rusqlite::{Error, Params, Row};
use crate::data::repositories::{DataRepository, DataRepositoryInner};
use crate::data_provider::decks::DeckQuerySet;
pub type WordGroupRepository = DataRepository<WordGroup, WordGroupDataLayer>; pub type WordGroupRepository = DataRepository<WordGroup, WordGroupDataLayer>;
pub type WordGroupRepositoryInner = DataRepositoryInner<WordGroup, WordGroupDataLayer>; pub type WordGroupRepositoryInner = DataRepositoryInner<WordGroup, WordGroupDataLayer>;
+3 -5
View File
@@ -1,14 +1,12 @@
use crate::data::entities::{WordData, WordGroup}; use crate::data::entities::{WordData, WordGroup};
use crate::data::repositories::{DataRepository, DataRepositoryInner};
use crate::data_provider::{SqliteDbLayer, TableAccessQuerySet}; use crate::data_provider::{SqliteDbLayer, TableAccessQuerySet};
use crate::notification::NotificationData::{DbLoadError, DbSaveError}; use crate::notification::NotificationData::{DbLoadError, DbSaveError};
use crate::notification::{MaybeError, NotificationData}; use crate::notification::{MaybeError, NotificationData};
use litemap::LiteMap;
use rusqlite::{Connection, Error, Params, Row, params}; use rusqlite::{Connection, Error, Params, Row, params};
use std::collections::HashMap;
use crate::data::repositories::{BatchedDbLayer, DataRepository, DataRepositoryInner};
pub type WordRepository = DataRepository<WordData, SqliteDbLayer<WordData, WordQuerySet>>; pub type WordRepository = DataRepository<WordData, WordDataLayer>;
pub type WordRepositoryInner = DataRepositoryInner<WordData, SqliteDbLayer<WordData, WordQuerySet>>; pub type WordRepositoryInner = DataRepositoryInner<WordData, WordDataLayer>;
pub type WordDataLayer = SqliteDbLayer<WordData, WordQuerySet>; pub type WordDataLayer = SqliteDbLayer<WordData, WordQuerySet>;
#[derive(Clone)] #[derive(Clone)]
pub struct WordQuerySet; pub struct WordQuerySet;
+2 -1
View File
@@ -2,7 +2,8 @@ use crate::app::AppState;
use crate::data::Id; use crate::data::Id;
use crate::data::entities::{EntityHandle, WordData, WordGroup}; use crate::data::entities::{EntityHandle, WordData, WordGroup};
use crate::data::repositories::{Query, Repository}; use crate::data::repositories::{Query, Repository};
use crate::data_provider::words::{WordRepository, WordDataLayer, WordQuerySet, WordRepositoryInner}; use crate::data_provider::words::WordDataLayer;
use crate::data_provider::words::WordRepositoryInner;
use crate::navigation::Page::{Import, Word}; use crate::navigation::Page::{Import, Word};
use crate::navigation::{NavigatedPage, Page, RootMessage}; use crate::navigation::{NavigatedPage, Page, RootMessage};
use crate::pages::dictionary::DictionaryMessage::*; use crate::pages::dictionary::DictionaryMessage::*;
+3 -2
View File
@@ -1,7 +1,8 @@
use crate::app::AppState; use crate::app::AppState;
use crate::data::entities::{EntityData, WordData, WordGroup}; use crate::data::entities::EntityData;
use crate::data::entities::WordData;
use crate::data::entities::WordGroup;
use crate::data_provider::import::{ImportData, ImportGroup, get_words_of_group, load_groups}; use crate::data_provider::import::{ImportData, ImportGroup, get_words_of_group, load_groups};
use crate::data_provider::words::{add_group, add_words};
use crate::fs::*; use crate::fs::*;
use crate::navigation::{NavigatedPage, Page, RootMessage}; use crate::navigation::{NavigatedPage, Page, RootMessage};
use crate::notification::NotificationData::OpenFileError; use crate::notification::NotificationData::OpenFileError;
+8 -6
View File
@@ -9,17 +9,16 @@ use crate::navigation::{KeyPressedPage, NavigatedPage, Page, RootMessage};
use crate::notification::{MaybeError, NotificationData}; use crate::notification::{MaybeError, NotificationData};
use crate::styling::*; use crate::styling::*;
use crate::{push_error, push_error_task}; use crate::{push_error, push_error_task};
use chrono::Local;
use iced::alignment::Horizontal::Center; use iced::alignment::Horizontal::Center;
use iced::keyboard::key::Physical::Code; use iced::keyboard::key::Physical::Code;
use iced::widget::text::Style; use iced::widget::text::Style;
use iced::widget::{Column, button, column, container, row, rule, space, text, tooltip}; use iced::widget::{Column, button, column, container, row, rule, space, text, tooltip};
use iced::{Element, Fill, Task, Theme, alignment, keyboard}; use iced::{Element, Fill, Task, Theme, alignment, keyboard};
use parking_lot::Mutex;
use rodio::MixerDeviceSink; use rodio::MixerDeviceSink;
use std::collections::HashSet; use std::collections::HashSet;
use std::sync::Arc; use std::sync::Arc;
use tokio::task::spawn_blocking; use tokio::task::spawn_blocking;
use crate::data::repositories::Repository;
pub struct RepetitionState { pub struct RepetitionState {
state: AppState, state: AppState,
@@ -108,7 +107,8 @@ impl RepetitionState {
) -> Result<RepetitionState, NotificationData> { ) -> Result<RepetitionState, NotificationData> {
let mut card_set = DeckData::new(&set, state.clone())?; let mut card_set = DeckData::new(&set, state.clone())?;
let (word, stat) = card_set.next(); let (word, stat) = card_set.next();
let word = state.dictionary.read().get_static(word).unwrap();
let stat = state.card_states.read().get_static(stat).unwrap();
let sink_handle = if set.forward.contains("speech") || set.backward.contains("speech") { let sink_handle = if set.forward.contains("speech") || set.backward.contains("speech") {
rodio::DeviceSinkBuilder::open_default_sink().ok() rodio::DeviceSinkBuilder::open_default_sink().ok()
} else { } else {
@@ -150,9 +150,11 @@ impl RepetitionState {
self.open = false; self.open = false;
self.opened.insert(self.current_word.id); self.opened.insert(self.current_word.id);
let next = self.set.next(); let (word, state) = self.set.next();
self.current_word = next.0; let word = self.state.dictionary.read().get_static(word).unwrap();
self.current_statistic = next.1; let stat = self.state.card_states.read().get_static(state).unwrap();
self.current_word = word;
self.current_statistic = stat;
if self.settings.require_speech() && self.sink.is_some() { if self.settings.require_speech() && self.sink.is_some() {
let sink = self.sink.clone(); let sink = self.sink.clone();