mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
Compare commits
1 commit
ae54ab2226
...
2f62fb8dd1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2f62fb8dd1 |
1 changed files with 18 additions and 43 deletions
|
@ -478,42 +478,23 @@ pub(crate) fn reviews_for_fsrs(
|
||||||
}))
|
}))
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
|
||||||
let items = if training {
|
let skip = if training { 1 } else { 0 };
|
||||||
// Convert the remaining entries into separate FSRSItems, where each item
|
// Convert the remaining entries into separate FSRSItems, where each item
|
||||||
// contains all reviews done until then.
|
// contains all reviews done until then.
|
||||||
let mut items = Vec::with_capacity(entries.len());
|
let mut items = Vec::with_capacity(entries.len());
|
||||||
let mut current_reviews = Vec::with_capacity(entries.len());
|
let mut current_reviews = Vec::with_capacity(entries.len());
|
||||||
for (idx, (entry, &delta_t)) in entries.iter().zip(delta_ts.iter()).enumerate() {
|
for (idx, (entry, &delta_t)) in entries.iter().zip(delta_ts.iter()).enumerate() {
|
||||||
current_reviews.push(FSRSReview {
|
current_reviews.push(FSRSReview {
|
||||||
rating: entry.button_chosen as u32,
|
rating: entry.button_chosen as u32,
|
||||||
delta_t,
|
delta_t,
|
||||||
});
|
});
|
||||||
if idx >= 1 && delta_t > 0 {
|
if idx >= skip && (!training || current_reviews.last().unwrap().delta_t > 0) {
|
||||||
items.push((
|
let item = FSRSItem {
|
||||||
entry.id,
|
reviews: current_reviews.clone(),
|
||||||
FSRSItem {
|
};
|
||||||
reviews: current_reviews.clone(),
|
items.push((entry.id, item));
|
||||||
},
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
items
|
}
|
||||||
} else {
|
|
||||||
// When not training, we only need the final FSRS item, which represents
|
|
||||||
// the complete history of the card. This avoids expensive clones in a loop.
|
|
||||||
let reviews = entries
|
|
||||||
.iter()
|
|
||||||
.zip(delta_ts.iter())
|
|
||||||
.map(|(entry, &delta_t)| FSRSReview {
|
|
||||||
rating: entry.button_chosen as u32,
|
|
||||||
delta_t,
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
let last_entry = entries.last().unwrap();
|
|
||||||
|
|
||||||
vec![(last_entry.id, FSRSItem { reviews })]
|
|
||||||
};
|
|
||||||
|
|
||||||
if items.is_empty() {
|
if items.is_empty() {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
|
@ -753,7 +734,7 @@ pub(crate) mod tests {
|
||||||
],
|
],
|
||||||
false,
|
false,
|
||||||
),
|
),
|
||||||
fsrs_items!([review(0), review(1)])
|
fsrs_items!([review(0)], [review(0), review(1)])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,7 +805,7 @@ pub(crate) mod tests {
|
||||||
// R | A X R
|
// R | A X R
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
convert_ignore_before(revlogs, false, days_ago_ms(9)),
|
convert_ignore_before(revlogs, false, days_ago_ms(9)),
|
||||||
fsrs_items!([review(0), review(2)])
|
fsrs_items!([review(0)], [review(0), review(2)])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,9 +824,6 @@ pub(crate) mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
convert_ignore_before(revlogs, false, days_ago_ms(9))
|
convert_ignore_before(revlogs, false, days_ago_ms(9))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.last()
|
|
||||||
.unwrap()
|
|
||||||
.reviews
|
|
||||||
.len(),
|
.len(),
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
|
@ -867,9 +845,6 @@ pub(crate) mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
convert_ignore_before(revlogs, false, days_ago_ms(9))
|
convert_ignore_before(revlogs, false, days_ago_ms(9))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.last()
|
|
||||||
.unwrap()
|
|
||||||
.reviews
|
|
||||||
.len(),
|
.len(),
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue