Skip to content

Commit 7d79584

Browse files
committed
Add PC2.0 persons tag support; fix remaining .value references. All tests now pass.
1 parent 09dd137 commit 7d79584

File tree

9 files changed

+68
-15
lines changed

9 files changed

+68
-15
lines changed

lib/domain/media/scene.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ class Scene {
1616

1717
factory Scene.parse(XmlElement element) {
1818
return Scene(
19-
title: findElementOrNull(element, 'sceneTitle')?.value,
20-
description: findElementOrNull(element, 'sceneDescription')?.value,
21-
startTime: findElementOrNull(element, 'sceneStartTime')?.value,
22-
endTime: findElementOrNull(element, 'sceneEndTime')?.value,
19+
title: findElementOrNull(element, 'sceneTitle')?.innerText,
20+
description: findElementOrNull(element, 'sceneDescription')?.innerText,
21+
startTime: findElementOrNull(element, 'sceneStartTime')?.innerText,
22+
endTime: findElementOrNull(element, 'sceneEndTime')?.innerText,
2323
);
2424
}
2525
}

lib/domain/podcast_index/rss_podcast_index.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_funding.dart';
2+
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_person.dart';
23
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_locked.dart';
34
import 'package:rss_dart/util/helpers.dart';
45
import 'package:xml/xml.dart';
56

