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.

109 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 = new AtomGenerator.parse(feedElement.findElements("generator").first);
  61. } on StateError {}
  62. var icon = xmlGetString(feedElement, "icon", strict: false);
  63. var logo = xmlGetString(feedElement, "logo", strict: false);
  64. var rights = xmlGetString(feedElement, "rights", strict: false);
  65. var subtitle = xmlGetString(feedElement, "subtitle", strict: false);
  66. return new AtomFeed(id, title, updated, items,
  67. links: links,
  68. authors: authors,
  69. contributors: contributors,
  70. categories: categories,
  71. generator: generator,
  72. icon: icon,
  73. logo: logo,
  74. rights: rights,
  75. subtitle: subtitle);
  76. }
  77. @override
  78. String toString() {
  79. return '''
  80. id: $id
  81. title: $title
  82. updated: $updated
  83. items: $items
  84. links: $links
  85. authors: $authors
  86. contributors: $contributors
  87. categories: $categories
  88. generator: $generator
  89. icon: $icon
  90. logo: $logo
  91. rights: $rights
  92. subtitle: $subtitle
  93. ''';
  94. }
  95. }