public Task<IEnumerable<NewsItem>> GetSyndicationItems(ISyndicationSearchFields syndicationSearchFields) { var tcs = new TaskCompletionSource<IEnumerable<NewsItem>>(); try { using(var reader = XmlReader.Create(syndicationSearchFields.Url.Replace("%26", "&"))) { var feed = SyndicationFeed.Load(reader); var items = feed.Items.ToArray(); var newsitems = new List<NewsItem>(); for (int i = 0; i < items.Count(); i++) { if(i == syndicationSearchFields.Take) break; newsitems.Add(new NewsItem { Type = syndicationSearchFields.Type, Title = items[i].Title.Text, Url = items[i].Summary.Text.GetItemUrlFromPost(), PublishDate = items[i].PublishDate.DateTime }); } reader.Close(); tcs.TrySetResult(newsitems); } } catch (Exception ex) { tcs.TrySetException(ex); } if (tcs.Task.Exception != null) { throw tcs.Task.Exception; } return tcs.Task; }
public async Task LoadNewsItems(ISyndicationSearchFields syndicationSearchFields) { var newsItems = await _syndicationService.GetSyndicationItems(syndicationSearchFields).ConfigureAwait(false); _newsRepository.InsertMany(newsItems); }
public async Task<IEnumerable<NewsItem>> GetOrAddNewsItems(ISyndicationSearchFields syndicationSearchFields) { await LoadNewsItems(syndicationSearchFields).ConfigureAwait(false); return _newsRepository.SearchFor(n => n.Type == syndicationSearchFields.Type); }