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.

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