The Webfeed Flutter package for Appeto SDK.
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

85 satır
2.5 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/iterable.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 = document.findElements('feed').firstOrNull;
  41. if (feedElement == null) {
  42. throw ArgumentError('feed not found');
  43. }
  44. return AtomFeed(
  45. id: feedElement.findElements('id').firstOrNull?.text,
  46. title: feedElement.findElements('title').firstOrNull?.text,
  47. updated:
  48. parseDateTime(feedElement.findElements('updated').firstOrNull?.text),
  49. items: feedElement
  50. .findElements('entry')
  51. .map((e) => AtomItem.parse(e))
  52. .toList(),
  53. links: feedElement
  54. .findElements('link')
  55. .map((e) => AtomLink.parse(e))
  56. .toList(),
  57. authors: feedElement
  58. .findElements('author')
  59. .map((e) => AtomPerson.parse(e))
  60. .toList(),
  61. contributors: feedElement
  62. .findElements('contributor')
  63. .map((e) => AtomPerson.parse(e))
  64. .toList(),
  65. categories: feedElement
  66. .findElements('category')
  67. .map((e) => AtomCategory.parse(e))
  68. .toList(),
  69. generator: feedElement
  70. .findElements('generator')
  71. .map((e) => AtomGenerator.parse(e))
  72. .firstOrNull,
  73. icon: feedElement.findElements('icon').firstOrNull?.text,
  74. logo: feedElement.findElements('logo').firstOrNull?.text,
  75. rights: feedElement.findElements('rights').firstOrNull?.text,
  76. subtitle: feedElement.findElements('subtitle').firstOrNull?.text,
  77. );
  78. }
  79. }