Example #1
0
        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);
            }
        }
Example #2
0
        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());
        }
Example #3
0
        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;
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }
Example #8
0
        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);
        }
Example #9
0
 public static void SetFirstHref(this PaginationCollection collection, string path, PaginationFilter paginationFilter)
 {
     collection.FirstHref = BuildUri(path, 0, paginationFilter.Top);
 }
Example #10
0
        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);
        }