The Webfeed Flutter package for Appeto SDK.
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

170 righe
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. findFirstElement(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. findFirstElement(element, 'media:category'),
  90. ),
  91. rating: Rating.parse(
  92. findFirstElement(element, 'media:rating'),
  93. ),
  94. title: Title.parse(
  95. findFirstElement(element, 'media:title'),
  96. ),
  97. description: Description.parse(
  98. findFirstElement(element, 'media:description'),
  99. ),
  100. keywords: findFirstElement(element, 'media:keywords')?.text,
  101. thumbnails: element.findElements('media:thumbnail').map((e) {
  102. return Thumbnail.parse(e);
  103. }).toList(),
  104. hash: Hash.parse(
  105. findFirstElement(element, 'media:hash'),
  106. ),
  107. player: Player.parse(
  108. findFirstElement(element, 'media:player'),
  109. ),
  110. copyright: Copyright.parse(
  111. findFirstElement(element, 'media:copyright'),
  112. ),
  113. text: Text.parse(
  114. findFirstElement(element, 'media:text'),
  115. ),
  116. restriction: Restriction.parse(
  117. findFirstElement(element, 'media:restriction'),
  118. ),
  119. community: Community.parse(
  120. findFirstElement(element, 'media:community'),
  121. ),
  122. comments: findFirstElement(element, 'media:comments')
  123. ?.findElements('media:comment')
  124. .map((e) {
  125. return e.text;
  126. }).toList() ??
  127. [],
  128. embed: Embed.parse(
  129. findFirstElement(element, 'media:embed'),
  130. ),
  131. responses: findFirstElement(element, 'media:responses')
  132. ?.findElements('media:response')
  133. .map((e) {
  134. return e.text;
  135. }).toList() ??
  136. [],
  137. backLinks: findFirstElement(element, 'media:backLinks')
  138. ?.findElements('media:backLink')
  139. .map((e) {
  140. return e.text;
  141. }).toList() ??
  142. [],
  143. status: Status.parse(
  144. findFirstElement(element, 'media:status'),
  145. ),
  146. prices: element.findElements('media:price').map((e) {
  147. return Price.parse(e);
  148. }).toList(),
  149. license: License.parse(
  150. findFirstElement(element, 'media:license'),
  151. ),
  152. peerLink: PeerLink.parse(
  153. findFirstElement(element, 'media:peerLink'),
  154. ),
  155. rights: Rights.parse(
  156. findFirstElement(element, 'media:rights'),
  157. ),
  158. scenes: findFirstElement(element, 'media:scenes')
  159. ?.findElements('media:scene')
  160. .map((e) {
  161. return Scene.parse(e);
  162. }).toList() ??
  163. [],
  164. );
  165. }
  166. }