diff --git a/rslib/src/decks/mod.rs b/rslib/src/decks/mod.rs index d16ebac49..44b5d9e59 100644 --- a/rslib/src/decks/mod.rs +++ b/rslib/src/decks/mod.rs @@ -31,6 +31,7 @@ pub(crate) use name::immediate_parent_name; pub use name::NativeDeckName; pub use schema11::DeckSchema11; +use crate::deckconfig::DeckConfig; use crate::define_newtype; use crate::error::FilteredDeckError; use crate::markdown::render_markdown; @@ -89,6 +90,16 @@ impl Deck { } } + /// Get the effective desired retention value for a deck. + /// Returns deck-specific desired retention if available, otherwise falls + /// back to config default. + pub fn effective_desired_retention(&self, config: &DeckConfig) -> f32 { + self.normal() + .ok() + .and_then(|d| d.desired_retention) + .unwrap_or(config.inner.desired_retention) + } + // used by tests at the moment #[allow(dead_code)] diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index 53f16c753..6ff8c6e2d 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -445,14 +445,7 @@ impl Collection { .or_not_found(card.deck_id)?; let config = self.home_deck_config(deck.config_id(), card.original_deck_id)?; - // Get deck-specific desired retention if available, otherwise use config - // default - let desired_retention = deck - .normal() - .ok() - .and_then(|d| d.desired_retention) - .unwrap_or(config.inner.desired_retention); - + let desired_retention = deck.effective_desired_retention(&config); let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs); let fsrs_next_states = if fsrs_enabled { let params = config.fsrs_params(); diff --git a/rslib/src/scheduler/fsrs/memory_state.rs b/rslib/src/scheduler/fsrs/memory_state.rs index a61e737b5..199b19329 100644 --- a/rslib/src/scheduler/fsrs/memory_state.rs +++ b/rslib/src/scheduler/fsrs/memory_state.rs @@ -215,11 +215,7 @@ impl Collection { // Get deck-specific desired retention if available, otherwise use config // default - let desired_retention = deck - .normal() - .ok() - .and_then(|d| d.desired_retention) - .unwrap_or(config.inner.desired_retention); + let desired_retention = deck.effective_desired_retention(&config); let historical_retention = config.inner.historical_retention; let params = config.fsrs_params();