The Webfeed Flutter package for Appeto SDK.
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

84 righe
2.6 KiB

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