BaseRSSReader.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. namespace FormulaOneApp.Rss.Readers
  2. {
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Xml.Linq;
  6. using Helpers;
  7. using Models;
  8. internal abstract class BaseRss : BaseReader
  9. {
  10. /// <summary>
  11. /// Return a RssFeed object using the XDocument data
  12. /// </summary>
  13. /// <param name="doc"></param>
  14. /// <returns></returns>
  15. public override RssFeed LoadFeed(XDocument doc)
  16. {
  17. var feed = new RssFeed();
  18. XNamespace defaultNamespace = string.Empty;
  19. SetMediaImage(feed, doc);
  20. if (doc.Root != null)
  21. {
  22. defaultNamespace = doc.Root.GetDefaultNamespace();
  23. feed.Description = doc.Root.Element("channel").GetSafeElementString("description");
  24. feed.Items = new ObservableCollection<RssItem>();
  25. feed.Link = doc.Root.Element("channel").GetSafeElementString("link");
  26. }
  27. foreach (XElement item in doc.Descendants(defaultNamespace + "item"))
  28. {
  29. RssItem rssItem = ParseItem(item);
  30. feed.Items.Add(rssItem);
  31. }
  32. RssItem lastItem = feed.Items.OrderByDescending(i => i.PublishDate).FirstOrDefault();
  33. if (lastItem != null)
  34. feed.LastBuildDate = lastItem.PublishDate;
  35. return feed;
  36. }
  37. protected abstract RssItem ParseItem(XElement item);
  38. }
  39. }