import 'package:webfeed/domain/dublin_core/dublin_core.dart'; import 'package:webfeed/domain/itunes/itunes.dart'; import 'package:webfeed/domain/media/media.dart'; import 'package:webfeed/domain/rss_category.dart'; import 'package:webfeed/domain/rss_content.dart'; import 'package:webfeed/domain/rss_enclosure.dart'; import 'package:webfeed/domain/rss_source.dart'; import 'package:webfeed/util/datetime.dart'; import 'package:webfeed/util/iterable.dart'; import 'package:xml/xml.dart'; class RssItem { final String? title; final String? description; final String? link; final List? categories; final String? guid; final DateTime? pubDate; final String? author; final String? comments; final RssSource? source; final RssContent? content; final Media? media; final RssEnclosure? enclosure; final DublinCore? dc; final Itunes? itunes; RssItem({ this.title, this.description, this.link, this.categories, this.guid, this.pubDate, this.author, this.comments, this.source, this.content, this.media, this.enclosure, this.dc, this.itunes, }); factory RssItem.parse(XmlElement element) { return RssItem( title: element.findElements('title').firstOrNull?.text, description: element.findElements('description').firstOrNull?.text, link: element.findElements('link').firstOrNull?.text, categories: element .findElements('category') .map((e) => RssCategory.parse(e)) .toList(), guid: element.findElements('guid').firstOrNull?.text, pubDate: parseDateTime(element.findElements('pubDate').firstOrNull?.text), author: element.findElements('author').firstOrNull?.text, comments: element.findElements('comments').firstOrNull?.text, source: element .findElements('source') .map((e) => RssSource.parse(e)) .firstOrNull, content: element .findElements('content:encoded') .map((e) => RssContent.parse(e)) .firstOrNull, media: Media.parse(element), enclosure: element .findElements('enclosure') .map((e) => RssEnclosure.parse(e)) .firstOrNull, dc: DublinCore.parse(element), itunes: Itunes.parse(element), ); } }