import 'package:webfeed/domain/media/category.dart'; import 'package:webfeed/domain/media/community.dart'; import 'package:webfeed/domain/media/content.dart'; import 'package:webfeed/domain/media/copyright.dart'; import 'package:webfeed/domain/media/credit.dart'; import 'package:webfeed/domain/media/description.dart'; import 'package:webfeed/domain/media/embed.dart'; import 'package:webfeed/domain/media/group.dart'; import 'package:webfeed/domain/media/hash.dart'; import 'package:webfeed/domain/media/license.dart'; import 'package:webfeed/domain/media/peer_link.dart'; import 'package:webfeed/domain/media/player.dart'; import 'package:webfeed/domain/media/price.dart'; import 'package:webfeed/domain/media/rating.dart'; import 'package:webfeed/domain/media/restriction.dart'; import 'package:webfeed/domain/media/rights.dart'; import 'package:webfeed/domain/media/scene.dart'; import 'package:webfeed/domain/media/status.dart'; import 'package:webfeed/domain/media/text.dart'; import 'package:webfeed/domain/media/thumbnail.dart'; import 'package:webfeed/domain/media/title.dart'; import 'package:webfeed/util/xml.dart'; import 'package:webfeed/util/iterable.dart'; import 'package:xml/xml.dart'; class Media { final Group? group; final List? contents; final List? credits; final Category? category; final Rating? rating; final Title? title; final Description? description; final String? keywords; final List? thumbnails; final Hash? hash; final Player? player; final Copyright? copyright; final Text? text; final Restriction? restriction; final Community? community; final List? comments; final Embed? embed; final List? responses; final List? backLinks; final Status? status; final List? prices; final License? license; final PeerLink? peerLink; final Rights? rights; final List? scenes; Media({ this.group, this.contents, this.credits, this.category, this.rating, this.title, this.description, this.keywords, this.thumbnails, this.hash, this.player, this.copyright, this.text, this.restriction, this.community, this.comments, this.embed, this.responses, this.backLinks, this.status, this.prices, this.license, this.peerLink, this.rights, this.scenes, }); factory Media.parse(XmlElement element) { return Media( group: element .findElements('media:group') .map((e) => Group.parse(e)) .firstOrNull, contents: element .findElements('media:content') .map((e) => Content.parse(e)) .toList(), credits: element .findElements('media:credit') .map((e) => Credit.parse(e)) .toList(), category: element .findElements('media:category') .map((e) => Category.parse(e)) .firstOrNull, rating: element .findElements('media:rating') .map((e) => Rating.parse(e)) .firstOrNull, title: findElements(element, 'media:title') ?.map((e) => Title.parse(e)) .firstOrNull, description: element .findElements('media:description') .map((e) => Description.parse(e)) .firstOrNull, keywords: element.findElements('media:keywords').firstOrNull?.text, thumbnails: element .findElements('media:thumbnail') .map((e) => Thumbnail.parse(e)) .toList(), hash: element .findElements('media:hash') .map((e) => Hash.parse(e)) .firstOrNull, player: element .findElements('media:player') .map((e) => Player.parse(e)) .firstOrNull, copyright: element .findElements('media:copyright') .map((e) => Copyright.parse(e)) .firstOrNull, text: element .findElements('media:text') .map((e) => Text.parse(e)) .firstOrNull, restriction: element .findElements('media:restriction') .map((e) => Restriction.parse(e)) .firstOrNull, community: element .findElements('media:community') .map((e) => Community.parse(e)) .firstOrNull, comments: element .findElements('media:comments') .firstOrNull ?.findElements('media:comment') .map((e) => e.text) .toList() ?? [], embed: element .findElements('media:embed') .map((e) => Embed.parse(e)) .firstOrNull, responses: element .findElements('media:responses') .firstOrNull ?.findElements('media:response') .map((e) => e.text) .toList() ?? [], backLinks: element .findElements('media:backLinks') .firstOrNull ?.findElements('media:backLink') .map((e) => e.text) .toList() ?? [], status: element .findElements('media:status') .map((e) => Status.parse(e)) .firstOrNull, prices: element .findElements('media:price') .map((e) => Price.parse(e)) .toList(), license: element .findElements('media:license') .map((e) => License.parse(e)) .firstOrNull, peerLink: element .findElements('media:peerLink') .map((e) => PeerLink.parse(e)) .firstOrNull, rights: element .findElements('media:rights') .map((e) => Rights.parse(e)) .firstOrNull, scenes: element .findElements('media:scenes') .firstOrNull ?.findElements('media:scene') .map((e) => Scene.parse(e)) .toList() ?? [], ); } }