diff --git a/ftl/core/deck-config.ftl b/ftl/core/deck-config.ftl index 5154f44c1..da3e4ea34 100644 --- a/ftl/core/deck-config.ftl +++ b/ftl/core/deck-config.ftl @@ -533,7 +533,7 @@ deck-config-health-check = Check health when optimizing deck-config-fsrs-bad-fit-warning = Health Check: Your memory is difficult for FSRS to predict. Recommendations: - - Suspend or reformulate leeches. + - Suspend or reformulate any cards you constantly forget. - Use the answer buttons consistently. Keep in mind that "Hard" is a passing grade, not a failing grade. - Understand before you memorize. diff --git a/qt/aqt/sync.py b/qt/aqt/sync.py index 94ce0c8c1..9b29ada20 100644 --- a/qt/aqt/sync.py +++ b/qt/aqt/sync.py @@ -73,7 +73,7 @@ def handle_sync_error(mw: aqt.main.AnkiQt, err: Exception) -> None: elif isinstance(err, Interrupted): # no message to show return - show_warning(str(err)) + show_warning(str(err), parent=mw) def on_normal_sync_timer(mw: aqt.main.AnkiQt) -> None: diff --git a/qt/aqt/utils.py b/qt/aqt/utils.py index 64d057082..43efc513f 100644 --- a/qt/aqt/utils.py +++ b/qt/aqt/utils.py @@ -226,29 +226,45 @@ def ask_user_dialog( ) -def show_info(text: str, callback: Callable | None = None, **kwargs: Any) -> MessageBox: +def show_info( + text: str, + callback: Callable | None = None, + parent: QWidget | None = None, + **kwargs: Any, +) -> MessageBox: "Show a small info window with an OK button." if "icon" not in kwargs: kwargs["icon"] = QMessageBox.Icon.Information return MessageBox( text, callback=(lambda _: callback()) if callback is not None else None, + parent=parent, **kwargs, ) def show_warning( - text: str, callback: Callable | None = None, **kwargs: Any + text: str, + callback: Callable | None = None, + parent: QWidget | None = None, + **kwargs: Any, ) -> MessageBox: "Show a small warning window with an OK button." - return show_info(text, icon=QMessageBox.Icon.Warning, callback=callback, **kwargs) + return show_info( + text, icon=QMessageBox.Icon.Warning, callback=callback, parent=parent, **kwargs + ) def show_critical( - text: str, callback: Callable | None = None, **kwargs: Any + text: str, + callback: Callable | None = None, + parent: QWidget | None = None, + **kwargs: Any, ) -> MessageBox: "Show a small critical error window with an OK button." - return show_info(text, icon=QMessageBox.Icon.Critical, callback=callback, **kwargs) + return show_info( + text, icon=QMessageBox.Icon.Critical, callback=callback, parent=parent, **kwargs + ) def showWarning( diff --git a/rslib/src/scheduler/fsrs/simulator.rs b/rslib/src/scheduler/fsrs/simulator.rs index a26afda9c..005f7ca86 100644 --- a/rslib/src/scheduler/fsrs/simulator.rs +++ b/rslib/src/scheduler/fsrs/simulator.rs @@ -142,10 +142,11 @@ impl Collection { // calculate any missing memory state for c in &mut cards { if is_included_card(c) && c.memory_state.is_none() { - let original = c.clone(); - let new_state = self.compute_memory_state(c.id)?.state; - c.memory_state = new_state.map(Into::into); - self.update_card_inner(c, original, self.usn()?)?; + let fsrs_data = self.compute_memory_state(c.id)?; + c.memory_state = fsrs_data.state.map(Into::into); + c.desired_retention = Some(fsrs_data.desired_retention); + c.decay = Some(fsrs_data.decay); + self.storage.update_card(c)?; } } let days_elapsed = self.timing_today().unwrap().days_elapsed as i32; @@ -293,7 +294,8 @@ impl Collection { ( *result.memorized_cnt_per_day.last().unwrap_or(&0.), result.cost_per_day.iter().sum::(), - result.review_cnt_per_day.iter().sum::() as u32, + result.review_cnt_per_day.iter().sum::() as u32 + + result.learn_cnt_per_day.iter().sum::() as u32, ), )) })