The Webfeed Flutter package for Appeto SDK.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

109 rader
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. }