1
1
import 'package:webfeed/domain/media/media.dart' ;
2
2
import 'package:webfeed/domain/rss_category.dart' ;
3
3
import 'package:webfeed/domain/rss_content.dart' ;
4
+ import 'package:webfeed/domain/rss_enclosure.dart' ;
4
5
import 'package:webfeed/domain/rss_source.dart' ;
5
6
import 'package:webfeed/util/helpers.dart' ;
6
7
import 'package:xml/xml.dart' ;
8
+ import 'package:webfeed/util/helpers.dart' ;
7
9
8
10
class RssItem {
9
11
final String title;
@@ -18,6 +20,7 @@ class RssItem {
18
20
final RssSource source;
19
21
final RssContent content;
20
22
final Media media;
23
+ final RssEnclosure enclosure;
21
24
22
25
RssItem ({
23
26
this .title,
@@ -31,45 +34,25 @@ class RssItem {
31
34
this .source,
32
35
this .content,
33
36
this .media,
37
+ this .enclosure,
34
38
});
35
39
36
40
factory RssItem .parse (XmlElement element) {
37
- var title = xmlGetString (element, "title" , strict: false );
38
- var description = xmlGetString (element, "description" , strict: false );
39
- var link = xmlGetString (element, "link" , strict: false );
40
-
41
- var categories = element.findElements ("category" ).map ((element) {
42
- return new RssCategory .parse (element);
43
- }).toList ();
44
-
45
- var guid = xmlGetString (element, "guid" , strict: false );
46
- var pubDate = xmlGetString (element, "pubDate" , strict: false );
47
- var author = xmlGetString (element, "author" , strict: false );
48
- var comments = xmlGetString (element, "comments" , strict: false );
49
-
50
- RssSource source;
51
- try {
52
- source = new RssSource .parse (element.findElements ("source" ).first);
53
- } on StateError {}
54
-
55
- RssContent content;
56
- try {
57
- content =
58
- new RssContent .parse (element.findElements ("content:encoded" ).first);
59
- } on StateError {}
60
-
61
41
return new RssItem (
62
- title: title,
63
- description: description,
64
- link: link,
65
- categories: categories,
66
- guid: guid,
67
- pubDate: pubDate,
68
- author: author,
69
- comments: comments,
70
- source: source,
71
- content: content,
42
+ title: findElementOrNull (element, "title" )? .text,
43
+ description: findElementOrNull (element, "description" )? .text,
44
+ link: findElementOrNull (element, "link" )? .text,
45
+ categories: element.findElements ("category" ).map ((element) {
46
+ return new RssCategory .parse (element);
47
+ }).toList (),
48
+ guid: findElementOrNull (element, "guid" )? .text,
49
+ pubDate: findElementOrNull (element, "pubDate" )? .text,
50
+ author: findElementOrNull (element, "author" )? .text,
51
+ comments: findElementOrNull (element, "comments" )? .text,
52
+ source: RssSource .parse (findElementOrNull (element, "source" )),
53
+ content: RssContent .parse (findElementOrNull (element, "content:encoded" )),
72
54
media: Media .parse (element),
55
+ enclosure: RssEnclosure .parse (findElementOrNull (element, "enclosure" )),
73
56
);
74
57
}
75
58
0 commit comments