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.

83 lignes
2.5 KiB

  1. import 'dart:core';
  2. import 'package:webfeedclient/domain/rss_category.dart';
  3. import 'package:webfeedclient/domain/rss_cloud.dart';
  4. import 'package:webfeedclient/domain/rss_item.dart';
  5. import 'package:webfeedclient/util/helpers.dart';
  6. import 'package:xml/xml.dart';
  7. import 'package:webfeedclient/domain/rss_image.dart';
  8. class RssFeed {
  9. final String title;
  10. final String description;
  11. final String link;
  12. final List<RssItem> items;
  13. final RssImage image;
  14. final RssCloud cloud;
  15. final List<RssCategory> categories;
  16. final String lastBuildDate;
  17. final String language;
  18. final String generator;
  19. final String copyright;
  20. RssFeed(this.title, this.description, this.link, this.items,
  21. {this.image, this.cloud, this.categories, this.lastBuildDate, this.language, this.generator, this.copyright});
  22. factory RssFeed.parse(XmlDocument document) {
  23. XmlElement channelElement;
  24. try {
  25. channelElement = document.findAllElements("channel").first;
  26. } on StateError {
  27. throw new ArgumentError("channel not found");
  28. }
  29. var title = xmlGetString(channelElement, "title");
  30. var description = xmlGetString(channelElement, "description");
  31. var link = xmlGetString(channelElement, "link");
  32. List<RssItem> feeds = channelElement.findElements("item").map((element) {
  33. return new RssItem.parse(element);
  34. }).toList();
  35. RssImage image;
  36. try {
  37. image = new RssImage.parse(channelElement.findElements("image").first);
  38. } on StateError {}
  39. RssCloud cloud;
  40. try {
  41. cloud = new RssCloud.parse(channelElement.findElements("cloud").first);
  42. } on StateError {}
  43. List<RssCategory> categories = channelElement.findElements("category").map((element) {
  44. return new RssCategory.parse(element);
  45. }).toList();
  46. var lastBuildDate = xmlGetString(channelElement, "lastBuildDate", strict: false);
  47. var language = xmlGetString(channelElement, "language", strict: false);
  48. var generator = xmlGetString(channelElement, "generator", strict: false);
  49. var copyright = xmlGetString(channelElement, "copyright", strict: false);
  50. return new RssFeed(title, description, link, feeds,
  51. image: image,
  52. cloud: cloud,
  53. categories: categories,
  54. lastBuildDate: lastBuildDate,
  55. language: language,
  56. generator: generator,
  57. copyright: copyright);
  58. }
  59. @override
  60. String toString() {
  61. return '''
  62. title: $title
  63. description: $description
  64. link: $link
  65. lastBuildDate: $lastBuildDate
  66. items: $items
  67. ''';
  68. }
  69. }