The Webfeed Flutter package for Appeto SDK.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

194 wiersze
5.8 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:webfeed/util/iterable.dart';
  24. import 'package:xml/xml.dart';
  25. class Media {
  26. final Group? group;
  27. final List<Content>? contents;
  28. final List<Credit>? credits;
  29. final Category? category;
  30. final Rating? rating;
  31. final Title? title;
  32. final Description? description;
  33. final String? keywords;
  34. final List<Thumbnail>? thumbnails;
  35. final Hash? hash;
  36. final Player? player;
  37. final Copyright? copyright;
  38. final Text? text;
  39. final Restriction? restriction;
  40. final Community? community;
  41. final List<String>? comments;
  42. final Embed? embed;
  43. final List<String>? responses;
  44. final List<String>? backLinks;
  45. final Status? status;
  46. final List<Price>? prices;
  47. final License? license;
  48. final PeerLink? peerLink;
  49. final Rights? rights;
  50. final List<Scene>? scenes;
  51. Media({
  52. this.group,
  53. this.contents,
  54. this.credits,
  55. this.category,
  56. this.rating,
  57. this.title,
  58. this.description,
  59. this.keywords,
  60. this.thumbnails,
  61. this.hash,
  62. this.player,
  63. this.copyright,
  64. this.text,
  65. this.restriction,
  66. this.community,
  67. this.comments,
  68. this.embed,
  69. this.responses,
  70. this.backLinks,
  71. this.status,
  72. this.prices,
  73. this.license,
  74. this.peerLink,
  75. this.rights,
  76. this.scenes,
  77. });
  78. factory Media.parse(XmlElement element) {
  79. return Media(
  80. group: element
  81. .findElements('media:group')
  82. .map((e) => Group.parse(e))
  83. .firstOrNull,
  84. contents: element
  85. .findElements('media:content')
  86. .map((e) => Content.parse(e))
  87. .toList(),
  88. credits: element
  89. .findElements('media:credit')
  90. .map((e) => Credit.parse(e))
  91. .toList(),
  92. category: element
  93. .findElements('media:category')
  94. .map((e) => Category.parse(e))
  95. .firstOrNull,
  96. rating: element
  97. .findElements('media:rating')
  98. .map((e) => Rating.parse(e))
  99. .firstOrNull,
  100. title: findElements(element, 'media:title')
  101. ?.map((e) => Title.parse(e))
  102. .firstOrNull,
  103. description: element
  104. .findElements('media:description')
  105. .map((e) => Description.parse(e))
  106. .firstOrNull,
  107. keywords: element.findElements('media:keywords').firstOrNull?.text,
  108. thumbnails: element
  109. .findElements('media:thumbnail')
  110. .map((e) => Thumbnail.parse(e))
  111. .toList(),
  112. hash: element
  113. .findElements('media:hash')
  114. .map((e) => Hash.parse(e))
  115. .firstOrNull,
  116. player: element
  117. .findElements('media:player')
  118. .map((e) => Player.parse(e))
  119. .firstOrNull,
  120. copyright: element
  121. .findElements('media:copyright')
  122. .map((e) => Copyright.parse(e))
  123. .firstOrNull,
  124. text: element
  125. .findElements('media:text')
  126. .map((e) => Text.parse(e))
  127. .firstOrNull,
  128. restriction: element
  129. .findElements('media:restriction')
  130. .map((e) => Restriction.parse(e))
  131. .firstOrNull,
  132. community: element
  133. .findElements('media:community')
  134. .map((e) => Community.parse(e))
  135. .firstOrNull,
  136. comments: element
  137. .findElements('media:comments')
  138. .firstOrNull
  139. ?.findElements('media:comment')
  140. .map((e) => e.text)
  141. .toList() ??
  142. [],
  143. embed: element
  144. .findElements('media:embed')
  145. .map((e) => Embed.parse(e))
  146. .firstOrNull,
  147. responses: element
  148. .findElements('media:responses')
  149. .firstOrNull
  150. ?.findElements('media:response')
  151. .map((e) => e.text)
  152. .toList() ??
  153. [],
  154. backLinks: element
  155. .findElements('media:backLinks')
  156. .firstOrNull
  157. ?.findElements('media:backLink')
  158. .map((e) => e.text)
  159. .toList() ??
  160. [],
  161. status: element
  162. .findElements('media:status')
  163. .map((e) => Status.parse(e))
  164. .firstOrNull,
  165. prices: element
  166. .findElements('media:price')
  167. .map((e) => Price.parse(e))
  168. .toList(),
  169. license: element
  170. .findElements('media:license')
  171. .map((e) => License.parse(e))
  172. .firstOrNull,
  173. peerLink: element
  174. .findElements('media:peerLink')
  175. .map((e) => PeerLink.parse(e))
  176. .firstOrNull,
  177. rights: element
  178. .findElements('media:rights')
  179. .map((e) => Rights.parse(e))
  180. .firstOrNull,
  181. scenes: element
  182. .findElements('media:scenes')
  183. .firstOrNull
  184. ?.findElements('media:scene')
  185. .map((e) => Scene.parse(e))
  186. .toList() ??
  187. [],
  188. );
  189. }
  190. }