diff --git a/benches/split_bench.rs b/benches/split_bench.rs index e15b4e7..3ecfd90 100644 --- a/benches/split_bench.rs +++ b/benches/split_bench.rs @@ -1,4 +1,5 @@ -use criterion::{Criterion, black_box, criterion_group, criterion_main}; +use std::hint::black_box; +use criterion::{Criterion, criterion_group, criterion_main}; fn bench_split(c: &mut Criterion) { let input = "data_1"; diff --git a/src/data_provider/card_sets.rs b/src/data_provider/card_sets.rs index 00f75fe..1e1e883 100644 --- a/src/data_provider/card_sets.rs +++ b/src/data_provider/card_sets.rs @@ -1,4 +1,4 @@ -use crate::lang::{DeckSettings, INVALID_ID, OrderMode}; +use crate::lang::{DeckSettings, OrderMode}; use rusqlite::Connection; diff --git a/src/data_provider/card_stats.rs b/src/data_provider/card_stats.rs index 888f030..068612e 100644 --- a/src/data_provider/card_stats.rs +++ b/src/data_provider/card_stats.rs @@ -1,4 +1,4 @@ -use crate::lang::{CardStatistics, DeckSettings, INVALID_ID}; +use crate::lang::{CardStatistics, DeckSettings}; use rusqlite::Connection; use std::time::Instant; diff --git a/src/data_provider/words.rs b/src/data_provider/words.rs index 0d3e649..e20eff5 100644 --- a/src/data_provider/words.rs +++ b/src/data_provider/words.rs @@ -1,5 +1,5 @@ -use crate::lang::{INVALID_ID, WordData, WordGroup}; -use rusqlite::{Connection, params}; +use crate::lang::{WordData, WordGroup}; +use rusqlite::{params, Connection}; use std::collections::HashMap; pub fn add_word(word: &mut WordData, connection: &Connection) { diff --git a/src/dictionary.rs b/src/dictionary.rs index 73182dc..e60318c 100644 --- a/src/dictionary.rs +++ b/src/dictionary.rs @@ -2,7 +2,7 @@ use crate::data_provider::words::{delete_group, delete_word, update_group, updat use crate::dictionary::DictionaryMessage::*; use crate::dictionary_test::DictionaryQuizState; use crate::import::ImportState; -use crate::lang::{INVALID_ID, WordData, WordGroup}; +use crate::lang::{WordData, WordGroup}; use crate::navigation::Page::{Import, Word}; use crate::navigation::{NavigatedPage, Page}; use crate::styling::*; diff --git a/src/lang.rs b/src/lang.rs index 182650b..ee2f99d 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -26,7 +26,7 @@ const MAX_HISTORY_LEN_PART: f32 = 0.33; const MAX_SCORE: u8 = 25; const FADE_PER_DAY: f32 = 0.95; #[derive(Clone, PartialEq, Eq, Debug, Hash, Copy)] -pub(crate) struct Id(u32); +pub struct Id(u32); pub const INVALID_ID: Id = Id(0); impl FromStr for Id { type Err = ParseIntError; @@ -650,9 +650,11 @@ impl DeckSettings { open_mode: OrderMode::Default, } } - pub(crate) fn check_filter(&self) -> bool { + pub fn check_filter(&self) -> bool { + let time = Instant::now(); let engine = Engine::new(); let ast = engine.compile(&self.filter); + println!("Compile time is {:?}", time.elapsed()); ast.is_ok() } pub fn get_word_list(&self, state: &AppState) -> Vec { diff --git a/src/main.rs b/src/main.rs index 479f092..297eafd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,10 +32,10 @@ use iced::{Font, window}; use iced::{Subscription, Theme, keyboard}; use iced_core::Size; use iced_core::window::Position; -use iced_core::window::settings::PlatformSpecific; use mimalloc::MiMalloc; use rusqlite::Connection; - +#[cfg(target_os = "linux")] +use iced_core::window::settings::PlatformSpecific; #[global_allocator] static GLOBAL: MiMalloc = MiMalloc; diff --git a/src/repetition_settings.rs b/src/repetition_settings.rs index 65f6c6b..366a04f 100644 --- a/src/repetition_settings.rs +++ b/src/repetition_settings.rs @@ -9,15 +9,17 @@ use iced::widget::button::danger; use iced::widget::{button, column, row, scrollable, space, text, text_input}; use iced::{Element, Task}; use iced_core::Length::Fill; -use iced_core::Padding; +use iced_core::{color, Padding, Theme}; use std::sync::{Arc, Mutex}; use std::time::Duration; +use iced::widget::text_input::Catalog; pub struct RepetitionSettingsState { set: DeckSettings, index: usize, state: Arc>, real_delete: bool, + correct_filter: bool, } impl RepetitionSettingsState { @@ -27,11 +29,14 @@ impl RepetitionSettingsState { let local_state = p1.lock().unwrap(); set = local_state.decks[index].clone(); } + let filter_state = set.check_filter(); + RepetitionSettingsState { index, set, state: p1, real_delete: false, + correct_filter: filter_state, } } } @@ -65,6 +70,7 @@ impl NavigatedPage for RepetitionSettingsState { } SetFilter(new) => { self.set.filter = new; + self.correct_filter = self.set.check_filter(); } TryFilter => { let state = self.state.lock().unwrap(); @@ -111,7 +117,13 @@ impl NavigatedPage for RepetitionSettingsState { .spacing(QUARTER_SPACING), column![ text!("Фильтр"), - text_input("", &self.set.filter).on_input(SetFilter), + text_input("", &self.set.filter).style(|x, status| { + let mut primary = Theme::default()(x, status); + if !self.correct_filter { + primary.border.color = color!(255, 255, 0); + } + primary + }).on_input(SetFilter), button("Проверить фильтр") .style(jl_button) .on_press(TryFilter),