Stop collapsing reschedule entries

Closes #3316
This commit is contained in:
Damien Elmes 2025-06-06 13:11:15 +07:00
parent 50b7588231
commit 933d63545a

View file

@ -16,7 +16,6 @@ use super::rescheduler::Rescheduler;
use crate::card::CardType; use crate::card::CardType;
use crate::prelude::*; use crate::prelude::*;
use crate::revlog::RevlogEntry; use crate::revlog::RevlogEntry;
use crate::revlog::RevlogReviewKind;
use crate::scheduler::answering::get_fuzz_seed; use crate::scheduler::answering::get_fuzz_seed;
use crate::scheduler::fsrs::params::reviews_for_fsrs; use crate::scheduler::fsrs::params::reviews_for_fsrs;
use crate::scheduler::fsrs::params::Params; use crate::scheduler::fsrs::params::Params;
@ -163,15 +162,8 @@ impl Collection {
); );
} }
*due = new_due; *due = new_due;
// Add a rescheduled revlog entry if the last entry wasn't // Add a rescheduled revlog entry
// rescheduled self.log_rescheduled_review(&card, original_interval, usn)?;
if !last_info.last_revlog_is_rescheduled {
self.log_rescheduled_review(
&card,
original_interval,
usn,
)?;
}
} }
} }
} }
@ -289,9 +281,6 @@ struct LastRevlogInfo {
/// reviewed the card and now, so that we can determine an accurate period /// reviewed the card and now, so that we can determine an accurate period
/// when the card has subsequently been rescheduled to a different day. /// when the card has subsequently been rescheduled to a different day.
last_reviewed_at: Option<TimestampSecs>, last_reviewed_at: Option<TimestampSecs>,
/// If true, the last action on this card was a reschedule, so we
/// can avoid writing an extra revlog entry on another reschedule.
last_revlog_is_rescheduled: bool,
} }
/// Return a map of cards to info about last review/reschedule. /// Return a map of cards to info about last review/reschedule.
@ -303,18 +292,15 @@ fn get_last_revlog_info(revlogs: &[RevlogEntry]) -> HashMap<CardId, LastRevlogIn
.into_iter() .into_iter()
.for_each(|(card_id, group)| { .for_each(|(card_id, group)| {
let mut last_reviewed_at = None; let mut last_reviewed_at = None;
let mut last_revlog_is_rescheduled = false;
for e in group.into_iter() { for e in group.into_iter() {
if e.button_chosen >= 1 { if e.button_chosen >= 1 {
last_reviewed_at = Some(e.id.as_secs()); last_reviewed_at = Some(e.id.as_secs());
} }
last_revlog_is_rescheduled = e.review_kind == RevlogReviewKind::Rescheduled;
} }
out.insert( out.insert(
card_id, card_id,
LastRevlogInfo { LastRevlogInfo {
last_reviewed_at, last_reviewed_at,
last_revlog_is_rescheduled,
}, },
); );
}); });