public IWord SetQuestionByUser(long userId, ELearnMode mode) { var path = $"/word/user/{userId}/nextWord/{mode}"; var response = ApiClient.CallApi(path, Method.PUT); ApiClient.CheckResponse(response); return(ApiClient.Deserialize <Word>(response)); }
public LearnUnit LearnWord(long userId, ELearnMode learnMode) { return (_wordRepository.GetNextWord(new WordSettings { LearnMode = learnMode, UserId = userId, PollAnswersCount = PollAnswersCount })); }
LearnUnit GetLearnUnit(EGettingWordsStrategy strategy, ELearnMode mode) { var user = _userApi.GetUserById(UserIdLong); user.Mode = strategy.ToString(); _userApi.UpdateUser(UserIdLong, user); var learnUnit = _restWordRepository.GetNextWord(new WordSettings { LearnMode = mode, PollAnswersCount = AnswersCount, UserId = UserIdLong }); return(learnUnit); }
public GenerateImageResult Generate(IWord word, ELearnMode learnMode) { var result = new GenerateImageResult(); var syllables = _wordParseProvider.GetOrderedSyllables(word); var originalChars = CutToMaxLength(word.OriginalWord, HanMaxCharsCount); var originalLength = 0; var pinyinLength = 0; syllables = syllables.TakeWhile(a => { originalLength++; pinyinLength += a.Pinyin.Length; return(pinyinLength < MainMaxCharsCount && originalLength <= originalChars.Length); }).ToArray(); var y = 0f; var maxWidth = 0f; using (var img = new Image <Rgba32>(MaxWidth, MaxHeight)) { var builder = new GlyphBuilder(); var renderer = new TextRenderer(builder); img.Mutate(a => a.Fill(BackgroundColor)); if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.OriginalWord) { var text = CutToMaxRow(originalChars, HanMaxLineCharsCount, true); var renderOptions = GetRenderOptions(KaitiHanFont, y); var size = TextMeasurer.Measure(text, renderOptions); y += size.Height + LineSpace; if (size.Width > maxWidth) { maxWidth = size.Width; } var paths = RenderText(builder, renderer, renderOptions, text); for (var i = 0; i < Math.Min(syllables.Length, paths.Length); i++) { var iLocal = i; var syllable = syllables[iLocal]; img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), paths[iLocal])); } } if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Pronunciation) { var text = string.Join(" ", syllables.Select(a => a.Pinyin)); var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y); var size = TextMeasurer.Measure(text, renderOptions); y += size.Height + LineSpace; if (size.Width > maxWidth) { maxWidth = size.Width; } var paths = RenderText(builder, renderer, renderOptions, text); var currentPathPosition = 0; foreach (var syllable in syllables) { if (currentPathPosition >= paths.Length) { break; } var pathCollection = new PathCollection(paths.Skip(currentPathPosition).Take(syllable.Pinyin.Length)); img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), pathCollection)); currentPathPosition += syllable.Pinyin.Length; } } if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Translation) { var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y); var transChars = CutToMaxRow(CutToMaxLength(word.Translation, MainMaxCharsCount, string.Empty), MainMaxLineCharsCount); var size = TextMeasurer.Measure(transChars, renderOptions); y += size.Height + LineSpace; if (size.Width > maxWidth) { maxWidth = size.Width; } var paths = RenderText(builder, renderer, renderOptions, transChars); img.Mutate(a => a.Fill(MainColor, new PathCollection(paths))); } var finalWidth = (int)(maxWidth + 2 * Padding); img.Mutate(a => a.Crop(new Rectangle((MaxWidth - finalWidth) / 2, 0, finalWidth, (int)y))); result.Width = img.Width; result.Height = img.Height; using (var ms = new MemoryStream()) { img.Save(ms, new PngEncoder()); result.ImageBody = ms.ToArray(); } } return(result); }