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.2 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 new Media(
  79. group: new Group.parse(
  80. findElementOrNull(element, "media:group"),
  81. ),
  82. contents: element.findElements("media:content").map((e) {
  83. return new Content.parse(e);
  84. }).toList(),
  85. credits: element.findElements("media:credit").map((e) {
  86. return new Credit.parse(e);
  87. }).toList(),
  88. category: new Category.parse(
  89. findElementOrNull(element, "media:category"),
  90. ),
  91. rating: new Rating.parse(
  92. findElementOrNull(element, "media:rating"),
  93. ),
  94. title: new Title.parse(
  95. findElementOrNull(element, "media:title"),
  96. ),
  97. description: new 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 new Thumbnail.parse(e);
  103. }).toList(),
  104. hash: new Hash.parse(
  105. findElementOrNull(element, "media:hash"),
  106. ),
  107. player: new Player.parse(
  108. findElementOrNull(element, "media:player"),
  109. ),
  110. copyright: new Copyright.parse(
  111. findElementOrNull(element, "media:copyright"),
  112. ),
  113. text: new Text.parse(
  114. findElementOrNull(element, "media:text"),
  115. ),
  116. restriction: new Restriction.parse(
  117. findElementOrNull(element, "media:restriction"),
  118. ),
  119. community: new 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: new 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: new Status.parse(
  144. findElementOrNull(element, "media:status"),
  145. ),
  146. prices: element.findElements("media:price").map((e) {
  147. return new Price.parse(e);
  148. }).toList(),
  149. license: new License.parse(
  150. findElementOrNull(element, "media:license"),
  151. ),
  152. peerLink: new PeerLink.parse(
  153. findElementOrNull(element, "media:peerLink"),
  154. ),
  155. rights: new Rights.parse(
  156. findElementOrNull(element, "media:rights"),
  157. ),
  158. scenes: findElementOrNull(element, "media:scenes")
  159. ?.findElements("media:scene")
  160. ?.map((e) {
  161. return new Scene.parse(e);
  162. })?.toList() ??
  163. [],
  164. );
  165. }
  166. }