From eb646f729689fe6c10bd41c8e2647b41eb7d5db5 Mon Sep 17 00:00:00 2001 From: James O'Leary <65884233+jpohhhh@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:58:31 -0400 Subject: [PATCH 1/2] Parse media thumbnails inside media group tag. YouTube has a somewhat unique RSS feed style for thumbnails. It embeds thumbnails inside a media:group. (see https://www.youtube.com/feeds/videos.xml?channel_id=UCAL3JXZSzSm8AlZyD3nQdBA) This change treats media:thumbnail inside media:group much like media:title and media:description inside media:group. All elements are searched for media:thumbnail, not just direct children of media. --- lib/domain/media/media.dart | 5 ++++- test/atom_test.dart | 22 ++++++++++++++++------ test/xml/Atom-Media.xml | 1 + 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/domain/media/media.dart b/lib/domain/media/media.dart index ef636fd..95d49bd 100644 --- a/lib/domain/media/media.dart +++ b/lib/domain/media/media.dart @@ -33,7 +33,10 @@ class Media { title: Title.parse(findElementOrNull(element, 'media:title')), description: Description.parse(findElementOrNull(element, 'media:description')), keywords: findElementOrNull(element, 'media:keywords')?.innerText, - thumbnails: element.findElements('media:thumbnail').map((e) => Thumbnail.parse(e)).toList(), + thumbnails: element + .findAllElements('media:thumbnail') + .map((e) => Thumbnail.parse(e)) + .toList(), hash: Hash.parse(findElementOrNull(element, 'media:hash')), player: Player.parse(findElementOrNull(element, 'media:player')), copyright: Copyright.parse(findElementOrNull(element, 'media:copyright')), diff --git a/test/atom_test.dart b/test/atom_test.dart index 1c8fd24..c4e8898 100644 --- a/test/atom_test.dart +++ b/test/atom_test.dart @@ -146,12 +146,22 @@ void main() { expect(item.media!.keywords, 'kitty, cat, big dog, yarn, fluffy'); - expect(item.media!.thumbnails.length, 2); - final mediaThumbnail = item.media!.thumbnails.first; - expect(mediaThumbnail.url, 'http://www.foo.com/keyframe1.jpg'); - expect(mediaThumbnail.width, '75'); - expect(mediaThumbnail.height, '50'); - expect(mediaThumbnail.time, '12:05:01.123'); + expect(item.media!.thumbnails.length, 3); + final mediaThumbnail0 = item.media!.thumbnails.first; + expect(mediaThumbnail0.url, 'http://www.foo.com/keyframe0.jpg'); + expect(mediaThumbnail0.width, '50'); + expect(mediaThumbnail0.height, '25'); + expect(mediaThumbnail0.time, null); + final mediaThumbnail1 = item.media!.thumbnails[1]; + expect(mediaThumbnail1.url, 'http://www.foo.com/keyframe1.jpg'); + expect(mediaThumbnail1.width, '75'); + expect(mediaThumbnail1.height, '50'); + expect(mediaThumbnail1.time, '12:05:01.123'); + final mediaThumbnail2 = item.media!.thumbnails[2]; + expect(mediaThumbnail2.url, 'http://www.foo.com/keyframe2.jpg'); + expect(mediaThumbnail2.width, '150'); + expect(mediaThumbnail2.height, '100'); + expect(mediaThumbnail2.time, '12:05:01.125'); expect(item.media!.hash!.algo, 'md5'); expect(item.media!.hash!.value, 'dfdec888b72151965a34b4b59031290a'); diff --git a/test/xml/Atom-Media.xml b/test/xml/Atom-Media.xml index 7f0ab84..6bac0e6 100644 --- a/test/xml/Atom-Media.xml +++ b/test/xml/Atom-Media.xml @@ -50,6 +50,7 @@ band member 2 music/artist name/album/song nonadult + The Judy's -- The Moo Song This was some really bizarre band I listened to as a young lad. From c9c0bb1eb7fceecb76adc459a3aa4d9da0e6a8ae Mon Sep 17 00:00:00 2001 From: James O'Leary Date: Tue, 20 May 2025 15:35:44 -0400 Subject: [PATCH 2/2] chore: update intl and lints --- pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 9e4abbc..63de4bb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,8 +10,8 @@ environment: dependencies: xml: ^6.3.0 http: ^1.1.2 - intl: ^0.19.0 + intl: ^0.20.2 dev_dependencies: test: ^1.16.4 - lints: ^2.1.1 + lints: ^6.0.0