private static IEnumerable <ReadOnlyFlashcardResult> RunInnerSession(MainContext context, IEnumerable <Flashcard> words) { Flashcard[] onStart = words.ToArray(); Dictionary <Flashcard, FlashcardResult> results = new Dictionary <Flashcard, FlashcardResult>(onStart.Length); List <Flashcard> toLearn = onStart.ToList(); ConsoleHelper.WriteLine($"-----Session----\n<{Styles.Information}>Type</color><{Styles.Command}> _</color><{Styles.Information}> to get access to all commands</color>\n" + $"<{Styles.Information}>Type</color><{Styles.Command}>_y</color> <{Styles.Information}>if you're sure you know the answer for sure, and you don't need to type it </color>\n" + $"<{Styles.Information}>Type</color><{Styles.Command}>_n</color> <{Styles.Information}>if you're sure you don't know the answer</color> "); IEnumerable <ReadOnlyFlashcardResult> Prepare() { Console.WriteLine("-----End of the Session----"); return(results.Select(item => new ReadOnlyFlashcardResult(item.Value))); } while (toLearn.Count > 0) { ContextResult CommandsCheck(string text) { if (text == "_") { bool exit = false; ConsoleHelper.WriteLine("Type \"help to see commands\"", Styles.Information); Context.LoadContext <SessionBreakContext>(new SessionBreakContext(context, toLearn.AsReadOnly(), Array.AsReadOnly(onStart), exit: () => exit = true)); if (exit) { return(ContextResult.Exit); } return(ContextResult.Back); } return(ContextResult.None); } bool canGo; string line; var flashcard = RandomHelper.GetRandomElement(random, toLearn); do { canGo = true; ConsoleHelper.WriteLine($"<{Styles.Symbols}>Question:</color> <{Styles.Question}>{flashcard.Question}</color>"); line = ConsoleHelper.ReadLine(Styles.Symbols).Trim(); switch (CommandsCheck(line)) { case ContextResult.Back: canGo = false; break; case ContextResult.Exit: return(Prepare()); } } while (!canGo); bool correctAnswer = false; if (line.Equals(flashcard.Answer, StringComparison.InvariantCultureIgnoreCase)) { ConsoleHelper.WriteLine("You wrote the correct answer", Styles.Information); correctAnswer = true; } else { ConsoleHelper.WriteLine($"<{Styles.Symbols}>Correct answer: </color><{Styles.Answer }>{flashcard.Answer}</color>"); correctAnswer = line.Equals("_y"); if (!line.Equals("_y") && !line.Equals("_n")) { bool wasCorrectOption; bool forceContinue = false; ConsoleHelper.WriteLine($"<{Styles.QuestionToUser}>Was your answer correct?</color>\n" + $"<{Styles.Command}>y:yes\nn:no</color>"); do { wasCorrectOption = true; string answer = ConsoleHelper.ReadLine().ToLower(); switch (answer) { case "yes": case "ok": case "sure": case "good": case "correct": case "perfect": case "y": correctAnswer = true; break; case "no": case "not correct": case "bad": case "not good": case "n": break; case "_": if (CommandsCheck(answer) == ContextResult.Exit) { return(Prepare()); } else { forceContinue = true; } break; default: ConsoleHelper.WriteLine("Incorrect response", Styles.BadInformation); wasCorrectOption = false; break; } } while (!wasCorrectOption); if (forceContinue) { continue; } } } if (!results.ContainsKey(flashcard)) { var result = new FlashcardResult(); result.Card = flashcard; results[flashcard] = result; } if (correctAnswer) { toLearn.Remove(flashcard); results[flashcard].Completed++; } else { results[flashcard].AddMistakes(line); } Console.WriteLine("###"); } return(Prepare()); }
public ReadOnlyFlashcardResult(FlashcardResult result) { this.result = result; }