public T Review(T item, ReviewOutcome outcome) { _revisionList.Remove(item); var nextReview = new T(); if (outcome != ReviewOutcome.Incorrect) { nextReview.CorrectReviewStreak = item.CorrectReviewStreak + 1; nextReview.PreviousCorrectReview = item.ReviewDate; } else { nextReview.CorrectReviewStreak = 0; nextReview.PreviousCorrectReview = DateTime.MinValue; _revisionList.Add(nextReview); } nextReview.ReviewDate = Clock.Now(); nextReview.DifficultyRating = ReviewStrategy.AdjustDifficulty(item, outcome); nextReview.ReviewOutcome = outcome; return(nextReview); }
public bool IsDue(IReviewItem item) { var nextReview = ReviewStrategy.NextReview(item); return(nextReview <= Clock.Now()); }