private Models.NewsModel GetFilteredNews(Models.NewsModel news)
{
Models.NewsModel allnews = GetAllNews(news.NewsType);
news.SearchTypes = allnews.SearchTypes; // recreate dropdownlist- lost on postback?
news.Headlines = allnews.Headlines
.Where(h => h.NewsType == news.NewsType &&
(news.SearchEndDate == null || h.PostDate < news.SearchEndDate) &&
(news.SearchStartDate == null || h.PostDate > news.SearchStartDate) &&
(news.SearchType == null || news.SearchType == h.ArticleType) &&
(String.IsNullOrEmpty(news.SearchString) || h.Link.ToString().ToLower().Contains(news.SearchString.ToLower()))
).OrderByDescending(h => h.PostDate);
return news;
}
private Models.NewsModel GetAllNews(Models.NewsType newstype)
{
Models.NewsModel news = GetSavedNews();
if (news.LastUpdateDate < DateTime.Now.AddDays(-1))
{
// get feed from vocus
Models.Headline[] latest = GetVocusFeed();
if (latest.Count() > 0) // if vocus is down?
{
news.Headlines = latest;
news.LastUpdateDate = DateTime.Now;
SaveNews(news);
}
}
// process for the view
news.NewsType = newstype;
news.SearchTypes = news.Headlines.Where(h=>h.NewsType == newstype && !String.IsNullOrEmpty(h.ArticleType))
.OrderBy(h => h.ArticleType).Distinct()
.Select(h => new System.Web.Mvc.SelectListItem
{
Text = h.ArticleType,
Value = h.ArticleType
}).ToList();
return news;
}
private Models.Headline[] GetNewsFeed()
{
List<Models.Headline> headlines = new List<Models.Headline>();
System.Xml.Linq.XDocument collateral = System.Xml.Linq.XDocument.Load(
http://somenewsfeed.com/Custom/CustomXmlFeed.aspx?something=something);
System.Xml.Linq.XDocument news = System.Xml.Linq.XDocument.Load(
http://somenewsfeed.com/Custom/CustomXMLFeed.aspx?somethingelse=something);
headlines.AddRange(news.Descendants(System.Xml.Linq.XName.Get("NewsResults")).Select(e => new Models.Headline
{
ArticleType = GetField(e, "News_MediaOutletSortName"),
Link = GetLink(e, "News"),
NewsType = Models.NewsType.InTheNews,
PostDate = DateTime.Parse(GetField(e, "News_NewsDate"))
}).Where(e => e.Link != null));
headlines.AddRange(collateral.Descendants(System.Xml.Linq.XName.Get("SomeResults")).Select(e => new Models.Headline
{
ArticleType = GetField(e, "A_Name"),
Link = GetLink(e, "ALink"),
NewsType = Models.NewsType.NewsReleases,
PostDate = DateTime.Parse(GetField(e, "PublishDate"))
}).Where(e => e.Link != null));
return headlines.ToArray();
}