public async Task EnterAsync() { var selector = new PaginationCollection <WordInLearningSet>(_set.Words); var currentSet = Chat.User.TrainingSets?.FirstOrDefault(f => f.SetId == _set.Id); if (currentSet == null) { await SaveTrainingSetOffset(0); } else { selector.Page = currentSet.LastSeenWordOffset; } var(word, translations) = await _localDictionaryService.GetTranslationWithExamplesByEnWord(selector.Current.Word); await Chat.SendMarkdownMessageAsync( GetWordText(selector, word, translations, selector.Current), GetWordKeyboard()); var continueAddWords = true; while (continueAddWords) { var userInput = await Chat.WaitUserInputAsync(); continueAddWords = await HandleWordButton(userInput, selector); var _ = SaveTrainingSetOffset(selector.Page); } }
private string GetWordText( PaginationCollection <WordInLearningSet> collection, DictionaryWord dictionaryWord, IReadOnlyList <Translation> translations, WordInLearningSet wordInLearningSet) { var engWord = dictionaryWord.Word; var transcription = dictionaryWord.Transcription; var allowedTranslations = SearchForAllowedTranslations(translations, wordInLearningSet); var example = GetExampleOrNull(wordInLearningSet, allowedTranslations); var msg = new StringBuilder(); msg.AppendLine($"*{engWord.EscapeForMarkdown().Capitalize()}*"); if (!string.IsNullOrWhiteSpace(transcription)) { msg.Append($"```\r\n[{transcription.EscapeForMarkdown()}]\r\n```"); } msg.AppendLine( $"\r\n*{string.Join("\r\n", allowedTranslations.Select(a => a.TranslatedText.EscapeForMarkdown().Capitalize()))}*"); if (example != null) { msg.Append( $"```\r\n\r\n" + $"{Emojis.OpenQuote}{example.OriginPhrase.EscapeForMarkdown()}{Emojis.CloseQuote}\r\n" + $"{Emojis.OpenQuote}{example.TranslatedPhrase.EscapeForMarkdown()}{Emojis.CloseQuote}" + $"\r\n```"); } msg.AppendLine($"\r\n{Chat.Texts.XofYMarkdown(collection.Page + 1, collection.Count)}"); return(msg.ToString()); }
public static void SetPrevHref(this PaginationCollection collection, string path, PaginationFilter paginationFilter) { var skip = paginationFilter.Skip - paginationFilter.Top; collection.PrevHref = skip > 0 ? BuildUri(path, skip, paginationFilter.Top) : null; }
public static void SetLastHref(this PaginationCollection collection, string path, PaginationFilter paginationFilter) { var skip = collection.Count - paginationFilter.Top > 0 ? collection.Count - paginationFilter.Top : 0; collection.LastHref = BuildUri(path, skip, paginationFilter.Top); }
public static void SetNexHref(this PaginationCollection collection, string path, PaginationFilter paginationFilter) { var skip = paginationFilter.Skip + paginationFilter.Top; collection.NextHref = skip < collection.Count ? BuildUri(path, skip, paginationFilter.Top) : null; }
public async Task <IActionResult> GetAll([FromRoute] string membershipId) { var userTypes = await this.userTypeService.GetAsync(membershipId, null, null, false, null, null); var allUserTypes = new List <UserType>(); allUserTypes.AddRange(userTypes.Items); allUserTypes.Add(await this.userTypeService.GetByNameOrSlugAsync(membershipId, UserType.ORIGIN_USER_TYPE_NAME)); userTypes = new PaginationCollection <UserType> { Items = allUserTypes, Count = allUserTypes.Count }; return(this.Ok(userTypes)); }
public async Task <Result <PaginationCollection <BucketDocument> > > HandleAsync(ListBucketQuery query, CancellationToken cancellationToken = default) { Assert.IsNotNull(query, nameof(query)); cancellationToken.ThrowIfCancellationRequested(); var userId = _userContext.UserId; var totalCount = await _readOnlyRepository.CountAsync(p => p.UserId == userId, cancellationToken); var buckets = await _readOnlyRepository.ListAsync(p => p.UserId == userId, query.Top, query.Skip, cancellationToken); var documents = buckets.Select(_mapperDefinition.Map).ToList(); var paginationCollection = new PaginationCollection <BucketDocument>() { Items = documents, Count = totalCount }; return(Result.Ok(paginationCollection)); }
private async Task <bool> MoveOnNextWord(PaginationCollection <WordInLearningSet> selector, bool moveNext) { for (int i = 0; i < selector.Count; i++) { if (moveNext) { selector.MoveNext(); } else { selector.MovePrev(); } if (!await HasUserWord(selector.Current)) { return(true); } } return(false); }
public static void SetFirstHref(this PaginationCollection collection, string path, PaginationFilter paginationFilter) { collection.FirstHref = BuildUri(path, 0, paginationFilter.Top); }
async Task <bool> HandleWordButton(Update update, PaginationCollection <WordInLearningSet> selector) { if (selector.Count == 0) { await Chat.ConfirmCallback(update.CallbackQuery.Id); return(false); } var moveResult = false; if (update.CallbackQuery.Data == selectLearningSetData) { await AddWordToUser(selector.Current); //Todo почему то не работает await Chat.AnswerCallbackQueryWithTooltip( update.CallbackQuery.Id, Chat.Texts.WordIsAddedForLearning(selector.Current.Word)); moveResult = await MoveOnNextWord(selector, true); } else if (update.CallbackQuery.Data == moveNextData) { await Chat.AnswerCallbackQueryWithTooltip( update.CallbackQuery.Id, Chat.Texts.WordIsSkippedForLearning(selector.Current.Word)); moveResult = await MoveOnNextWord(selector, true); } else { await Chat.ConfirmCallback(update.CallbackQuery.Id); } DictionaryWord word = null; IReadOnlyList <Translation> translations = null; while (word == null) { if (!moveResult) { await SendAllWordsAreLearnedMessage(update.CallbackQuery.Message.MessageId); return(false); } (word, translations) = await _localDictionaryService.GetTranslationWithExamplesByEnWord(selector.Current.Word); if (word == null) { moveResult = await MoveOnNextWord(selector, true); } } await Chat.EditMessageTextMarkdown( update.CallbackQuery.Message.MessageId, GetWordText(selector, word, translations, selector.Current), GetWordKeyboard()); return(true); }