The Webfeed Flutter package for Appeto SDK.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

119 lignes
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. }