Exemplo n.º 1
0
        public async Task <IActionResult> Post(string ids)
        {
            var feedIds = ids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToInt32(s)).ToArray();
            var request = new GetFeedsRequest()
            {
                Ids = feedIds
            };
            var options = await _mediator.Send(request);

            return(Ok(options));
        }
        public async Task <List <Feed> > Handle(GetFeedsRequest request)
        {
            var feedOptions = _feedOptionsStore.GetFeedOptions();
            var rssTasks    = new List <Task <List <SyndicationItem> > >();

            foreach (var id in request.Ids)
            {
                var option = feedOptions.FirstOrDefault(f => f.Id == id);

                if (option == null)
                {
                    continue;
                }

                var task = _rssReader.GetItems(option.Url);

                rssTasks.Add(task);
            }

            await Task.WhenAll(rssTasks);

            var rssItems = new List <SyndicationItem>();

            foreach (var completedTask in rssTasks)
            {
                rssItems.AddRange(completedTask.Result);
            }

            return(rssItems
                   .OrderBy(o => o.Published)
                   .Select(s => new Feed
            {
                Title = s.Title,
                Description = s.Description
            })
                   .ToList());
        }