diff --git a/src/data/entities.rs b/src/data/entities.rs index b2eb322..5b1b6a0 100644 --- a/src/data/entities.rs +++ b/src/data/entities.rs @@ -3,8 +3,6 @@ use crate::core::srs::{FADE_PER_DAY, MAX_SCORE, OrderMode, WordOpenMode}; use crate::data::{INVALID_ID, Id}; use chrono::{DateTime, NaiveDate, Utc}; use fsrs::MemoryState; -use crate::notification::MaybeError; -use chrono::{DateTime, Utc}; use log::info; use rayon::prelude::*; use rhai::{Engine, Scope}; diff --git a/src/data/repositories.rs b/src/data/repositories.rs index 0c0e54b..93356f0 100644 --- a/src/data/repositories.rs +++ b/src/data/repositories.rs @@ -20,6 +20,7 @@ where fn get_mut(&mut self, handle: &mut EntityHandle) -> Option<&mut T>; fn handle_by_id(&self, id: Id) -> EntityHandle; fn create(&mut self, new: T) -> EntityHandle; + fn create_now(&mut self, new: T) -> Result, NotificationData>; fn save(&mut self, entity: &mut EntityHandle) -> MaybeError; fn delete(&mut self, handle: EntityHandle) -> MaybeError; fn init(&mut self) -> MaybeError; @@ -317,6 +318,14 @@ impl> Repository for DataRepositoryIn entity } + fn create_now(&mut self, mut new: T) -> Result, NotificationData> { + self.data_layer.add_entity(&mut new, &self.connection.read())?; + let index = self.cache.len(); + let handle = EntityHandle::new(new.id(), index, true); + self.cache.push(new); + Ok(handle) + } + fn save(&mut self, entity: &mut EntityHandle) -> MaybeError { let original_state = entity.clone(); if entity.real() {