From dfee38898d76a2ddc78262fbeecb813a25920ee5 Mon Sep 17 00:00:00 2001 From: Jarrett Ye Date: Mon, 26 May 2025 21:25:27 +0800 Subject: [PATCH] calculate accurate retrievability in card info (#4034) --- Cargo.lock | 2 +- Cargo.toml | 2 +- rslib/src/stats/card.rs | 16 +++++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eea0017db..f73263c28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2295,7 +2295,7 @@ dependencies = [ [[package]] name = "fsrs" 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 = [ "burn", "itertools 0.14.0", diff --git a/Cargo.toml b/Cargo.toml index 52894f8ea..7d1645fc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ rev = "184b2ca50ed39ca43da13f0b830a463861adb9ca" [workspace.dependencies.fsrs] # version = "3.0.0" git = "https://github.com/open-spaced-repetition/fsrs-rs.git" -rev = "092c20bac7d9239a991ae5b561556ad34c706c16" +rev = "33ec3ee4d5d73e704633469cf5bf1a42e620a524" # path = "../open-spaced-repetition/fsrs-rs" [workspace.dependencies] diff --git a/rslib/src/stats/card.rs b/rslib/src/stats/card.rs index dce38c56a..b04539717 100644 --- a/rslib/src/stats/card.rs +++ b/rslib/src/stats/card.rs @@ -30,19 +30,21 @@ impl Collection { let (average_secs, total_secs) = average_and_total_secs_strings(&revlog); let timing = self.timing_today()?; - let days_elapsed = self + let seconds_elapsed = self .storage .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; let fsrs_retrievability = card .memory_state - .zip(Some(days_elapsed)) + .zip(Some(seconds_elapsed)) .zip(Some(card.decay.unwrap_or(FSRS5_DEFAULT_DECAY))) - .map(|((state, days), decay)| { - FSRS::new(None) - .unwrap() - .current_retrievability(state.into(), days, decay) + .map(|((state, seconds), decay)| { + FSRS::new(None).unwrap().current_retrievability_seconds( + state.into(), + seconds, + decay, + ) }); let original_deck = if card.original_deck_id == DeckId(0) {