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.

170 lignes
5.1 KiB

  1. import 'package:webfeed/domain/media/category.dart';
  2. import 'package:webfeed/domain/media/community.dart';
  3. import 'package:webfeed/domain/media/content.dart';
  4. import 'package:webfeed/domain/media/copyright.dart';
  5. import 'package:webfeed/domain/media/credit.dart';
  6. import 'package:webfeed/domain/media/description.dart';
  7. import 'package:webfeed/domain/media/embed.dart';
  8. import 'package:webfeed/domain/media/group.dart';
  9. import 'package:webfeed/domain/media/hash.dart';
  10. import 'package:webfeed/domain/media/license.dart';
  11. import 'package:webfeed/domain/media/peer_link.dart';
  12. import 'package:webfeed/domain/media/player.dart';
  13. import 'package:webfeed/domain/media/price.dart';
  14. import 'package:webfeed/domain/media/rating.dart';
  15. import 'package:webfeed/domain/media/restriction.dart';
  16. import 'package:webfeed/domain/media/rights.dart';
  17. import 'package:webfeed/domain/media/scene.dart';
  18. import 'package:webfeed/domain/media/status.dart';
  19. import 'package:webfeed/domain/media/text.dart';
  20. import 'package:webfeed/domain/media/thumbnail.dart';
  21. import 'package:webfeed/domain/media/title.dart';
  22. import 'package:webfeed/util/xml.dart';
  23. import 'package:xml/xml.dart';
  24. class Media {
  25. final Group group;
  26. final List<Content> contents;
  27. final List<Credit> credits;
  28. final Category category;
  29. final Rating rating;
  30. final Title title;
  31. final Description description;
  32. final String keywords;
  33. final List<Thumbnail> thumbnails;
  34. final Hash hash;
  35. final Player player;
  36. final Copyright copyright;
  37. final Text text;
  38. final Restriction restriction;
  39. final Community community;
  40. final List<String> comments;
  41. final Embed embed;
  42. final List<String> responses;
  43. final List<String> backLinks;
  44. final Status status;
  45. final List<Price> prices;
  46. final License license;
  47. final PeerLink peerLink;
  48. final Rights rights;
  49. final List<Scene> scenes;
  50. Media({
  51. this.group,
  52. this.contents,
  53. this.credits,
  54. this.category,
  55. this.rating,
  56. this.title,
  57. this.description,
  58. this.keywords,
  59. this.thumbnails,
  60. this.hash,
  61. this.player,
  62. this.copyright,
  63. this.text,
  64. this.restriction,
  65. this.community,
  66. this.comments,
  67. this.embed,
  68. this.responses,
  69. this.backLinks,
  70. this.status,
  71. this.prices,
  72. this.license,
  73. this.peerLink,
  74. this.rights,
  75. this.scenes,
  76. });
  77. factory Media.parse(XmlElement element) {
  78. return Media(
  79. group: Group.parse(
  80. findElementOrNull(element, "media:group"),
  81. ),
  82. contents: element.findElements("media:content").map((e) {
  83. return Content.parse(e);
  84. }).toList(),
  85. credits: element.findElements("media:credit").map((e) {
  86. return Credit.parse(e);
  87. }).toList(),
  88. category: Category.parse(
  89. findElementOrNull(element, "media:category"),
  90. ),
  91. rating: Rating.parse(
  92. findElementOrNull(element, "media:rating"),
  93. ),
  94. title: Title.parse(
  95. findElementOrNull(element, "media:title"),
  96. ),
  97. description: Description.parse(
  98. findElementOrNull(element, "media:description"),
  99. ),
  100. keywords: findElementOrNull(element, "media:keywords")?.text,
  101. thumbnails: element.findElements("media:thumbnail").map((e) {
  102. return Thumbnail.parse(e);
  103. }).toList(),
  104. hash: Hash.parse(
  105. findElementOrNull(element, "media:hash"),
  106. ),
  107. player: Player.parse(
  108. findElementOrNull(element, "media:player"),
  109. ),
  110. copyright: Copyright.parse(
  111. findElementOrNull(element, "media:copyright"),
  112. ),
  113. text: Text.parse(
  114. findElementOrNull(element, "media:text"),
  115. ),
  116. restriction: Restriction.parse(
  117. findElementOrNull(element, "media:restriction"),
  118. ),
  119. community: Community.parse(
  120. findElementOrNull(element, "media:community"),
  121. ),
  122. comments: findElementOrNull(element, "media:comments")
  123. ?.findElements("media:comment")
  124. ?.map((e) {
  125. return e.text;
  126. })?.toList() ??
  127. [],
  128. embed: Embed.parse(
  129. findElementOrNull(element, "media:embed"),
  130. ),
  131. responses: findElementOrNull(element, "media:responses")
  132. ?.findElements("media:response")
  133. ?.map((e) {
  134. return e.text;
  135. })?.toList() ??
  136. [],
  137. backLinks: findElementOrNull(element, "media:backLinks")
  138. ?.findElements("media:backLink")
  139. ?.map((e) {
  140. return e.text;
  141. })?.toList() ??
  142. [],
  143. status: Status.parse(
  144. findElementOrNull(element, "media:status"),
  145. ),
  146. prices: element.findElements("media:price").map((e) {
  147. return Price.parse(e);
  148. }).toList(),
  149. license: License.parse(
  150. findElementOrNull(element, "media:license"),
  151. ),
  152. peerLink: PeerLink.parse(
  153. findElementOrNull(element, "media:peerLink"),
  154. ),
  155. rights: Rights.parse(
  156. findElementOrNull(element, "media:rights"),
  157. ),
  158. scenes: findElementOrNull(element, "media:scenes")
  159. ?.findElements("media:scene")
  160. ?.map((e) {
  161. return Scene.parse(e);
  162. })?.toList() ??
  163. [],
  164. );
  165. }
  166. }