When updating all FSRS parameters at once, exclude suspended cards

This commit is contained in:
Damien Elmes 2024-03-20 12:56:05 +07:00
parent f413274fba
commit 656cfe0b9c
2 changed files with 9 additions and 4 deletions

View file

@ -22,7 +22,9 @@ use crate::scheduler::fsrs::memory_state::UpdateMemoryStateEntry;
use crate::scheduler::fsrs::memory_state::UpdateMemoryStateRequest; use crate::scheduler::fsrs::memory_state::UpdateMemoryStateRequest;
use crate::scheduler::fsrs::weights::ignore_revlogs_before_ms_from_config; use crate::scheduler::fsrs::weights::ignore_revlogs_before_ms_from_config;
use crate::search::JoinSearches; use crate::search::JoinSearches;
use crate::search::Negated;
use crate::search::SearchNode; use crate::search::SearchNode;
use crate::search::StateKind;
use crate::storage::comma_separated_ids; use crate::storage::comma_separated_ids;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -267,9 +269,12 @@ impl Collection {
None None
} }
}); });
let search = SearchNode::DeckIdsWithoutChildren(comma_separated_ids(&search))
.and(SearchNode::State(StateKind::Suspended).negated())
.try_into_search()?;
Ok(UpdateMemoryStateEntry { Ok(UpdateMemoryStateEntry {
req: weights, req: weights,
search: SearchNode::DeckIdsWithoutChildren(comma_separated_ids(&search)), search,
ignore_before: config ignore_before: config
.map(ignore_revlogs_before_ms_from_config) .map(ignore_revlogs_before_ms_from_config)
.unwrap_or(Ok(0.into()))?, .unwrap_or(Ok(0.into()))?,

View file

@ -18,6 +18,7 @@ use crate::scheduler::fsrs::weights::single_card_revlog_to_items;
use crate::scheduler::fsrs::weights::Weights; use crate::scheduler::fsrs::weights::Weights;
use crate::scheduler::states::fuzz::with_review_fuzz; use crate::scheduler::states::fuzz::with_review_fuzz;
use crate::search::Negated; use crate::search::Negated;
use crate::search::Node;
use crate::search::SearchNode; use crate::search::SearchNode;
use crate::search::StateKind; use crate::search::StateKind;
@ -38,7 +39,7 @@ pub(crate) struct UpdateMemoryStateRequest {
pub(crate) struct UpdateMemoryStateEntry { pub(crate) struct UpdateMemoryStateEntry {
pub req: Option<UpdateMemoryStateRequest>, pub req: Option<UpdateMemoryStateRequest>,
pub search: SearchNode, pub search: Node,
pub ignore_before: TimestampMillis, pub ignore_before: TimestampMillis,
} }
@ -60,8 +61,7 @@ impl Collection {
ignore_before, ignore_before,
} in entries } in entries
{ {
let search = let search = SearchBuilder::all([search, SearchNode::State(StateKind::New).negated()]);
SearchBuilder::all([search.into(), SearchNode::State(StateKind::New).negated()]);
let revlog = self.revlog_for_srs(search)?; let revlog = self.revlog_for_srs(search)?;
let reschedule = req.as_ref().map(|e| e.reschedule).unwrap_or_default(); let reschedule = req.as_ref().map(|e| e.reschedule).unwrap_or_default();
let last_revlog_info = if reschedule { let last_revlog_info = if reschedule {