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