|
|
|
@@ -1,9 +1,11 @@ |
|
|
|
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/helpers.dart'; |
|
|
|
import 'package:xml/xml.dart'; |
|
|
|
import 'package:webfeed/util/helpers.dart'; |
|
|
|
|
|
|
|
class RssItem { |
|
|
|
final String title; |
|
|
|
@@ -18,6 +20,7 @@ class RssItem { |
|
|
|
final RssSource source; |
|
|
|
final RssContent content; |
|
|
|
final Media media; |
|
|
|
final RssEnclosure enclosure; |
|
|
|
|
|
|
|
RssItem({ |
|
|
|
this.title, |
|
|
|
@@ -31,45 +34,25 @@ class RssItem { |
|
|
|
this.source, |
|
|
|
this.content, |
|
|
|
this.media, |
|
|
|
this.enclosure, |
|
|
|
}); |
|
|
|
|
|
|
|
factory RssItem.parse(XmlElement element) { |
|
|
|
var title = xmlGetString(element, "title", strict: false); |
|
|
|
var description = xmlGetString(element, "description", strict: false); |
|
|
|
var link = xmlGetString(element, "link", strict: false); |
|
|
|
|
|
|
|
var categories = element.findElements("category").map((element) { |
|
|
|
return new RssCategory.parse(element); |
|
|
|
}).toList(); |
|
|
|
|
|
|
|
var guid = xmlGetString(element, "guid", strict: false); |
|
|
|
var pubDate = xmlGetString(element, "pubDate", strict: false); |
|
|
|
var author = xmlGetString(element, "author", strict: false); |
|
|
|
var comments = xmlGetString(element, "comments", strict: false); |
|
|
|
|
|
|
|
RssSource source; |
|
|
|
try { |
|
|
|
source = new RssSource.parse(element.findElements("source").first); |
|
|
|
} on StateError {} |
|
|
|
|
|
|
|
RssContent content; |
|
|
|
try { |
|
|
|
content = |
|
|
|
new RssContent.parse(element.findElements("content:encoded").first); |
|
|
|
} on StateError {} |
|
|
|
|
|
|
|
return new RssItem( |
|
|
|
title: title, |
|
|
|
description: description, |
|
|
|
link: link, |
|
|
|
categories: categories, |
|
|
|
guid: guid, |
|
|
|
pubDate: pubDate, |
|
|
|
author: author, |
|
|
|
comments: comments, |
|
|
|
source: source, |
|
|
|
content: content, |
|
|
|
title: findElementOrNull(element, "title")?.text, |
|
|
|
description: findElementOrNull(element, "description")?.text, |
|
|
|
link: findElementOrNull(element, "link")?.text, |
|
|
|
categories: element.findElements("category").map((element) { |
|
|
|
return new RssCategory.parse(element); |
|
|
|
}).toList(), |
|
|
|
guid: findElementOrNull(element, "guid")?.text, |
|
|
|
pubDate: findElementOrNull(element, "pubDate")?.text, |
|
|
|
author: findElementOrNull(element, "author")?.text, |
|
|
|
comments: findElementOrNull(element, "comments")?.text, |
|
|
|
source: RssSource.parse(findElementOrNull(element, "source")), |
|
|
|
content: RssContent.parse(findElementOrNull(element, "content:encoded")), |
|
|
|
media: Media.parse(element), |
|
|
|
enclosure: RssEnclosure.parse(findElementOrNull(element, "enclosure")), |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
|