The Webfeed Flutter package for Appeto SDK.
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

77 linhas
2.3 KiB

  1. import 'package:webfeed/util/helpers.dart';
  2. import 'package:xml/xml.dart';
  3. import 'rss_itunes_category.dart';
  4. import 'rss_itunes_image.dart';
  5. class RssItemItunes {
  6. final int episode;
  7. final Duration duration;
  8. final String episodeType;
  9. final String author;
  10. final String summary;
  11. final bool explicit;
  12. final String subtitle;
  13. final List<String> keywords;
  14. final RssItunesImage image;
  15. final RssItunesCategory category;
  16. RssItemItunes({
  17. this.episode,
  18. this.duration,
  19. this.episodeType,
  20. this.author,
  21. this.summary,
  22. this.explicit,
  23. this.subtitle,
  24. this.keywords,
  25. this.image,
  26. this.category,
  27. });
  28. factory RssItemItunes.parse(XmlElement element) {
  29. if (element == null) {
  30. return null;
  31. }
  32. var explicitStr =
  33. findElementOrNull(element, "itunes:explicit")?.text?.toLowerCase()?.trim();
  34. var episodeStr = findElementOrNull(element, "itunes:episode")?.text?.trim();
  35. var durationStr = findElementOrNull(element, "itunes:duration")?.text?.trim();
  36. return RssItemItunes(
  37. episode: episodeStr == null ? null : int.parse(episodeStr),
  38. duration: durationStr == null ? null : parseDuration(durationStr),
  39. episodeType: findElementOrNull(element, "itunes:episodeType")?.text?.trim(),
  40. author: findElementOrNull(element, "itunes:author")?.text?.trim(),
  41. summary: findElementOrNull(element, "itunes:summary")?.text?.trim(),
  42. explicit: explicitStr == null
  43. ? null
  44. : explicitStr == "yes" || explicitStr == "true",
  45. subtitle: findElementOrNull(element, "itunes:subtitle")?.text?.trim(),
  46. keywords: findElementOrNull(element, "itunes:keywords")?.text?.split(",")?.map((keyword) => keyword.trim())?.toList(),
  47. image: RssItunesImage.parse(findElementOrNull(element, "itunes:image")),
  48. category: RssItunesCategory.parse(
  49. findElementOrNull(element, "itunes:category")),
  50. );
  51. }
  52. }
  53. Duration parseDuration(String s) {
  54. var hours = 0;
  55. var minutes = 0;
  56. var seconds = 0;
  57. var parts = s.split(':');
  58. if (parts.length > 2) {
  59. hours = int.parse(parts[parts.length - 3]);
  60. }
  61. if (parts.length > 1) {
  62. minutes = int.parse(parts[parts.length - 2]);
  63. }
  64. seconds = int.parse(parts[parts.length - 1]);
  65. return Duration(
  66. hours: hours,
  67. minutes: minutes,
  68. seconds: seconds,
  69. );
  70. }