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.

103 lignes
3.2 KiB

  1. import 'package:webfeed/domain/itunes/itunes_category.dart';
  2. import 'package:webfeed/domain/itunes/itunes_episode_type.dart';
  3. import 'package:webfeed/domain/itunes/itunes_image.dart';
  4. import 'package:webfeed/domain/itunes/itunes_owner.dart';
  5. import 'package:webfeed/domain/itunes/itunes_type.dart';
  6. import 'package:webfeed/util/xml.dart';
  7. import 'package:xml/xml.dart';
  8. class Itunes {
  9. final String author;
  10. final String summary;
  11. final bool explicit;
  12. final String title;
  13. final String subtitle;
  14. final ItunesOwner owner;
  15. final List<String> keywords;
  16. final ItunesImage image;
  17. final List<ItunesCategory> categories;
  18. final ItunesType type;
  19. final String newFeedUrl;
  20. final bool block;
  21. final bool complete;
  22. final int episode;
  23. final int season;
  24. final Duration duration;
  25. final ItunesEpisodeType episodeType;
  26. Itunes({
  27. this.author,
  28. this.summary,
  29. this.explicit,
  30. this.title,
  31. this.subtitle,
  32. this.owner,
  33. this.keywords,
  34. this.image,
  35. this.categories,
  36. this.type,
  37. this.newFeedUrl,
  38. this.block,
  39. this.complete,
  40. this.episode,
  41. this.season,
  42. this.duration,
  43. this.episodeType,
  44. });
  45. factory Itunes.parse(XmlElement element) {
  46. if (element == null) {
  47. return null;
  48. }
  49. var episodeStr = findFirstElement(element, 'itunes:episode')?.text;
  50. var seasonStr = findFirstElement(element, 'itunes:season')?.text;
  51. var durationStr = findFirstElement(element, 'itunes:duration')?.text;
  52. return Itunes(
  53. author: findFirstElement(element, 'itunes:author')?.text,
  54. summary: findFirstElement(element, 'itunes:summary')?.text,
  55. explicit: parseBoolLiteral(element, 'itunes:explicit'),
  56. title: findFirstElement(element, 'itunes:title')?.text,
  57. subtitle: findFirstElement(element, 'itunes:subtitle')?.text,
  58. owner: ItunesOwner.parse(findFirstElement(element, 'itunes:owner')),
  59. keywords: findFirstElement(element, 'itunes:keywords')
  60. ?.text
  61. ?.split(',')
  62. ?.map((keyword) => keyword.trim())
  63. ?.toList() ??
  64. [],
  65. image: ItunesImage.parse(findFirstElement(element, 'itunes:image')),
  66. categories: findElements(element, 'itunes:category')
  67. .map((e) => ItunesCategory.parse(e))
  68. .toList(),
  69. type: newItunesType(findFirstElement(element, 'itunes:type')),
  70. newFeedUrl: findFirstElement(element, 'itunes:new-feed-url')?.text,
  71. block: parseBoolLiteral(element, 'itunes:block'),
  72. complete: parseBoolLiteral(element, 'itunes:complete'),
  73. episode: episodeStr == null ? null : int.parse(episodeStr),
  74. season: seasonStr == null ? null : int.parse(seasonStr),
  75. duration: durationStr == null ? null : _parseDuration(durationStr),
  76. episodeType:
  77. newItunesEpisodeType(findFirstElement(element, 'itunes:episodeType')),
  78. );
  79. }
  80. static Duration _parseDuration(String s) {
  81. var hours = 0;
  82. var minutes = 0;
  83. var seconds = 0;
  84. var parts = s.split(':');
  85. if (parts.length > 2) {
  86. hours = int.parse(parts[parts.length - 3]);
  87. }
  88. if (parts.length > 1) {
  89. minutes = int.parse(parts[parts.length - 2]);
  90. }
  91. seconds = int.parse(parts[parts.length - 1]);
  92. return Duration(
  93. hours: hours,
  94. minutes: minutes,
  95. seconds: seconds,
  96. );
  97. }
  98. }