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;
        }
Example #2
0
 public async Task LoadNewsItems(ISyndicationSearchFields syndicationSearchFields)
 {
     var newsItems = await _syndicationService.GetSyndicationItems(syndicationSearchFields).ConfigureAwait(false);
     _newsRepository.InsertMany(newsItems);
 }
Example #3
0
 public async Task<IEnumerable<NewsItem>> GetOrAddNewsItems(ISyndicationSearchFields syndicationSearchFields)
 {
     await LoadNewsItems(syndicationSearchFields).ConfigureAwait(false);
     return _newsRepository.SearchFor(n => n.Type == syndicationSearchFields.Type);
 }