The Webfeed Flutter package for Appeto SDK.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 line
3.1 KiB

  1. import 'package:webfeed/domain/atom_category.dart';
  2. import 'package:webfeed/domain/atom_generator.dart';
  3. import 'package:webfeed/domain/atom_item.dart';
  4. import 'package:webfeed/domain/atom_link.dart';
  5. import 'package:webfeed/domain/atom_person.dart';
  6. import 'package:webfeed/util/helpers.dart';
  7. import 'package:xml/xml.dart';
  8. class AtomFeed {
  9. String id;
  10. String title;
  11. String updated;
  12. List<AtomItem> items;
  13. List<AtomLink> links;
  14. List<AtomPerson> authors;
  15. List<AtomPerson> contributors;
  16. List<AtomCategory> categories;
  17. AtomGenerator generator;
  18. String icon;
  19. String logo;
  20. String rights;
  21. String subtitle;
  22. AtomFeed({
  23. this.id,
  24. this.title,
  25. this.updated,
  26. this.items,
  27. this.links,
  28. this.authors,
  29. this.contributors,
  30. this.categories,
  31. this.generator,
  32. this.icon,
  33. this.logo,
  34. this.rights,
  35. this.subtitle,
  36. });
  37. factory AtomFeed.parse(String xmlString) {
  38. var document = parse(xmlString);
  39. XmlElement feedElement;
  40. try {
  41. feedElement = document.findElements("feed").first;
  42. } on StateError {
  43. throw new ArgumentError("feed not found");
  44. }
  45. var id = xmlGetString(feedElement, "id", strict: false);
  46. var title = xmlGetString(feedElement, "title", strict: false);
  47. var updated = xmlGetString(feedElement, "updated", strict: false);
  48. var items = feedElement.findElements("entry").map((element) {
  49. return new AtomItem.parse(element);
  50. }).toList();
  51. var links = feedElement.findElements("link").map((element) {
  52. return new AtomLink.parse(element);
  53. }).toList();
  54. var authors = feedElement.findElements("author").map((element) {
  55. return new AtomPerson.parse(element);
  56. }).toList();
  57. var contributors = feedElement.findElements("contributor").map((element) {
  58. return new AtomPerson.parse(element);
  59. }).toList();
  60. var categories = feedElement.findElements("category").map((element) {
  61. return new AtomCategory.parse(element);
  62. }).toList();
  63. AtomGenerator generator;
  64. try {
  65. generator =
  66. new AtomGenerator.parse(feedElement.findElements("generator").first);
  67. } on StateError {}
  68. var icon = xmlGetString(feedElement, "icon", strict: false);
  69. var logo = xmlGetString(feedElement, "logo", strict: false);
  70. var rights = xmlGetString(feedElement, "rights", strict: false);
  71. var subtitle = xmlGetString(feedElement, "subtitle", strict: false);
  72. return new AtomFeed(
  73. id: id,
  74. title: title,
  75. updated: updated,
  76. items: items,
  77. links: links,
  78. authors: authors,
  79. contributors: contributors,
  80. categories: categories,
  81. generator: generator,
  82. icon: icon,
  83. logo: logo,
  84. rights: rights,
  85. subtitle: subtitle);
  86. }
  87. @override
  88. String toString() {
  89. return '''
  90. id: $id
  91. title: $title
  92. updated: $updated
  93. items: $items
  94. links: $links
  95. authors: $authors
  96. contributors: $contributors
  97. categories: $categories
  98. generator: $generator
  99. icon: $icon
  100. logo: $logo
  101. rights: $rights
  102. subtitle: $subtitle
  103. ''';
  104. }
  105. }