The Webfeed Flutter package for Appeto SDK.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.6 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. }