The Webfeed Flutter package for Appeto SDK.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

77 líneas
2.3 KiB

  1. import 'package:webfeed/domain/dublin_core/dublin_core.dart';
  2. import 'package:webfeed/domain/itunes/itunes.dart';
  3. import 'package:webfeed/domain/media/media.dart';
  4. import 'package:webfeed/domain/rss_category.dart';
  5. import 'package:webfeed/domain/rss_content.dart';
  6. import 'package:webfeed/domain/rss_enclosure.dart';
  7. import 'package:webfeed/domain/rss_source.dart';
  8. import 'package:webfeed/util/datetime.dart';
  9. import 'package:webfeed/util/iterable.dart';
  10. import 'package:xml/xml.dart';
  11. class RssItem {
  12. final String? title;
  13. final String? description;
  14. final String? link;
  15. final List<RssCategory>? categories;
  16. final String? guid;
  17. final DateTime? pubDate;
  18. final String? author;
  19. final String? comments;
  20. final RssSource? source;
  21. final RssContent? content;
  22. final Media? media;
  23. final RssEnclosure? enclosure;
  24. final DublinCore? dc;
  25. final Itunes? itunes;
  26. RssItem({
  27. this.title,
  28. this.description,
  29. this.link,
  30. this.categories,
  31. this.guid,
  32. this.pubDate,
  33. this.author,
  34. this.comments,
  35. this.source,
  36. this.content,
  37. this.media,
  38. this.enclosure,
  39. this.dc,
  40. this.itunes,
  41. });
  42. factory RssItem.parse(XmlElement element) {
  43. return RssItem(
  44. title: element.findElements('title').firstOrNull?.text,
  45. description: element.findElements('description').firstOrNull?.text,
  46. link: element.findElements('link').firstOrNull?.text,
  47. categories: element
  48. .findElements('category')
  49. .map((e) => RssCategory.parse(e))
  50. .toList(),
  51. guid: element.findElements('guid').firstOrNull?.text,
  52. pubDate: parseDateTime(element.findElements('pubDate').firstOrNull?.text),
  53. author: element.findElements('author').firstOrNull?.text,
  54. comments: element.findElements('comments').firstOrNull?.text,
  55. source: element
  56. .findElements('source')
  57. .map((e) => RssSource.parse(e))
  58. .firstOrNull,
  59. content: element
  60. .findElements('content:encoded')
  61. .map((e) => RssContent.parse(e))
  62. .firstOrNull,
  63. media: Media.parse(element),
  64. enclosure: element
  65. .findElements('enclosure')
  66. .map((e) => RssEnclosure.parse(e))
  67. .firstOrNull,
  68. dc: DublinCore.parse(element),
  69. itunes: Itunes.parse(element),
  70. );
  71. }
  72. }