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.

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