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.

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