From fe5dfe9ec23130fa4616a4e91f10e5216df19d9d Mon Sep 17 00:00:00 2001 From: Jarrett Ye Date: Fri, 27 Jun 2025 17:50:29 +0800 Subject: [PATCH] Fix/update card.decay in card_state_updater (#4127) --- rslib/src/scheduler/answering/mod.rs | 5 ++++- rslib/src/scheduler/fsrs/memory_state.rs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index d498f7eaf..8ae1518d0 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -33,6 +33,7 @@ use crate::deckconfig::LeechAction; use crate::decks::Deck; use crate::prelude::*; use crate::scheduler::fsrs::memory_state::fsrs_item_for_memory_state; +use crate::scheduler::fsrs::memory_state::get_decay_from_params; use crate::scheduler::states::PreviewState; use crate::search::SearchNode; @@ -433,7 +434,9 @@ impl Collection { let config = self.home_deck_config(deck.config_id(), card.original_deck_id)?; let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs); let fsrs_next_states = if fsrs_enabled { - let fsrs = FSRS::new(Some(config.fsrs_params()))?; + let params = config.fsrs_params(); + let fsrs = FSRS::new(Some(params))?; + card.decay = Some(get_decay_from_params(params)); if card.memory_state.is_none() && card.ctype != CardType::New { // Card has been moved or imported into an FSRS deck after params were set, // and will need its initial memory state to be calculated based on review diff --git a/rslib/src/scheduler/fsrs/memory_state.rs b/rslib/src/scheduler/fsrs/memory_state.rs index b592e4da4..425d8da69 100644 --- a/rslib/src/scheduler/fsrs/memory_state.rs +++ b/rslib/src/scheduler/fsrs/memory_state.rs @@ -32,7 +32,7 @@ pub struct ComputeMemoryProgress { /// Helper function to determine the appropriate decay value based on FSRS /// parameters -fn get_decay_from_params(params: &[f32]) -> f32 { +pub(crate) fn get_decay_from_params(params: &[f32]) -> f32 { if params.is_empty() { FSRS6_DEFAULT_DECAY // default decay for FSRS-6 } else if params.len() < 21 {