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.

83 satır
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. }