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.

90 lignes
2.6 KiB

  1. import 'package:webfeed/util/xml.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 =
  42. findElementOrNull(element, 'itunes:duration')?.text?.trim();
  43. return RssItemItunes(
  44. title: findElementOrNull(element, 'itunes:title')?.text?.trim(),
  45. episode: episodeStr == null ? null : int.parse(episodeStr),
  46. season: seasonStr == null ? null : int.parse(seasonStr),
  47. duration: durationStr == null ? null : parseDuration(durationStr),
  48. episodeType: newRssItunesEpisodeType(
  49. findElementOrNull(element, 'itunes:episodeType')),
  50. author: findElementOrNull(element, 'itunes:author')?.text?.trim(),
  51. summary: findElementOrNull(element, 'itunes:summary')?.text?.trim(),
  52. explicit: parseBoolLiteral(element, 'itunes:explicit'),
  53. subtitle: findElementOrNull(element, 'itunes:subtitle')?.text?.trim(),
  54. keywords: findElementOrNull(element, 'itunes:keywords')
  55. ?.text
  56. ?.split(',')
  57. ?.map((keyword) => keyword.trim())
  58. ?.toList(),
  59. image: RssItunesImage.parse(findElementOrNull(element, 'itunes:image')),
  60. category: RssItunesCategory.parse(
  61. findElementOrNull(element, 'itunes:category')),
  62. block: parseBoolLiteral(element, 'itunes:block'),
  63. );
  64. }
  65. }
  66. Duration parseDuration(String s) {
  67. var hours = 0;
  68. var minutes = 0;
  69. var seconds = 0;
  70. var parts = s.split(':');
  71. if (parts.length > 2) {
  72. hours = int.parse(parts[parts.length - 3]);
  73. }
  74. if (parts.length > 1) {
  75. minutes = int.parse(parts[parts.length - 2]);
  76. }
  77. seconds = int.parse(parts[parts.length - 1]);
  78. return Duration(
  79. hours: hours,
  80. minutes: minutes,
  81. seconds: seconds,
  82. );
  83. }