Пример #1
0
        public async Task <ActionResult> Create([FromBody] CreateFeedModel createFeedModel)
        {
            var existing = await _rssFeedRepository.GetByUriAsync(createFeedModel.Uri);

            if (existing != null)
            {
                return(Conflict());
            }

            var rssFeed = await _rssFeedRepository.CreateAsync(createFeedModel.Uri);

            if (await _refreshRssFeed.RefreshAsync(rssFeed, CancellationToken.None))
            {
                await _context.SaveChangesAsync();
            }

            return(Created(Url.ActionLink(nameof(Get), values: new { id = rssFeed.Id }), rssFeed));
        }
        public async Task <bool> ExecuteAsync(List <RssFeed> feedsToRefresh, CancellationToken cancellationToken)
        {
            if (feedsToRefresh == null)
            {
                return(false);
            }

            var updated = 0;

            _logger.LogInformation("Refreshing feeds");
            try
            {
                var failed = 0;
                foreach (var rssFeed in feedsToRefresh)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    try
                    {
                        _logger.LogInformation($"Refreshing {rssFeed.Uri}");
                        if (await _refreshRssFeed.RefreshAsync(rssFeed, cancellationToken))
                        {
                            updated++;
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, $"Error refreshing feed {rssFeed.Id}:{rssFeed.Uri}");
                        failed++;
                    }
                }

                _logger.LogInformation($"Completed feed refresh. {updated} updated / {failed} failed / {feedsToRefresh.Count} total checked");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error refreshing feeds");
            }

            return(updated > 0);
        }