mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
More renaming/comment tweaks
- non_manual_entries -> first_user_grade_idx - change comments to reflect the fact that we're working backwards - Use "user-graded" rather than "non-manual"
This commit is contained in:
parent
10c5304aa7
commit
1e6207d45d
1 changed files with 21 additions and 20 deletions
|
@ -265,19 +265,20 @@ pub(crate) fn reviews_for_fsrs(
|
||||||
ignore_revlogs_before: TimestampMillis,
|
ignore_revlogs_before: TimestampMillis,
|
||||||
) -> Option<ReviewsForFsrs> {
|
) -> Option<ReviewsForFsrs> {
|
||||||
let mut first_of_last_learn_entries = None;
|
let mut first_of_last_learn_entries = None;
|
||||||
let mut non_manual_entries = None;
|
let mut first_user_grade_idx = None;
|
||||||
let mut revlogs_complete = false;
|
let mut revlogs_complete = false;
|
||||||
|
// Working backwards from the latest review...
|
||||||
for (index, entry) in entries.iter().enumerate().rev() {
|
for (index, entry) in entries.iter().enumerate().rev() {
|
||||||
if entry.review_kind == RevlogReviewKind::Filtered && entry.ease_factor == 0 {
|
if entry.review_kind == RevlogReviewKind::Filtered && entry.ease_factor == 0 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if matches!(entry.button_chosen, 1..=4) && entry.id.0 > ignore_revlogs_before.0 {
|
let within_cutoff = entry.id.0 > ignore_revlogs_before.0;
|
||||||
non_manual_entries = Some(index);
|
let user_graded = matches!(entry.button_chosen, 1..=4);
|
||||||
|
if user_graded && within_cutoff {
|
||||||
|
first_user_grade_idx = Some(index);
|
||||||
}
|
}
|
||||||
if matches!(
|
|
||||||
(entry.review_kind, entry.button_chosen),
|
if user_graded && entry.review_kind == RevlogReviewKind::Learning {
|
||||||
(RevlogReviewKind::Learning, 1..=4)
|
|
||||||
) {
|
|
||||||
first_of_last_learn_entries = Some(index);
|
first_of_last_learn_entries = Some(index);
|
||||||
revlogs_complete = true;
|
revlogs_complete = true;
|
||||||
} else if first_of_last_learn_entries.is_some() {
|
} else if first_of_last_learn_entries.is_some() {
|
||||||
|
@ -286,25 +287,25 @@ pub(crate) fn reviews_for_fsrs(
|
||||||
(entry.review_kind, entry.ease_factor),
|
(entry.review_kind, entry.ease_factor),
|
||||||
(RevlogReviewKind::Manual, 0)
|
(RevlogReviewKind::Manual, 0)
|
||||||
) {
|
) {
|
||||||
// If we find a `Learn` entry after the `Reset` entry, we should
|
// Ignore entries prior to a `Reset` if a learning step has come after,
|
||||||
// ignore the entries before the `Reset` entry
|
// but consider revlogs complete.
|
||||||
if first_of_last_learn_entries.is_some() {
|
if first_of_last_learn_entries.is_some() {
|
||||||
revlogs_complete = true;
|
revlogs_complete = true;
|
||||||
break;
|
break;
|
||||||
// If we find a non-manual entry after the `Reset` entry, we should
|
// Ignore entries prior to a `Reset` if the user has graded a card
|
||||||
// ignore the entries before the `Reset` entry
|
// after the reset.
|
||||||
} else if non_manual_entries.is_some() {
|
} else if first_user_grade_idx.is_some() {
|
||||||
revlogs_complete = false;
|
revlogs_complete = false;
|
||||||
break;
|
break;
|
||||||
// If we don't find any non-manual entry after the `Reset` entry,
|
// User has not graded the card since it was reset, so all history
|
||||||
// it's a new card and we should ignore all entries
|
// filtered out.
|
||||||
} else {
|
} else {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if training {
|
if training {
|
||||||
// While training ignore the entire card if the first learning step of the last
|
// While training, ignore the entire card if the first learning step of the last
|
||||||
// group of learning steps is before the ignore_revlogs_before date
|
// group of learning steps is before the ignore_revlogs_before date
|
||||||
if let Some(idx) = first_of_last_learn_entries {
|
if let Some(idx) = first_of_last_learn_entries {
|
||||||
if entries[idx].id.0 < ignore_revlogs_before.0 {
|
if entries[idx].id.0 < ignore_revlogs_before.0 {
|
||||||
|
@ -312,8 +313,8 @@ pub(crate) fn reviews_for_fsrs(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// While reviewing if the first learning step is before the ignore date,
|
// While reviewing, if the first learning step is before the ignore date,
|
||||||
// fallback to non_manual_entries
|
// we won't start from the learning step.
|
||||||
if let Some(idx) = first_of_last_learn_entries {
|
if let Some(idx) = first_of_last_learn_entries {
|
||||||
if entries[idx].id.0 < ignore_revlogs_before.0 && idx < entries.len() - 1 {
|
if entries[idx].id.0 < ignore_revlogs_before.0 && idx < entries.len() - 1 {
|
||||||
revlogs_complete = false;
|
revlogs_complete = false;
|
||||||
|
@ -329,9 +330,9 @@ pub(crate) fn reviews_for_fsrs(
|
||||||
} else if training {
|
} else if training {
|
||||||
// when training, we ignore cards that don't have any learning steps
|
// when training, we ignore cards that don't have any learning steps
|
||||||
return None;
|
return None;
|
||||||
} else if let Some(idx) = non_manual_entries {
|
} else if let Some(idx) = first_user_grade_idx {
|
||||||
// if there are no learning entries but there are non-manual entries,
|
// if there are no learning entries, but the user has reviewed the card,
|
||||||
// we ignore all entries before the first non-manual entry
|
// we ignore all entries before the first grade
|
||||||
if idx > 0 {
|
if idx > 0 {
|
||||||
entries.drain(..idx);
|
entries.drain(..idx);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue