AtomReader.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. namespace FormulaOneApp.Rss.Readers
  2. {
  3. using System.Collections.ObjectModel;
  4. using System.Xml.Linq;
  5. using Helpers;
  6. using Models;
  7. internal class AtomReader : BaseReader
  8. {
  9. /// <summary>
  10. /// Return a RssFeed object using the XDocument data
  11. /// </summary>
  12. /// <param name="doc"></param>
  13. /// <returns></returns>
  14. public override RssFeed LoadFeed(XDocument doc)
  15. {
  16. var feed = new RssFeed();
  17. SetMediaImage(feed, doc);
  18. feed.Description = doc.Root.GetSafeElementString("summary");
  19. feed.Items = new ObservableCollection<RssItem>();
  20. feed.LastBuildDate = doc.Root.GetSafeElementDate("updated");
  21. feed.Link = doc.Root.GetLink("self");
  22. if (doc.Root == null) return feed;
  23. foreach (XElement item in doc.Root.Elements(doc.Root.GetDefaultNamespace() + "entry"))
  24. {
  25. RssItem rssItem = ParseItem(item);
  26. feed.Items.Add(rssItem);
  27. }
  28. return feed;
  29. }
  30. private static RssItem ParseItem(XElement item)
  31. {
  32. var rssItem = new RssItem {Title = item.GetSafeElementString("title")};
  33. string description = item.GetSafeElementString("description");
  34. rssItem.Description = !string.IsNullOrEmpty(description)
  35. ? description
  36. : item.GetSafeElementString("content");
  37. rssItem.Image = item.GetImage();
  38. rssItem.PublishDate = item.GetSafeElementDate("published") ?? item.GetSafeElementDate("updated");
  39. rssItem.Guid = item.GetSafeElementString("id");
  40. rssItem.Link = item.GetLink("alternate");
  41. return rssItem;
  42. }
  43. }
  44. }