コード例 #1
0
        public override async Task HandleAsync(CallbackQueryUpdateMessage message)
        {
            var mainMetric = _metricRepository.GetMainByExternalId(message.ChatId);

            if (mainMetric == null)
            {
                await _botClient.SendTextMessageAsync(message, MessageCode.NoMainMetric);

                return;
            }

            var values = _valueRepository.GetByMetricId(mainMetric.Id, 1, int.MaxValue);

            if (values.Count() < 2)
            {
                await _botClient.SendTextMessageAsync(message, MessageCode.ToFewValues);

                return;
            }

            var          plotData    = new PlotDataFactory().ValuesTo(values, mainMetric.ToString());
            var          filename    = FileName.GetPlotFilename(message.UpdateId.ToString());
            IFileService fileService = new ScottPlotService(new PngFileName(filename), plotData);

            using (var plotService = new FileReaderService(fileService))
            {
                var stream = plotService.GetFileStream();
                await _botClient.SendFileAsync(message.ChatId, stream, filename);
            }
        }
コード例 #2
0
        private MessageCode SaveValue(Value value, UpdateMessage message)
        {
            var mainMetric = _metricRepository.GetMainByExternalId(message.ChatId);

            if (mainMetric == null)
            {
                return(MessageCode.ValueWithoutMetric);
            }

            value.UpdateMetric(mainMetric);
            value = _valueRepository.Add(value);
            _logger.LogDebug($"Saved value {value.Content} {value.ValueDate} with id {value.Id}");
            return(MessageCode.Done);
        }
コード例 #3
0
        public override async Task HandleAsync(CallbackQueryUpdateMessage message)
        {
            var mainMetric = _metricRepository.GetMainByExternalId(message.ChatId);

            if (mainMetric != null)
            {
                var metricText = mainMetric.ToString();
                await _botClient.SendTextMessageAsync(message, metricText);
            }
            else
            {
                await _botClient.SendTextMessageAsync(message, MessageCode.NoMainMetric);
            }
        }
コード例 #4
0
        public override async Task HandleAsync(CallbackQueryUpdateMessage message)
        {
            if (!long.TryParse(Parameter, out long id))
            {
                throw new ArgumentException($"Can't perfom {Button} command, id parameter is not a number - {Parameter}");
            }

            var newMainMetric = _metricRepository.GetById(id)
                                ?? throw new ArgumentException($"Can't perfom {Button} command, there is no metric with id {id}");

            var oldMainMetric = _metricRepository.GetMainByExternalId(message.ChatId);

            if (oldMainMetric != null && oldMainMetric.Id != newMainMetric.Id)
            {
                oldMainMetric.UpdateMain(false);
                _metricRepository.Update(oldMainMetric);

                newMainMetric.UpdateMain(true);
                _metricRepository.Update(newMainMetric);
            }

            await _botClient.SendTextMessageAsync(message, MessageCode.Done);
        }
コード例 #5
0
        public override async Task HandleAsync(CallbackQueryUpdateMessage message)
        {
            if (!int.TryParse(Parameter, out int currentPageNumber))
            {
                currentPageNumber = 1;
            }

            var mainMetric = _metricRepository.GetMainByExternalId(message.ChatId);

            if (mainMetric == null)
            {
                await _botClient.SendTextMessageAsync(message, MessageCode.NoMainMetric);

                return;
            }

            var valueNames = _valueRepository.GetByMetricId(mainMetric.Id, currentPageNumber, PagingMenuData.DefaultPageSize)
                             .ToDictionary(m => FormatKey(m.Id), m => $"{m}");

            var count     = _valueRepository.CountByMetric(mainMetric.Id);
            var pageCount = (count / PagingMenuData.DefaultPageSize) + 1;

            var menuData = new PagingMenuData
            {
                ButtonTexts = valueNames,
                CurrentPage = currentPageNumber,
                PageCount   = pageCount,
                Previous    = ButtonCode.Menu,
            };

            message = message with {
                MenuMessageId = MenuMessageId
            };
            await _botClient.EditTextButtonsMenuWithPagingAsync(message, Button, menuData);
        }
    }