The Webfeed Flutter package for Appeto SDK.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

82 rindas
2.4 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/datetime.dart';
  7. import 'package:webfeed/util/xml.dart';
  8. import 'package:xml/xml.dart';
  9. class AtomFeed {
  10. final String id;
  11. final String title;
  12. final DateTime updated;
  13. final List<AtomItem> items;
  14. final List<AtomLink> links;
  15. final List<AtomPerson> authors;
  16. final List<AtomPerson> contributors;
  17. final List<AtomCategory> categories;
  18. final AtomGenerator generator;
  19. final String icon;
  20. final String logo;
  21. final String rights;
  22. final String subtitle;
  23. AtomFeed({
  24. this.id,
  25. this.title,
  26. this.updated,
  27. this.items,
  28. this.links,
  29. this.authors,
  30. this.contributors,
  31. this.categories,
  32. this.generator,
  33. this.icon,
  34. this.logo,
  35. this.rights,
  36. this.subtitle,
  37. });
  38. factory AtomFeed.parse(String xmlString) {
  39. var document = XmlDocument.parse(xmlString);
  40. var feedElement = findFirstElement(document, 'feed', recursive: true);
  41. if (feedElement == null) {
  42. throw ArgumentError('feed not found');
  43. }
  44. return AtomFeed(
  45. id: findFirstElement(feedElement, 'id')?.text,
  46. title: findFirstElement(feedElement, 'title')?.text,
  47. updated: parseDateTime(findFirstElement(feedElement, 'updated')?.text),
  48. items: feedElement
  49. .findElements('entry')
  50. .map((e) => AtomItem.parse(e))
  51. .toList(),
  52. links: feedElement
  53. .findElements('link')
  54. .map((e) => AtomLink.parse(e))
  55. .toList(),
  56. authors: feedElement
  57. .findElements('author')
  58. .map((e) => AtomPerson.parse(e))
  59. .toList(),
  60. contributors: feedElement
  61. .findElements('contributor')
  62. .map((e) => AtomPerson.parse(e))
  63. .toList(),
  64. categories: feedElement
  65. .findElements('category')
  66. .map((e) => AtomCategory.parse(e))
  67. .toList(),
  68. generator:
  69. AtomGenerator.parse(findFirstElement(feedElement, 'generator')),
  70. icon: findFirstElement(feedElement, 'icon')?.text,
  71. logo: findFirstElement(feedElement, 'logo')?.text,
  72. rights: findFirstElement(feedElement, 'rights')?.text,
  73. subtitle: findFirstElement(feedElement, 'subtitle')?.text,
  74. );
  75. }
  76. }