calculate accurate retrievability in card info (#4034)

This commit is contained in:
Jarrett Ye 2025-05-26 21:25:27 +08:00 committed by GitHub
parent 16c5eaf00a
commit dfee38898d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 11 additions and 9 deletions

2
Cargo.lock generated
View file

@ -2295,7 +2295,7 @@ dependencies = [
[[package]] [[package]]
name = "fsrs" name = "fsrs"
version = "4.0.0" version = "4.0.0"
source = "git+https://github.com/open-spaced-repetition/fsrs-rs.git?rev=092c20bac7d9239a991ae5b561556ad34c706c16#092c20bac7d9239a991ae5b561556ad34c706c16" source = "git+https://github.com/open-spaced-repetition/fsrs-rs.git?rev=33ec3ee4d5d73e704633469cf5bf1a42e620a524#33ec3ee4d5d73e704633469cf5bf1a42e620a524"
dependencies = [ dependencies = [
"burn", "burn",
"itertools 0.14.0", "itertools 0.14.0",

View file

@ -37,7 +37,7 @@ rev = "184b2ca50ed39ca43da13f0b830a463861adb9ca"
[workspace.dependencies.fsrs] [workspace.dependencies.fsrs]
# version = "3.0.0" # version = "3.0.0"
git = "https://github.com/open-spaced-repetition/fsrs-rs.git" git = "https://github.com/open-spaced-repetition/fsrs-rs.git"
rev = "092c20bac7d9239a991ae5b561556ad34c706c16" rev = "33ec3ee4d5d73e704633469cf5bf1a42e620a524"
# path = "../open-spaced-repetition/fsrs-rs" # path = "../open-spaced-repetition/fsrs-rs"
[workspace.dependencies] [workspace.dependencies]

View file

@ -30,19 +30,21 @@ impl Collection {
let (average_secs, total_secs) = average_and_total_secs_strings(&revlog); let (average_secs, total_secs) = average_and_total_secs_strings(&revlog);
let timing = self.timing_today()?; let timing = self.timing_today()?;
let days_elapsed = self let seconds_elapsed = self
.storage .storage
.time_of_last_review(card.id)? .time_of_last_review(card.id)?
.map(|ts| timing.next_day_at.elapsed_days_since(ts)) .map(|ts| timing.now.elapsed_secs_since(ts))
.unwrap_or_default() as u32; .unwrap_or_default() as u32;
let fsrs_retrievability = card let fsrs_retrievability = card
.memory_state .memory_state
.zip(Some(days_elapsed)) .zip(Some(seconds_elapsed))
.zip(Some(card.decay.unwrap_or(FSRS5_DEFAULT_DECAY))) .zip(Some(card.decay.unwrap_or(FSRS5_DEFAULT_DECAY)))
.map(|((state, days), decay)| { .map(|((state, seconds), decay)| {
FSRS::new(None) FSRS::new(None).unwrap().current_retrievability_seconds(
.unwrap() state.into(),
.current_retrievability(state.into(), days, decay) seconds,
decay,
)
}); });
let original_deck = if card.original_deck_id == DeckId(0) { let original_deck = if card.original_deck_id == DeckId(0) {