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.

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