applyToReviewingCardState method
Implementation
static applyToReviewingCardState(
ReviewingCardState prev, DateTime ts, Rating rating) {
if (rating == Rating.Again) {
return LapsedCardState(
master: prev.master,
combination: prev.combination,
consecutiveCorrect: 0,
factor: constrainWithin(
MIN_FACTOR.toDouble(), MAX_FACTOR, prev.factor.toDouble() - 200),
lapses: prev.lapses + 1,
interval: prev.interval,
lastReviewed: ts);
}
double factorAdj = (rating == Rating.Hard
? -150
: rating == Rating.Good ? 0 : rating == Rating.Easy ? 150 : double.nan);
double daysLate = calculateDaysLate(prev, ts);
double fact = rating == Rating.Hard
? (prev.interval + (daysLate / 4)) * 1.2
: rating == Rating.Good
? ((prev.interval + (daysLate / 2)) * prev.factor) / 1000
: rating == Rating.Easy
? (((prev.interval + daysLate) * prev.factor) / 1000) *
EASY_BONUS
: double.nan;
double ival = constrainWithin(prev.interval + 1, MAX_INTERVAL, fact);
return ReviewingCardState(
master: prev.master,
combination: prev.combination,
factor: constrainWithin(
MIN_FACTOR.toDouble(), MAX_FACTOR, prev.factor + factorAdj),
lapses: prev.lapses,
interval: ival,
lastReviewed: ts);
}