67
class RssPodcastIndex {
78
final List<RssPodcastIndexFunding?>? funding;
9+
final List<RssPodcastIndexPerson?>? persons;
810
final RssPodcastIndexLocked? locked;
911

1012
RssPodcastIndex({
1113
this.funding,
14+
this.persons,
1215
this.locked,
1316
});
1417

@@ -21,6 +24,9 @@ class RssPodcastIndex {
2124
funding: element.findElements('podcast:funding').map((e) {
2225
return RssPodcastIndexFunding.parse(e);
2326
}).toList(),
27+
persons: element.findElements('podcast:person').map((e) {
28+
return RssPodcastIndexPerson.parse(e);
29+
}).toList(),
2430
locked: RssPodcastIndexLocked.parse(
2531
findElementOrNull(element, 'podcast:locked'),
2632
),
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:xml/xml.dart';
2+
3+
class RssPodcastIndexPerson {
4+
String name;
5+
String? role;
6+
String? group;
7+
String? image;
8+
String? link;
9+
10+
RssPodcastIndexPerson({
11+
required this.name,
12+
this.role,
13+
this.group,
14+
this.image,
15+
this.link,
16+
});
17+
18+
factory RssPodcastIndexPerson.parse(XmlElement element) {
19+
final role = element.getAttribute('role');
20+
final group = element.getAttribute('group');
21+
final image = element.getAttribute('img');
22+
final link = element.getAttribute('href');
23+
final name = element.innerText.trim();
24+
25+
return RssPodcastIndexPerson(
26+
name: name, role: role, group: group, image: image, link: link);
27+
}
28+
}

lib/domain/rss_feed.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:core';
22

33
import 'package:rss_dart/domain/dublin_core/dublin_core.dart';
44
import 'package:rss_dart/domain/podcast_index/rss_podcast_index.dart';
5+
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_person.dart';
56
import 'package:rss_dart/domain/rss_category.dart';
67
import 'package:rss_dart/domain/rss_cloud.dart';
78
import 'package:rss_dart/domain/rss_image.dart';
@@ -16,6 +17,7 @@ class RssFeed {
1617
final String? author;
1718
final String? description;
1819
final String? link;
20+
final List<RssPodcastIndexPerson?>? persons;
1921
final List<RssItem> items;
2022

2123
final RssImage? image;
@@ -59,6 +61,7 @@ class RssFeed {
5961
this.dc,
6062
this.itunes,
6163
this.podcastIndex,
64+
this.persons,
6265
});
6366

6467
factory RssFeed.parse(String xmlString) {
@@ -79,6 +82,10 @@ class RssFeed {
7982
.findElements('item')
8083
.map((element) => RssItem.parse(element))
8184
.toList(),
85+
persons: channelElement
86+
.findElements('person')
87+
.map((element) => RssPodcastIndexPerson.parse(element))
88+
.toList(),
8289
image: RssImage.parse(findElementOrNull(channelElement, 'image')),
8390
cloud: RssCloud.parse(findElementOrNull(channelElement, 'cloud')),
8491
categories: channelElement

lib/domain/rss_item_itunes.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ class RssItemItunes {
5757
explicit: parseBoolLiteral(element, 'itunes:explicit'),
5858
subtitle: findElementOrNull(element, 'itunes:subtitle')?.innerText.trim(),
5959
keywords: findElementOrNull(element, 'itunes:keywords')
60-
?.value
61-
?.split(',')
60+
?.innerText
61+
.split(',')
6262
.map((keyword) => keyword.trim())
6363
.toList() ??
6464
const <String>[],

lib/domain/rss_item_podcast_index.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_chapters.dart';
2+
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_person.dart';
23
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_soudbite.dart';
34
import 'package:rss_dart/domain/podcast_index/rss_podcast_index_transcript.dart';
45
import 'package:rss_dart/util/helpers.dart';
@@ -8,11 +9,13 @@ class RssItemPodcastIndex {
89
final RssPodcastIndexChapters? chapters;
910
final List<RssPodcastIndexTranscript?> transcripts;
1011
final List<RssPodcastIndexSoundbite?> soundbites;
12+
final List<RssPodcastIndexPerson?> persons;
1113

1214
RssItemPodcastIndex({
1315
this.chapters,
1416
this.transcripts = const <RssPodcastIndexTranscript>[],
1517
this.soundbites = const <RssPodcastIndexSoundbite>[],
18+
this.persons = const <RssPodcastIndexPerson>[],
1619
});
1720

1821
factory RssItemPodcastIndex.parse(XmlElement element) {
@@ -26,6 +29,9 @@ class RssItemPodcastIndex {
2629
soundbites: element.findElements('podcast:soundbite').map((e) {
2730
return RssPodcastIndexSoundbite.parse(e);
2831
}).toList(),
32+
persons: element.findElements('podcast:person').map((e) {
33+
return RssPodcastIndexPerson.parse(e);
34+
}).toList(),
2935
);
3036
}
3137
}

lib/domain/rss_itunes_episode_type.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ RssItunesEpisodeType? newRssItunesEpisodeType(XmlElement? element) {
66
// "full" is default type
77
if (element == null) return RssItunesEpisodeType.full;
88

9-
switch (element.value) {
9+
switch (element.innerText) {
1010
case 'full':
1111
return RssItunesEpisodeType.full;
1212
case 'trailer':

lib/domain/rss_source.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ class RssSource {
77
const RssSource(this.url, this.value);
88

99
static RssSource? parse(XmlElement? element) {
10-
if (element == null || element.value == null) {
10+
if (element == null) {
1111
return null;
1212
}
1313
final url = element.getAttribute('url');
14-
final value = element.value;
14+
final value = element.innerText;
1515

16-
return RssSource(url, value!);
16+
return RssSource(url, value);
1717
}
1818
}

lib/util/helpers.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@ import 'dart:core';
22

33
import 'package:xml/xml.dart';
44

5-
XmlElement? findElementOrNull(XmlElement element, String name,
6-
{String? namespace,}) {
5+
XmlElement? findElementOrNull(
6+
XmlElement element,
7+
String name, {
8+
String? namespace,
9+
}) {
710
try {
811
return element.findAllElements(name, namespace: namespace).first;
912
} on StateError {
1013
return null;
1114
}
1215
}
1316

14-
List<XmlElement>? findAllDirectElementsOrNull(XmlElement element, String name,
15-
{String? namespace,}) {
17+
List<XmlElement>? findAllDirectElementsOrNull(
18+
XmlElement element,
19+
String name, {
20+
String? namespace,
21+
}) {
1622
try {
1723
return element.findElements(name, namespace: namespace).toList();
1824
} on StateError {
@@ -21,7 +27,7 @@ List<XmlElement>? findAllDirectElementsOrNull(XmlElement element, String name,
2127
}
2228

2329
bool? parseBoolLiteral(XmlElement element, String tagName) {
24-
final v = findElementOrNull(element, tagName)?.value?.toLowerCase().trim();
30+
final v = findElementOrNull(element, tagName)?.innerText.toLowerCase().trim();
2531
if (v == null) return null;
2632
return ['yes', 'true'].contains(v);
2733
}

0 commit comments

Comments
 (0)