The Webfeed Flutter package for Appeto SDK.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

110 líneas
3.0 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(this.id, this.title, this.updated, this.items,
  23. {this.links,
  24. this.authors,
  25. this.contributors,
  26. this.categories,
  27. this.generator,
  28. this.icon,
  29. this.logo,
  30. this.rights,
  31. this.subtitle});
  32. factory AtomFeed.parse(String xmlString) {
  33. var document = parse(xmlString);
  34. XmlElement feedElement;
  35. try {
  36. feedElement = document.findElements("feed").first;
  37. } on StateError {
  38. throw new ArgumentError("feed not found");
  39. }
  40. var id = xmlGetString(feedElement, "id");
  41. var title = xmlGetString(feedElement, "title");
  42. var updated = xmlGetString(feedElement, "updated");
  43. var items = feedElement.findElements("entry").map((element) {
  44. return new AtomItem.parse(element);
  45. }).toList();
  46. var links = feedElement.findElements("link").map((element) {
  47. return new AtomLink.parse(element);
  48. }).toList();
  49. var authors = feedElement.findElements("author").map((element) {
  50. return new AtomPerson.parse(element);
  51. }).toList();
  52. var contributors = feedElement.findElements("contributor").map((element) {
  53. return new AtomPerson.parse(element);
  54. }).toList();
  55. var categories = feedElement.findElements("category").map((element) {
  56. return new AtomCategory.parse(element);
  57. }).toList();
  58. AtomGenerator generator;
  59. try {
  60. generator =
  61. new AtomGenerator.parse(feedElement.findElements("generator").first);
  62. } on StateError {}
  63. var icon = xmlGetString(feedElement, "icon", strict: false);
  64. var logo = xmlGetString(feedElement, "logo", strict: false);
  65. var rights = xmlGetString(feedElement, "rights", strict: false);
  66. var subtitle = xmlGetString(feedElement, "subtitle", strict: false);
  67. return new AtomFeed(id, title, updated, items,
  68. links: links,
  69. authors: authors,
  70. contributors: contributors,
  71. categories: categories,
  72. generator: generator,
  73. icon: icon,
  74. logo: logo,
  75. rights: rights,
  76. subtitle: subtitle);
  77. }
  78. @override
  79. String toString() {
  80. return '''
  81. id: $id
  82. title: $title
  83. updated: $updated
  84. items: $items
  85. links: $links
  86. authors: $authors
  87. contributors: $contributors
  88. categories: $categories
  89. generator: $generator
  90. icon: $icon
  91. logo: $logo
  92. rights: $rights
  93. subtitle: $subtitle
  94. ''';
  95. }
  96. }