From e861364092e94d66a043f78943e0551472ec6345 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Thu, 24 Apr 2025 10:32:31 +0100 Subject: [PATCH] Fix/Calculate missing memory states on simulate (#3940) * Fix: Recalculate memory states on simulate * Fix: Wrong cards included * Save states to cards * ./check * Update rslib/src/scheduler/fsrs/simulator.rs --- rslib/src/scheduler/fsrs/simulator.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/rslib/src/scheduler/fsrs/simulator.rs b/rslib/src/scheduler/fsrs/simulator.rs index 34bec1317..eee625770 100644 --- a/rslib/src/scheduler/fsrs/simulator.rs +++ b/rslib/src/scheduler/fsrs/simulator.rs @@ -123,8 +123,22 @@ impl Collection { .col .storage .get_revlog_entries_for_searched_cards_in_card_order()?; - let cards = guard.col.storage.all_searched_cards()?; + let mut cards = guard.col.storage.all_searched_cards()?; drop(guard); + fn is_included_card(c: &Card) -> bool { + c.queue != CardQueue::Suspended + && c.queue != CardQueue::PreviewRepeat + && c.queue != CardQueue::New + } + // 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 days_elapsed = self.timing_today().unwrap().days_elapsed as i32; let new_cards = cards .iter() @@ -133,7 +147,7 @@ impl Collection { + req.deck_size as usize; let mut converted_cards = cards .into_iter() - .filter(|c| c.queue != CardQueue::Suspended && c.queue != CardQueue::PreviewRepeat) + .filter(is_included_card) .filter_map(|c| Card::convert(c, days_elapsed)) .collect_vec(); let introduced_today_count = self